Kubernetes1.26.7-iptables数据转发链路刨析

Kubernetes1.26.7-iptables数据转发链路刨析

Deng YongJie's blog 560 2024-04-21

RKE-Kubernetes-1.26.7版本默认是使用iptables,NodePort端口不会在节点暴露出来

刨析数据转发路径:

1、集群外机器192.168.109.x根据路由规则将数据包发送到pod所在机器172.18.7.15

https://172.18.7.15:32000

image-20230905115710231

image-20230905115845740

2、数据包进入了pod所在的机器,所以k8s对该机器nat表的PREROUTING链做规则。链时指出报文要经过KUBE-SERVICES。

#worker节点查看PREROUTING链
iptables -n -t nat -L PREROUTING

image-20230905120003691

3、把数据包转到KUBE-SERVICES这个链之后,因为是通过nodeport访问的,所有没有匹配到clusterIP,然后转到KUBE-NODEPORTS链上。

#查看KUBE-SERVICES这条链
iptables -n -t nat -L KUBE-SERVICES

image-20230905120459709

4、KUBE-NODEPORTS还是将数据包转到KUBE-SVC-7CMV4UXPSLUSNNV3上,打上标签。再转到KUBE-EXT-7CMV4UXPSLUSNNV3链中,DNAT转换。

KUBE-NODEPORTS#查看KUBE-NODEPORTS这条链
ptables -n -t nat -L KUBE-NODEPORTS

image-20230905120629692

image-20230905120726870

Kubernetes在处理流量时,根据连接跟踪信息来确定流量的状态和方向。它可以判断流量是一个新的连接,还是一个已经建立的连接的数据包。

当流量到达KUBE-NODEPORTS链时,Kubernetes会根据目标端口和连接跟踪信息来查找到对应的服务。在这个例子中,Kubernetes会查找名为rancher-nodeport的cattle-system命名空间中的服务。

接下来,Kubernetes使用服务的选择器来查找与该服务相关联的Pod。选择器是一组标签,用于标识Pod所属的服务。

根据选择器找到的Pod,Kubernetes会使用kube-proxy来进行流量转发。kube-proxy是在每个节点上运行的一个组件,它负责监听服务和Pod的变化,并根据这些变化更新iptables规则。

kube-proxy使用iptables规则来将流量转发到具体的Pod