kubernetes基础知识之service模式中的ClusterIP
haoteby 2025-03-17 18:16 32 浏览
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关键字.集群域名.
可以加一个点,表示根域。
鼓励的话语:男子汉要有血性、有豪情,要宁折不弯!
相关推荐
- BRICS continues to offer powerful alternative global vision
-
Leadersattendingtheplenarysessionof"PeaceandSecurityandReformofGlobalGovernance"ofthe...
- China's role in shaping global growth takes the stage at Summer Davos
-
Guestsattendtheparallelsession"CheckingInontheEnergyTransition"duringthe2025SummerDav...
- Shanghai blockchain park proves WAIC's worth
-
BySHEXiaochenThe2023WorldArtificialIntelligenceConferencekickedoffinShanghaionThursday...
- Shopee新手指南:Shopee卖家中心用户界面介绍
-
1.Shopee各站点前台网页链接:2.Shopee各站点后台网页链接3.ShopeeAPP下载:安卓版下载链接:https://pan.baidu.com/s/1eSp8M1k#list/path...
- 打孩子犯法!日本拟立法禁止父母体罚孩子
-
日本虐童事件频发引发了社会的广泛关注。近日,日本打算对现行的儿童福利法案进行修订,禁止父母体罚子女,但也引发了网友对于体罚、虐待以及法律可行性的讨论。日本将禁止父母体罚子女ViaJapanTod...
- 新NAS到手后,你一定要学会的9个设置,威联通和群晖都是这样的。
-
本内容来源于@什么值得买APP,观点仅代表作者本人|作者:小曹老师心念已久的NAS,终于到手了,期待着他能给我们数字化生活,带来更多的便捷和安心。...
- 苹果四大系统信息汇总(苹果手机系统分别有哪些)
-
【环球科技综合报道】据国外科技网站报道,苹果在6月13日举行全球开发者大会(WWDC),对iOS、MacOS、WatchOS、TVOS四大系统进行更新。MacOS:OSX系统将更名为“ma...
- 关于苹果iOS 10 系统 你需要了解的5个特点
-
【环球科技综合报道】据外媒5月10日报道,苹果公司将于今年6月举办全球开发者大会(WWDC)。在大会上,公司计划发布iOS10操作系统。该系统在iOS7操作系统的基础上进行了革新,具有里程碑式意义...
- Win10用户:不要尝试安装Media Center
-
IT之家(www.ithome.com):Win10用户:不要尝试安装MediaCenter本月初,微软正式发布了Win10技术预览版。最近有部分用户尝试通过Win8.1的安装密钥,来为Window...
- 半年做到美妆Top主播,“成分测评师李某人”究竟何许人?
-
从毛毛姐到口红一哥李佳琦,男网红主播成为了一个趋势,也有越来越多的男生开始扎堆进入美妆行业,淘宝主播“成分测评师李某人”是其中之一。只是,他做主播的初衷,倒不是为了当网红,而是想给自己的美妆品牌打开一...
- 《经典怀旧手游》新手必看玩法,背景玩法详细介绍!
-
经典重温,武林再现,十年经典,再创江湖!备受玩家期待的《武林外传十年之约手游》即将来袭。本次版本主题为“江湖再现”,全新开放的梦境机关城将带来全新挑战!塑魂系统的全面升级,新增第二期空位和道具将大幅提...
- 关于软考你想知道的都在这(软考有用吗 知乎)
-
软考相信学计算机的大家多多少少有过了解,就是全国计算机技术与软件专业技术资格(水平)考试,适用于大部分计算机同学和想转行IT行业的同学。这两天各省陆续出了报考的入口,大家可以积极报考!软考含金量较高,...
- 微软面向Linux平台放出4.3版本Skype
-
继日前微软针对iPhone平台放出5.0版本Skype,对用户界面进行多处调整之后软再次面向Linux平台放出了4.3.0.37版本Skype应用,带来了部分用户界面改善、全新的功能和系统后台性能优化...
- Linux dd命令有多强大?(linux的dig命令)
-
请关注本头条号,每天坚持更新原创干货技术文章。如需学习视频,请在微信搜索公众号“智传网优”直接开始自助视频学习1.前言本文主要介绍Linuxdd命令的强大功能与日常的使用案例。Linux中的dd命...