kubernetes基础知识之service模式中的ClusterIP
haoteby 2025-03-17 18:16 37 浏览
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关键字.集群域名.
可以加一个点,表示根域。
鼓励的话语:男子汉要有血性、有豪情,要宁折不弯!
相关推荐
- Chrome OS 41 用 Freon 取代 X11_chrome os atom
-
在刚发布的ChromeOS41里,除了常规的Wi-Fi稳定性提升(几乎所有系统的changelog里都会包含这一项)、访客模式壁纸等之外,还存在底层改变。这一更新中Google移除...
- 苹果iPad Pro再曝光 有望今年六月发布
-
自进入2015年以后,有关大屏iPad的消息便一直不绝于耳,之前就有不少媒体猜想这款全新的平板电脑将会在三月发布,不过可惜的是我么只在那次发布会上看到了MacBookPro。近日@Ubuntu团队便...
- 雷卯针对香橙派Orange Pi 5 Max开发板防雷防静电方案
-
一、应用场景高端平板、边缘计算、人工智能、云计算、AR/VR、智能安防、智能家居、Linux桌面计算机、Linux网络服务器、Android平板、Android游戏机...
- Ubuntu Server无法更新问题解决_ubuntu server not found
-
上周老家的一台运行UbuntuServer的盒子无法连接上了,中秋这两天回来打开,顺手更新一下发现更新报错。提示`E:Releasefileforhttps://mirrors.aliyun...
- 虚幻引擎5正式版发布:古墓丽影&巫师新作采用、新一代实时渲染
-
机器之心报道编辑:杜伟、陈萍虚幻引擎5的目标是「助力各种规模的团队在视觉领域和互动领域挑战极限,施展无限潜能」。...
- AMD Milan-X双路霄龙7773X平台基准测试曝光 CPU缓存总量超1.5GB
-
OpenBenchmarking基准测试数据库刚刚曝光了AMDMilan-X双路霄龙7773X平台的跑分成绩,虽然很快就被撤下,但我们还是知晓了高达1.6GB的总CPU缓存。早些时...
- 全网最新的Dify(1.7.2)私有化离线部署教程(ARM架构)
-
Hello,大家好!近期工作中有涉及到Dify私有化离线部署,特别是针对于一些国产设备。因此特别整理了该教程,实测有效!有需要的小伙伴可以参考下!本文主要针对Dify1.7.2最新版本+国产操作系...
- 在ubuntu下新建asp.net core项目_创建ubuntu
-
本文一步步讲述在ubuntu下用visualstudiocode创建asp.netcore项目的过程。step1:环境操作系统:virtualbox下安装的lubuntu。请不要开启“硬件...
-
- 在晶晨A311D2处理器上进行Linux硬件视频编码
-
在KhadasVIM4AmogicA311D2SBC上,我更多的时间是在使用Ubuntu22.04。它的总体性能还不错,只不过缺少3D图形加速和硬件视...
-
2025-08-26 17:22 haoteby
- Nacos3.0重磅来袭!全面拥抱AI,单机及集群模式安装详细教程!
-
之前和大家分享过JDK17的多版本管理及详细安装过程,然后在项目升级完jdk17后又发现之前的注册和配置中心nacos又用不了,原因是之前的nacos1.3版本的,版本太老了,已经无法适配当前新的JD...
- 电影质量级渲染来了!虚幻引擎5.3正式发布:已开放下载
-
快科技9月8日消息,日前,Unrealengine正式发布了虚幻引擎5.3,带来了大量全方位的改进。...
- 2025如何选购办公电脑?极摩客mini主机英特尔系列选购指南
-
当下,迷你主机的性能越来越强,品类也越来越多。但是CPU是不变的,基本都是AMD和英特尔的。有一个小伙伴在评论区提问,我应该如何在众多机器中选购一台符合自己的迷你主机呢?那今天我们优先把我们的系列,分...
- ubuntu 20.04+RTX4060 Ti+CUDA 11.7+cudnn
-
ububtu添加国内源sudocp/etc/apt/sources.list/etc/apt/sources.list.backupsudovim/etc/apt/sources.lis...
- Linux Mint 18将重新基于Ubuntu 16.04 带来更好硬件支持
-
项目负责人ClementLefebvre在本月6日披露了关于LinuxMint18“Sarah”操作系统的大量信息,包括带来全新扁平化体验的Mint-Y主题。而现在,这款将于年底之前上线的操作...