云计算
有两种方法可以发现k8s集群中的内部服务:
1、通过变量发现
您只能获取同一命名空间中的变量。
变量是按顺序获取的,必须先创建被引用的变量。
2.通过dns发现。
kube-system中有dns,可以自动发现所有名称空间中服务的clusterIP。
因此,在同一个命名空间中,当一个服务访问另一个服务时,可以通过服务名直接访问。
只要创建了一个服务(不管它是在哪个ns中创建的),它就会自动在kube-system中向DNS注册。
如果是不同的名称空间,可以通过服务名来访问。命名空间名称。
服务是一个抽象对象,它定义了一组逻辑单元和访问它们的策略。
服务主要实现集群内部通信和基于四层(如端口)的内外通信。
服务用于为pod提供固定统一的访问接口和负载均衡能力,借助新一代DNS的服务发现功能解决客户端发现和访问容器化应用的问题。
服务的地址不会改变,它通过标签选择器与后端的pod相关联。
k8s集群中的三种ip:
1.节点IP:节点IP:节点的IP地址。
2.Pod IP:Pod的IP地址。
3.群集IP:服务的IP地址,不允许ping。
k8s集群中的服务类型
$ kubectl解释svc.spec.type
默认为ClusterIP。有效选项包括ExternalName、ClusterIP、NodePort和LoadBalancer。
如果不使用type字段,默认为ClusterIP类型。
1.ClusterIP:服务通过集群的内部IP公开。如果选择该值,则只能在集群内访问服务,这也是默认的ServiceType。
k8s集群内部流量趋势:
内部客户端服务(集群ip:端口)端点(IP和端口列表)应用程序pod(端口)
2.NodePort:通过每个节点上的IP和静态端口公开服务。节点端口服务将被路由到自动创建的ClusterIP服务。通过请求:您可以从集群外部访问节点端口服务。
节点端口类型的业务数据流方向:
外部用户外部lb节点端口服务端点应用程序盒。
3.负载均衡器类型的服务应用在公共云环境中。
4.ExternalName类型的服务用于实现对集群外部服务的pod访问。
数据流方向:内部pod-服务-外部服务
这种类型的服务没有serviceIP,没有nodeport,没有标签选择器,并且需要CNAME来解析记录。
每个工作节点的kube-proxy完成内部流量转发。
代理有三种工作模式:
1.用户空间代理模式
2.iptables代理模式
3.ipvs代理模式
ipvs模式和iptables模式的唯一区别是请求流量的调度功能由ipvs完成,其他功能仍然由iptables完成。
创建服务有两种方式:
1.使用kubectl expose命令。
2.定义资源列表文件
$ kubectl解释svc.metadata
字段:
标签
名称# SVC的名称。
命名空间
$ kubectl解释svc.spec
字段:
集群Ip #svc的IP地址。
港口
选择器
类型
$ kubectl解释svc.spec.clusterIP
clusterIP是服务的IP地址,通常由主服务器随机分配。
有效值为“无”、空字符串(“”)或有效的IP地址。
不需要代理时,可以为无头服务指定“None”。
仅适用于ClusterIP、NodePort和LoadBalancer类型。如果类型为ExternalName,则忽略。
Clusterip表示svc的ip地址,通常自动获取,无需手动指定。如果不使用该字段或指定其值为空,则意味着自动获取ip地址。
如果您指定一个None值,这意味着svc是一个无头服务。
当svc的类型为ExternalName时,不能使用此字段。
$ kubectl解释svc.spec.ports
字段:
1、端口:
指服务公开的端口。当使用yaml文件创建svc时,它是一个必需选项,当使用命令创建SVC时,它可以不指定。如果未指定,将继承pod中的containerPort。
2、节点端口:
指节点NodePort(仅当类型为节点端口或负载平衡器时需要此参数,通常自动生成),用于外部通信。
3、目标端口:
指后端豆荚暴露的端口,就是豆荚中的集装箱港口。
如果既不指定港口又不指定目标港,那么港口和目标港都会继承豆荚中的集装箱港口。
如果指定了港口而没有指定目标港,那么目标港会继承港口值,所以此时必须指定目标港值为豆荚中的集装箱港口,不能随便指定端口号,除非港口值和豆荚中的集装箱港口相同(这种情况可以不指定目标港).
当类型为ClusterIP时,流量经过的端口走向是:
维修(服务)(服务的简写)端口(港口)——吊舱端口(目标港)容器端口(集装箱港口)
当类型为节点端口时,流量经过的端口走向是:
节点端口(节点端口)—-svc端口(港口)——吊舱端口(目标港)容器端口(集装箱港口)
使用命令创建集装箱港口是8080)
$ kubectl获得部署
$ ku bectl expose deploy deploy _ name 1
$ kubectl获取服务
$ kubectl删除服务服务名称
$ ku bectl expose deploy deploy _ name 2port=8080
$ ku bectl expose deploy deploy _ name 3port=80target-port=8080
$ ku bectl expose deploy deploy _ name 4port=80target-port=8080type=节点端口
$ kubectl get svc svc_name -o yaml
规格:
集群IP: 10.97.153.130
外部流量策略:群集
端口:
-节点端口:30693
端口:80
协议:TCP
目标港口:8080
卷曲http://10.97.153.130美元
美元卷曲http://192.168.1.243:30693 #243是掌握地址
$ kubectl删除服务服务名称
用yaml文件创建维修(服务)(服务的简写)
apiVersion: v1
种类:服务
元数据:
标签:
ame: mysvc
名称:mysvc
规格:
端口:
-端口:80
目标港口:8080
选择器:
app: mysvc #匹配标签为app: mysvc的后端豆荚
类型:节点端口
不在意的无头类型的服务:
该服务没有IP,客户端不经过服务,而是直接访问后端的豆荚
无头服务的类型不能是节点端口。
种类:服务
规格:
集群IP:无#(该参数设置为没有人即可成为无头服务)
查看某个服务下有哪些pod:
$ kubectl获取服务
$ kubectl get svc svc_name -o yaml
$ kubectl描述svc服务名称
选择器:run=nginx1
$ kubectl get pod -l run=nginx1
验证通过域名服务器(域名服务器)发现服务
$ ku bectl get pod-n kube-system | grep DNS
kube-dns集群IP 10.96无53/UDP,53/TCP
$ yum安装bind-utils -y
$ dig-t A SVC _ name。默认。SVC。集群。本地的。@ 10 .96 .0 .10
$ kubectl get svc svc_name -o yaml
在豆荚中验证十进位计数制服务发现
运行busyboxRM-itimage=busybox sh
/# cat /etc/resolv.conf
名称服务器
搜索默认。SVC。集群。本地SVC。集群。本地集群。当地example.com
更多关于云服务器,域名注册,虚拟主机的问题,请访问西部数码代理商官网:www.chenqinet.cn