kubernetes基础知识之service模式中的ClusterIP
haoteby 2025-03-17 18:16 25 浏览
kubernetes service的ipvs有三种运行模式:
①:NAT网络地址转换模式
好处:后端端口和集群端口可以不一致
缺点:当前流量必须经过ipvs调度器本身,不管是入站还是出站方向。
②:DR直接路由模式
好处:回程流量不需要经过负载接收器,本身压力会更小。
缺点:它可能需要对ARP的响应和连通性做设定,而且后端的端口和负载均衡集群的端口必须一致。
③:TUN隧道模式
缺点:它的性能会比较低。因为需要跨越多个公网物理环境,而且还需要做数据报文的二次封装。
优点:可以跨公网网络进行集聚化的组建。
还有fullnat模式,也是ipvs的转发模式。
当前的kubernetes集群采用的是ipvs的NAT模式。当前kubernetes集群的kube-proxy,也就是kubernetes集群创建的service采用NAT模式,因为它创建的集群端口和后端服务器的端口可以不一致。
每一个服务器上的ipvs规则只会被当前服务器的客户端所使用,另外一个节点的客户端并不会访问我这个节点的ipvs规则,会访问它自己机器的ipvs规则,这就导致了每个node 节点的压力都不会太大。既然这样的话,那还不如选择node的方式,可以保证我们的端口不一致,这就是灵活性的体现。
下面是一个clusterIP类型服务的资源清单:
touch clusterip_service.yaml
apiVersion: v1
kind: Service
metadata:
name: myapp-clusterip
namespace: default
spec:
type: ClusterIP
selector:
app: myapp
release: stabel
svc: clusterip
ports:
- name: http
port: 80
targetPort: 80
通过create创建的服务,它有一个默认值的关系。就是它会通过匹配app等于当前service的名字作为匹配条件。
创建服务:
kubectl create service clusterip myapp --tcp=80:80
--tcp代表一个tcp类型的负载均衡集群,第一个80代表集群端口,第二个80代表当前真实服务器的端口。
kubectl create service clusterip myapp --tcp=80:80 --dry-run -o yaml
这样可以导出资源清单,--dry-run表示试运行,不真正执行命名,用来测试命令是否正确,并不会真正创建出来资源,去掉这个--dry-run参数后,即可真正执行命令。
这样执行了命令:
kubectl create service clusterip myapp --tcp=80:80
这时selector选择器里面有一个默认值,它的标签app等于myapp。
如果是自己编辑的资源清单文件,那么想写几个就写几个。
clusterip类型服务使用deployment控制器创建pod的资源清单文件:
vim deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name:myapp-clusterip-deploy
namespace: default
spec:
replicas: 3
selector:
matchLabels:
app: myapp
release: stabel
svc: clusterip
template:
metadata:
labels:
app: myapp
release: stabel
env: test
svc: clusterip
spec:
containers:
- name: myapp-container
image: xxx/nginx:v1
imagePullPolicy: Always
ports:
- name: http
containerPort: 80
readinessProbe:
httpGet:
port: 80
path: /index.html
initialDelaySeconds: 1
periodSeconds: 3
控制器的selector是标签选择器的标签,template也就是怎么创建pod。pod的标签在template的labels里面定义,deployment这个pod控制器的标签应该是pod标签的子集。
基于资源文件创建pod:
kubectl apply -f deployment.yaml
查看pod创建情况:
kunectl get pod -n $namespace_name
service标签如果要匹配pod的话,需要满足两个条件:
①:pod处于就绪状态
②:pod标签是svc标签的集合(同一个命名空间下)。
创建service服务的资源清单文件:
touch myapp-service.yaml:
apiVersion: v1
kind: Service
metadata:
name:myapp-clusterip
namespace: default
spec:
type: ClusterIP
selector:
app: myapp
release: stable
svc: clusterip
ports:
- name: http
port: 80
targetPort: 80
如果不指定服务的类型type的话,默认值就是:ClusterIP。
端口ports里面的port代表是负载均衡集群的端口。
端口ports里面的targetPort代表当前的后端真实服务器的端口。
可以基于资源清单创建服务,也可以使用kubectl create service clusterip 的方式创建服务,在指定这个命令的时候,它的背后也会转变成资源清单,不是yaml格式,而是json格式。
当我们提交yaml格式的资源文件给kubectl命令时,向kube-apiserver发送命令的时候,已经变成了json格式。因为kubectl和kubernetes集群没有明显的关联性,不是说必须把kubectl部署在kubernetes集群的节点上,也完全可以把kubectl部署在非kubernetes集群中。也就是意味着从yaml到Jason的转换不再消耗kubernetes集群资源。
基于资源清单创建service:
kubectl apply -f myapp-service.yaml
查询服务信息:
kubectl get svc -n $namespace_name
clusterip类型的clusterip实际上就是ipvs的VIP,ports是集群端口。
查看pod的详细信息:
kubectl get pod -n $namespace_name
查看ipvs集群信息:
ipvsadm -Ln
查询pod的标签信息:
kubectl get pod -n $namespace_name --show-labels
进入pod容器的命令:
kubectl exec -it $pod_name -n $namespace_name -- /bin/sh
查看pod信息:
kubectl get pod -n $namespace_name
查看负载均衡情况:
ipvsadm -Ln
clusterIP类型的服务是集群内部的访问方式。如果想访问这个这个服务service,需要先执行:
kubectl get svc -n $namespace_name
查看到当前服务service的负载均衡的VIP,再执行:
curl $VIP
还有另外一种方法是借助DNS插件,每一个service服务创建完成之后,都会有一个DNS的域名。在我们的DNS插件被解析,解析的地址就是当前的CLUSTER-IP。
先安装工具包:
yum install bind-utils -y
bind是伯克利大学的一个域名解析服务,utils是工具包。使用这个DNS测试工具执行:
dig -t -A
myapp-clusterip.default.svc.cluster.local. @DNS解析服务器的负载均衡VIP地址。
-t代表tcp解析,-A代表A记录。解析的域名是service的格式,每个service创建完成以后,都会在DNS中形成一个域名。域名的格式是: 当前service名字.当前命名空间名字.svc.当前域名。.svc是固定字符,当前域名叫cluster.local。如果在初始化kubernetes集群的时候,没有指定域名,默认就是cluster.local。clusterip类型的服务是在集群内部使用的,改不改默认域名影响不大。
查询service服务名:
kubectl get svc -n $namespace_name
查看DNS解析服务器的负载均衡VIP地址:
kunectl get pod -n kube-system -o wide | grep dns
查看dns的负载均衡VIP地址:
ipvsadm -Ln
查询dns的负载均衡集群的VIP地址。
对于DNS来说,一般tcp的53号端口用来同步数据,UDP的53号端口用来做地址解析。如果UDP多次不解析的话,也会允许到tcp解析。
现在很多厂商基于http协议封装DNS解析过程。
我们要想访问DNS服务的话,必须要找到dns解析pod所对应的dns负载均衡的VIP地址。
然后使用dig -t -A
myapp-clusterip.default.svc.cluster.local. @DNS解析服务器的负载均衡VIP地址,就可以成功解析服务对应的IP地址了。
查看服务service信息:
kubectl get svc -n $namespace_name
物理机的DNS是自己指定的,但是kubernetes及其内部的pod它的默认DNS都是指向两个DNS的插件上。不需要配置,就可以解析通过。
进入pod的命令:
kubectl exec -it $pod_name -- /bin/sh
wget http://$service_name.$namespace_name.svc.cluster.local./hostname.html && cat hostname.html && rm -rf hostname.html
在kubernetes集群内部的pod,它默认就把DNS指向到了DNS插件上了,所以域名是可以直接调用的。
两种访问service的方式:
①:通过service的IP。
②:通过service的域名。
service_ip的好处就是直接看,缺点在于当service没有创建出来的话,不知道IP地址是多少。但是通过域名访问就可以知道,只要知道service名、所在的命名空间、集群的域名,就知道创建之后它的访问IP是什么,或者它的访问域名是什么。哪怕service还没开始创建呢,就可以开始编写一个pod访问这个service的域名了。
通过IP访问clusterip类型的服务,更简单一点。通过域名访问service,可以更前置化一些。
service 通过DNS访问的域名格式:
svcName.nsName.svc.domainName.
服务名.命名空间名.svc关键字.集群域名.
可以加一个点,表示根域。
鼓励的话语:男子汉要有血性、有豪情,要宁折不弯!
相关推荐
- Python爬虫进阶教程(二):线程、协程
-
简介线程线程也叫轻量级进程,它是一个基本的CPU执行单元,也是程序执行过程中的最小单元,由线程ID、程序计数器、寄存器集合和堆栈共同组成。线程的引入减小了程序并发执行时的开销,提高了操作系统的并发性能...
- A320-V2500发动机系统FADEC介绍(2)
-
目的全权数字发动机控制(FADEC)系统在所有飞行和运行阶段提供全范围发动机控制。...
- 三国志战棋版:玩家“二叔”用这套群DOT在比武中拿下31胜5负
-
声明:本文首发于今日头条,而后发布于“鼎叔闯三棋”的微信公众号、抖音、哔哩哔哩和小红书平台,如果在其他平台就是抄袭。...
- 真正的独一无二:Dot One 推出 DNA 定制系列 139英镑起
-
相信很多人在挑选衣物时有着这样的困扰,综合了性价比、面料等因素后好不容易找到了心仪的款式,还要担心是否会撞衫,不管是擦肩而过的陌生人还是身边的熟人,都令人尴尬。小部分人为此热衷于购买少量的古着或者限量...
- 崩铁:周年庆福利再升级,老角色加强时间确定,3.xdot体系反转
-
#埃安UT大一圈高级很多#...
- Dotgo推出RBMHub,扩大了CPaaS提供商的覆盖范围和功能
-
据telecompaper网7月15日报道,用于商业消息传递的RichCommunicationServices(RCS)解决方案的领先提供商Dotgo宣布推出RBMHub。RBMHub的推出扩大了C...
- 深度解析:快照取消Dot职业的将何去何从
-
写在前面曾几何时,术士的出现便被冠以dot大师的名头,从远古时期的献祭腐蚀虹吸不如暗牧一个痛,到TBC上满dot=荣誉击杀+1,到wlk接近全暴击的冰晶腐蚀,再到CTM就算了吧MOP的各种变态吸x放...
- 星穹铁道:抽卡芙卡之前,你必须了解什么是dot!
-
卡妈终于上线了,可还是有很多人不明白什么是dot伤害,抽了卡妈直接玩起了直伤流,把一个持续伤害的引爆器玩成了打手,卡妈打dot伤害是远高于直伤的,有了卡妈的玩家一直了解dot,不然这卡妈就真被玩成四不...
- 游戏界的闪耀星辰陨落:悼念知名游戏博主″dotα牛娃″
-
无尽哀思!在数字时代浪潮中,游戏不仅是消遣娱乐的代名词,更是连接心灵的桥梁,构筑了无数人的青春回忆。在这片浩瀚无垠的游戏宇宙中,有这样一位博主,他以独特的风采、深邃的洞察力和无尽的热情,成为了玩家心中...
- 直击2017新加坡同性恋聚会Pink Dot,自由爱!
-
今年的“粉红点”又来啦~这个支持LGBT群体(男女同志、双性恋、跨性别等)群体的活动,从2009年起,已经在新加坡举办8年了!”这个非营利的同性恋权益活动,主要是希望大家了解到,不管一个人的性倾向或...
- python-dotenv,一款超级实用处理环境变量python库
-
python-dotenv,一款超级实用处理环境变量python库python-dotenv概述:...
- 亚马逊语音助手毫无征兆发笑 诡异至极吓坏用户
-
来源:新华网美国电商亚马逊7日承诺,将更改名下“亚历克萨”语音系统设置,令它不会莫名发笑,免得吓坏用户。“亚历克萨”是亚马逊开发的语音助手软件,可服从用户语音指令完成对话、播放音乐等任务。依照原来设计...
- 2022最火英文网名男女生
-
精选好听英文昵称带翻译1.moveon(离开)2.Monster(怪物)3.Solo吉他手4.Finish.(散场)...
- 智能家具 RecycleDot 的出现给传统家具厂商带来新的挑战
-
从可穿戴手环、手表到智能衣服,智能硬件逐步渗透到每一个领域。最近有一对父子MikeSandru和JohnSandru在自家的车库中设计了一款智能家具RecycleDot,给日渐萧条的家具行...
- 欧洲通信卫星公司 OneWeb 敦促印度DoT尽早批准提供卫星宽带服务
-
据telecomtalk2月17日报道,欧洲通信卫星公司EutelsatOneWeb近日敦促印度电信部(DoT)尽快批准其在印度部署双地球站网关的计划,以便连接其近地轨道(LEO)全球卫星星座,并...