kubernetes学习-Service(七)

 一、Service-pod-endpoint关系

# 查看endpoints
[root@k8s-master deployments]# kubectl get endpoints
NAME         ENDPOINTS                          AGE
kubernetes   192.168.129.136:6443               90m
nginx-svc    10.109.131.1:80,10.111.156.65:80   22m
# 查看svc
[root@k8s-master deployments]# kubectl get svc
NAME         TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)        AGE
kubernetes   ClusterIP   10.96.0.1       <none>        443/TCP        90m
nginx-svc    NodePort    10.98.220.155   <none>        80:31662/TCP   22m[root@k8s-master deployments]# kubectl get po -l app=nginx-deploy -o wide
NAME                            READY   STATUS    RESTARTS   AGE   IP              NODE        NOMINATED NODE   READINESS GATES
nginx-deploy-86c5776ccd-grc2c   1/1     Running   0          46m   10.109.131.1    k8s-node2   <none>           <none>
nginx-deploy-86c5776ccd-kplgd   1/1     Running   0          47m   10.111.156.65   k8s-node1   <none>           <none>
[root@k8s-master deployments]# kubectl get ep
NAME         ENDPOINTS                          AGE
kubernetes   192.168.129.136:6443               94m
nginx-svc    10.109.131.1:80,10.111.156.65:80   25m可以看到endpoints中的名字和svc的名字是一样的,并且在endpoints中有两个IP地址分别为:
10.109.131.1:80
10.111.156.65:80,
同时,在po中看到,
nginx-deploy-86c5776ccd-grc2c对应10.109.131.1
nginx-deploy-86c5776ccd-kplgd对应10.111.156.65

 Service,Pod,Endpoint之间的关系

 二、Service定义

(1)配置文件
apiVersion: v1
kind: Service
metadata:name: nginx-svclabels:app: nginx-svc
spec:ports:- name: http # service 端口配置的名称protocol: TCP # 端口绑定的协议,支持 TCP、UDP、SCTP,默认为 TCPport: 80 # service 自己的端口targetPort: 9527 # 目标 pod 的端口- name: httpsport: 443protocol: TCPtargetPort: 443selector: # 选中当前 service 匹配哪些 pod,对哪些 pod 的东西流量进行代理app: nginx
(2)常用命令
# 创建 service
kubectl create -f nginx-svc.yaml# 查看 service 信息,通过 service 的 cluster ip 进行访问
kubectl get svc # 查看 pod 信息,通过 pod 的 ip 进行访问
kubectl get po -owide# 创建其他 pod 通过 service name 进行访问(推荐)
kubectl exec -it busybox -- sh
curl http://nginx-svc# 默认在当前 namespace 中访问,如果需要跨 namespace 访问 pod,则在 service name 后面加上 .<namespace> 即可
curl http://nginx-svc.default
(3)访问测试
# 创建一个busybox,并进入容器,如果之前已经创建了,则直接进入:kubectl exec -it dns-test -- sh
[root@k8s-master www]# kubectl run -it --image busybox dns-test --restart=Never --rm /bin/sh
If you don't see a command prompt, try pressing enter.
/ # wget http://nginx-svc  // 使用wget访问服务名
Connecting to nginx-svc (10.98.220.155:80)
saving to 'index.html'
index.html           100% |****************************************************************************************************************************************************************************************************************|   615  0:00:00 ETA
'index.html' saved
/ # cat index.html 
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
html { color-scheme: light dark; }
body { width: 35em; margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif; }
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p><p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p><p><em>Thank you for using nginx.</em></p>
</body>
</html>
/ # wget http://nginx-svc.default // 使用命名空间进行访问
Connecting to nginx-svc.default (10.98.220.155:80)
saving to 'index.html'
index.html           100% |****************************************************************************************************************************************************************************************************************|   615  0:00:00 ETA
'index.html' saved
/ # cat index.html 
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
html { color-scheme: light dark; }
body { width: 35em; margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif; }
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p><p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p><p><em>Thank you for using nginx.</em></p>
</body>
</html>
(4)代理 k8s 外部服务tong
[root@k8s-master services]# vim nginx-svc-external.yaml 
apiVersion: v1
kind: Service
metadata:name: nginx-svc-externallabels:app: nginx
spec:# selector: # 注释掉选择器,就不会自动创建endpoint#   app: nginx-deployports:- port: 80targetPort: 80name: webtype: ClusterIP[root@k8s-master services]# kubectl create -f nginx-svc-external.yaml 
service/nginx-svc-external created
# 可以看到svc被创建
[root@k8s-master services]# kubectl get svc
NAME                 TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)        AGE
kubernetes           ClusterIP   10.96.0.1       <none>        443/TCP        3d1h
nginx-svc            NodePort    10.98.220.155   <none>        80:31662/TCP   3d
nginx-svc-external   ClusterIP   10.110.50.51    <none>        80/TCP         2s# 但是endpoint没有被创建,因为没有指定selector
[root@k8s-master services]# kubectl get ep
NAME         ENDPOINTS                          AGE
kubernetes   192.168.129.136:6443               3d1h
nginx-svc    10.109.131.5:80,10.111.156.70:80   3d# 后面数据可能有变化,因为中间电脑重启过一次,重新搭建了一次环境
# 创建ep
[root@k8s-master services]# vim nginx-ep-external.yaml
apiVersion: v1
kind: Endpoints
metadata:labels:app: nginx  # 与 service 一致name: nginx-svc-external # 与 service 一致namespace: default # 与 service 一致
subsets:
- addresses:- ip: 120.78.159.117  # 目标 ip 地址ports: # 与 service 一致- name: webport: 80protocol: TCP[root@k8s-master services]# kubectl create -f nginx-ep-external.yaml 
endpoints/nginx-svc-external created
[root@k8s-master services]# kubectl get ep
NAME                 ENDPOINTS              AGE
kubernetes           192.168.129.136:6443   20m
nginx-svc-external   120.78.159.117:80      12s
# 查看代理信息
[root@k8s-master services]# kubectl describe ep nginx-svc-external
Name:         nginx-svc-external
Namespace:    default
Labels:       app=nginx
Annotations:  <none>
Subsets:Addresses:          120.78.159.117NotReadyAddresses:  <none>Ports:Name  Port  Protocol----  ----  --------web   80    TCPEvents:  <none>

 通过service访问外部地址

# 进入到测试容器,我这里是因为之前电脑重启了,所以又重新建了一个
[root@k8s-master services]#  kubectl run -it --image busybox dns-test --restart=Never --rm /bin/sh
If you don't see a command prompt, try pressing enter.
/ # ls
bin    dev    etc    home   lib    lib64  proc   root   sys    tmp    usr    var
/ # wget http://nginx-svc-external  # 访问自己创建的service
Connecting to nginx-svc-external (10.96.11.222:80)
Connecting to www.wolfcode.cn (120.78.159.117:80) # 通过service访问到了外部地址
Connecting to www.wolfcode.cn (120.78.159.117:443)
wget: note: TLS certificate validation not implemented
saving to 'index.html'
index.html           100% |******************************************************************************************************************************************| 72518  0:00:00 ETA
'index.html' saved
/ # ls
bin         dev         etc         home        index.html  lib         lib64       proc        root        sys         tmp         usr         var
/ # 

原理图如下:

 (5)反向代理外部域名
[root@k8s-master services]# vim nginx-svc-externalname.yaml
apiVersion: v1
kind: Service
metadata:labels:app: wolfcode-external-domainname: wolfcode-external-domain
spec:type: ExternalNameexternalName: www.wolfcode.cn[root@k8s-master services]# kubectl create -f nginx-svc-externalname.yaml 
service/wolfcode-external-domain created
[root@k8s-master services]# kubectl get svc
NAME                       TYPE           CLUSTER-IP     EXTERNAL-IP       PORT(S)   AGE
kubernetes                 ClusterIP      10.96.0.1      <none>            443/TCP   68m
nginx-svc-external         ClusterIP      10.96.11.222   <none>            80/TCP    49m
wolfcode-external-domain   ExternalName   <none>         www.wolfcode.cn   <none>    10s# 通过域名的方式,访问外部服务
[root@k8s-master services]# kubectl run -it --image busybox dns-test --restart=Never --rm /bin/sh
If you don't see a command prompt, try pressing enter.
/ # wget wolfcode-external-domain  # 这里指定名字,上面的配置文件中externalName: www.wolfcode.cn,指定的是域名,而不是IP地址
Connecting to wolfcode-external-domain (120.78.159.117:80)
Connecting to www.wolfcode.cn (120.78.159.117:80)
Connecting to www.wolfcode.cn (120.78.159.117:443)
wget: note: TLS certificate validation not implemented
saving to 'index.html'
index.html           100% |******************************************************************************************************************************************| 72518  0:00:00 ETA
'index.html' saved# 查看目前配置的type 
[root@k8s-master services]# grep type nginx-svc.yaml type: NodePort
[root@k8s-master services]# grep type nginx-svc-external.yaml type: ClusterIP
[root@k8s-master services]# grep type nginx-svc-externalname.yaml type: ExternalName# 类型解释
ClusterIP:只能在集群内部使用,不配置类型的话默认就是 ClusterIP
ExternalName:返回定义的 CNAME 别名,可以配置为域名
NodePort:会在所有安装了 kube-proxy 的节点都绑定一个端口,此端口可以代理至对应的 Pod,集群外部可以使用任意节点 ip + NodePort 的端口号访问到集群中对应 Pod 中的服务。当类型设置为 NodePort 后,可以在 ports 配置中增加 nodePort 配置指定端口,需要在下方的端口范围内,如果不指定会随机指定端口端口范围:30000~32767端口范围配置在 /usr/lib/systemd/system/kube-apiserver.service 文件中LoadBalancer:使用云服务商(阿里云、腾讯云等)提供的负载均衡器服务

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/4453.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python数据分析案例70——基于神经网络的时间序列预测(滞后性的效果,预测中存在的问题)

背景 这篇文章可以说是基于 现代的一些神经网络的方法去做时间序列预测的一个介绍科普&#xff0c;也可以说是一个各种模型对比的案例&#xff0c;但也会谈一谈自己做了这么久关于神经网络的时间序列预测的论文&#xff0c;其中一些常见的模式及它们存在的问题以及效果&#x…

opencv笔记2

图像灰度 彩色图像转化为灰度图像的过程是图像的灰度化处理。彩色图像中的每个像素的颜色由R&#xff0c;G&#xff0c;B三个分量决定&#xff0c;而每个分量中可取值0-255&#xff0c;这样一个像素点可以有256*256*256变化。而灰度图像是R&#xff0c;G&#xff0c;B三个分量…

LeetCode:2266. 统计打字方案数(DP Java)

目录 2266. 统计打字方案数 题目描述&#xff1a; 实现代码与解析&#xff1a; 动态规划 原理思路&#xff1a; 2266. 统计打字方案数 题目描述&#xff1a; Alice 在给 Bob 用手机打字。数字到字母的 对应 如下图所示。 为了 打出 一个字母&#xff0c;Alice 需要 按 对…

http://noi.openjudge.cn/——4.7算法之搜索——【169:The Buses】

题目 169:The Buses 总时间限制: 5000ms 内存限制: 65536kB 描述 A man arrives at a bus stop at 12:00. He remains there during 12:00-12:59. The bus stop is used by a number of bus routes. The man notes the times of arriving buses. The times when buses arrive …

java基础概念59-File

一、路径 二、File类 2-1、常见的构造方法 示例&#xff1a; 【注意】&#xff1a; 一般不自己用分割符把父路径和子路径拼接起来&#xff0c;因为&#xff0c;不用的操作系统&#xff0c;分隔符不同。 2-2、小结 2-3、File中常见的成员方法 示例&#xff1a; 【注意】&#…

PortSwigger靶场练习---第二关-查找和利用未使用的 API 端点

第二关&#xff1a;Finding and exploiting an unused API endpoint 实验&#xff1a;查找和利用未使用的 API 端点 PortSwigger靶场地址&#xff1a; Dashboard | Web Security Academy - PortSwigger 题目&#xff1a; 官方提示&#xff1a; 在 Burp 的浏览器中&#xff0c…

软路由系统iStoreOS 一键安装 docker compose

一键安装命令 大家好&#xff01;今天我来分享一个快速安装 docker-compose 的方法。以下是我常用的命令&#xff0c;当前版本是 V2.32.4。如果你需要最新版本&#xff0c;可以查看获取docker compose最新版本号 部分&#xff0c;获取最新版本号后替换命令中的版本号即可。 w…

SpringCloud nacos 2.0.0 + seata 2.0.0

NACOS 下载nacos https://github.com/alibaba/nacos/releases/tag/2.2.0 启动nacos startup.cmd -m standalone SEATA 下载seata https://seata.apache.org/release-history/seata-server 新建数据库-seata CREATE TABLE branch_table (branch_id bigint NOT NULL,xid …

springboot音乐播放器系统

Spring Boot音乐播放器系统是一个基于Spring Boot框架开发的音乐播放平台&#xff0c;旨在为用户提供高效、便捷的音乐播放体验。 一、系统背景与意义 随着互联网的飞速发展和人们对音乐娱乐需求的不断增长&#xff0c;音乐播放器已经成为人们日常生活中不可或缺的一部分。传…

奉加微PHY6230兼容性:部分手机不兼容

从事嵌入式单片机的工作算是符合我个人兴趣爱好的,当面对一个新的芯片我即想把芯片尽快搞懂完成项目赚钱,也想着能够把自己遇到的坑和注意事项记录下来,即方便自己后面查阅也可以分享给大家,这是一种冲动,但是这个或许并不是原厂希望的,尽管这样有可能会牺牲一些时间也有哪天原…

Go-知识 版本演进

Go-知识 版本演进 Go release notesr56(2011/03/16)r57(2011/05/03)Gofix 工具语言包工具小修订 r58(2011/06/29)语言包工具小修订 r59(2011/08/01)语言包工具 r60(2011/09/07)语言包工具 [go1 2012-03-28](https://golang.google.cn/doc/devel/release#go1)[go1.1 2013-05-13]…

C#,入门教程(02)—— Visual Studio 2022开发环境搭建图文教程

如果这是您阅读的本专栏的第一篇博文&#xff0c;建议先阅读如何安装Visual Studio 2022。 C#&#xff0c;入门教程(01)—— Visual Studio 2022 免费安装的详细图文与动画教程https://blog.csdn.net/beijinghorn/article/details/123350910 一、简单准备 开始学习、编写程序…

数字艺术类专业人才供需数据获取和分析研究

本文章所用数据集&#xff1a;数据集 本文章所用源代码&#xff1a;源代码和训练好的模型 第1章 绪论 1.1研究背景及意义 随着社会经济的迅速发展和科技的飞速进步&#xff0c;数字艺术类专业正逐渐崛起&#xff0c;并呈现出蓬勃发展的势头。数字艺术作为创作、设计和表现形式的…

imbinarize函数用法详解与示例

一、函数概述 众所周知&#xff0c;im2bw函数可以将灰度图像转换为二值图像。但MATLAB中还有一个imbinarize函数可以将灰度图像转换为二值图像。imbinarize函数是MATLAB图像处理工具箱中用于将灰度图像或体数据二值化的工具。它可以通过全局或自适应阈值方法将灰度图像转换为二…

使用ffmpeg提高mp4压缩比,减小文件体积【windows+ffmpeg+batch脚本】

文章目录 关于前情提要FFmpeg是什么使用脚本运行FFmpeg首先&#xff0c;下载ffmpeg.exe然后在视频相同位置写一个bat脚本运行压缩脚本 关于 个人博客&#xff0c;里面偶尔更新&#xff0c;最近比较忙。发一些总结的帖子和思考。 江湖有缘相见&#x1f91d;。如果读者想和我交…

Codeforces Round 997 (Div. 2) A~C

今天的封面是水母猫猫和佩佩&#xff0c;原图在这里&#xff0c;记得关注画师夏狩大大 至此&#xff0c;天鹅完成了连续四场比赛在四个不同比赛上四次分的壮举&#xff01;&#xff08;ABC388&#xff0c;CodeChef169&#xff0c;牛客月赛109&#xff0c;CF997&#xff09; 这场…

JavaFx + SpringBoot 快速开始脚手架

JavaFX系列项目模板 JDK8 & JavaFX & SpringBoot 加持SpringBoot&#xff0c;项目示例&#xff0c;Maven打包插件带可执行程序JDK8 & JavaFX 不依赖SpringBoot&#xff0c;项目示例&#xff0c;Maven打包插件带可执行程序JDK11 & JavaFX15 使用 jlink 打包为精…

蓝桥杯3525 公因数匹配 | 枚举+数学

题目传送门 这个题目是一个数学题&#xff0c;由于只需要找到存在大于1的公因数的两数&#xff0c;所以比较方便的做法是统计每一个数的&#xff08;质&#xff09;因数。可以通过筛法统计质因数降低复杂度&#xff0c;但是直接枚举因数也可以满足要求。使用字典记录每个因数出…

当PHP遇上区块链:一场奇妙的技术之旅

PHP 与区块链的邂逅 在技术的广袤宇宙中&#xff0c;区块链技术如同一颗耀眼的新星&#xff0c;以其去中心化、不可篡改、透明等特性&#xff0c;掀起了一场席卷全球的变革浪潮。众多开发者怀揣着对新技术的热忱与探索精神&#xff0c;纷纷投身于区块链开发的领域&#xff0c;试…

利用Ai,帮我完善了UsbCamera App的几个界面和设置功能

早些时候&#xff0c;我有开源了一个UsbCamera App的代码&#xff0c;后来因为一些原因&#xff0c;就只针对星球成员和课程视频成员开源了。最近&#xff0c;我对这个App进行了一些内容的补充。 主要是添加了一些设置相关的内容&#xff0c;支持rtmp推流、循环录像、镜像&…