百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

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主播,“成分测评师李某人”究竟何许人?

从毛毛姐到口红一哥李佳琦,男网红主播成为了一个趋势,也有越来越多的男生开始扎堆进入美妆行业,淘宝主播“成分测评师李某人”是其中之一。只是,他做主播的初衷,倒不是为了当网红,而是想给自己的美妆品牌打开一...

《经典怀旧手游》新手必看玩法,背景玩法详细介绍!

经典重温,武林再现,十年经典,再创江湖!备受玩家期待的《武林外传十年之约手游》即将来袭。本次版本主题为“江湖再现”,全新开放的梦境机关城将带来全新挑战!塑魂系统的全面升级,新增第二期空位和道具将大幅提...

17个问题,帮你判断咨询师是否适合自己

...

关于软考你想知道的都在这(软考有用吗 知乎)

软考相信学计算机的大家多多少少有过了解,就是全国计算机技术与软件专业技术资格(水平)考试,适用于大部分计算机同学和想转行IT行业的同学。这两天各省陆续出了报考的入口,大家可以积极报考!软考含金量较高,...

微软面向Linux平台放出4.3版本Skype

继日前微软针对iPhone平台放出5.0版本Skype,对用户界面进行多处调整之后软再次面向Linux平台放出了4.3.0.37版本Skype应用,带来了部分用户界面改善、全新的功能和系统后台性能优化...

Linux dd命令有多强大?(linux的dig命令)

请关注本头条号,每天坚持更新原创干货技术文章。如需学习视频,请在微信搜索公众号“智传网优”直接开始自助视频学习1.前言本文主要介绍Linuxdd命令的强大功能与日常的使用案例。Linux中的dd命...