大佬教程收集整理的这篇文章主要介绍了K8S网络,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
节点(node)IP:192.168.0.11
服务配置:3副本Nginx服务
服务CLUSTER-IP:10.254.198.92
服务CLUSTER PORT:80
服务NodePort:32110
k8s创建的服务对外提供NodePort或ClusterIP的访问方式,而真正负责服务的是内部各pod(如172.16.0.2,172.16.0.3,172.16.0.4),kube-proxy就是负责外部与内部的转发工作,在使用IPTABLES做转发的模式下,nat表中KUBE-serviCES链负责该工作,后续详述该链内容,首先分析下如何将访问service的流量导入KUBE-serviCES链。
本机通过NodePort或者ClusterIP访问service,经过IPTABLES的主要表、链如下:
@H_301_21@外部通过NodePort访问service,经过IPTABLES的主要表、链如下:
@H_301_21@分析:
以上两类访问方式流量会分别经过NAT的OUTPUT链和PRERoutING 链,所以可以在这两处需要将流量截获并转发至KUBE-serviCES链。
验证:
NAT OUTPUT 链配置:
Chain OUTPUT (policy ACCEPT)
target prot opt source desTination
LOG all -- 0.0.0.0/0 0.0.0.0/0 LOG flags 0 level 4 prefix "** NAT OUTPUT **"
KUBE-serviCES all -- 0.0.0.0/0 0.0.0.0/0 /* kubernetes service portals */
...
NAT PRERoutING 链配置:
Chain PRERoutING (policy ACCEPT)
target prot opt source desTination
LOG all -- 0.0.0.0/0 0.0.0.0/0 LOG flags 0 level 4 prefix "** NAT PRERoutING **"
KUBE-serviCES all -- 0.0.0.0/0 0.0.0.0/0 /* kubernetes service portals */
...
(1)将访问ClusterIP(10.254.198.92:80)和NodePort的流量分成两类处理,以下两条规则分别匹配
ClusterIP和NodePort的流量。
Chain KUBE-serviCES (2 references)
target prot opt source desTination
...
KUBE-SVC-I64SNEMOLCWHJHS3 tcp -- 0.0.0.0/0 10.254.198.92 /* default/Nginx-service-nodeport: cluster IP */ tcp dpt:80
KUBE-NODEPORTS all -- 0.0.0.0/0 0.0.0.0/0 /* kubernetes service nodeports; NOTE: this must be the last rule in this chain */ ADDRTYPE match dst-type LOCAL
(2)访问ClusterIP的流量进一步处理,最终实现分配给后端pods。
Chain KUBE-SVC-I64SNEMOLCWHJHS3 (2 references)
target prot opt source desTination
KUBE-SEP-MMWJ6M2J72TU3J64 all -- 0.0.0.0/0 0.0.0.0/0 /* default/Nginx-service-nodeport: */ statistic mode random probability 0.33332999982
KUBE-SEP-GRLEVIWNO4P37GSQ all -- 0.0.0.0/0 0.0.0.0/0 /* default/Nginx-service-nodeport: */ statistic mode random probability 0.50000000000
KUBE-SEP-74XRUOWV76LDS3ID all -- 0.0.0.0/0 0.0.0.0/0 /* default/Nginx-service-nodeport: */
分析:后端有3个pod,以上规则中通过random算法将流量分发,由随机数可以看出并不是平均分配,接下来进一步查看其中1个pod子链的规则。
Chain KUBE-SEP-MMWJ6M2J72TU3J64 (1 references)
target prot opt source desTination
KUBE-MARK-MASQ all -- 172.17.0.2 0.0.0.0/0 /* default/Nginx-service-nodeport: */
DNAT tcp -- 0.0.0.0/0 0.0.0.0/0 /* default/Nginx-service-nodeport: */ tcp to:172.17.0.2:80
分析:通过DNAT规则可以看出,将流量转发到了POD(172.17.0.2:80)中,其他两条也是类似配置。
(3)访问NodePort的流量进一步处理,最终实现分配给后端pods。
Chain KUBE-NODEPORTS (1 references)
target prot opt source desTination
KUBE-MARK-MASQ tcp -- 0.0.0.0/0 0.0.0.0/0 /* default/Nginx-service-nodeport: */ tcp dpt:32110
KUBE-SVC-I64SNEMOLCWHJHS3 tcp -- 0.0.0.0/0 0.0.0.0/0 /* default/Nginx-service-nodeport: */ tcp dpt:32110
分析:
第一条规则(KUBE-MARK-MASQ)是对流量进行了标记(MARK or 0x4000),返回后继续执行第二条规则。
第二条规则KUBE-SVC-I64SNEMOLCWHJHS3与上面分析的ClusterIP经过的链相同,即进一步分配给后端pod:
Chain KUBE-SVC-I64SNEMOLCWHJHS3 (2 references)
target prot opt source desTination
KUBE-SEP-MMWJ6M2J72TU3J64 all -- 0.0.0.0/0 0.0.0.0/0 /* default/Nginx-service-nodeport: */ statistic mode random probability 0.33332999982
KUBE-SEP-GRLEVIWNO4P37GSQ all -- 0.0.0.0/0 0.0.0.0/0 /* default/Nginx-service-nodeport: */ statistic mode random probability 0.50000000000
KUBE-SEP-74XRUOWV76LDS3ID all -- 0.0.0.0/0 0.0.0.0/0 /* default/Nginx-service-nodeport: */
以上是大佬教程为你收集整理的K8S网络全部内容,希望文章能够帮你解决K8S网络所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。