RKE-Kubernetes-1.26.7版本默认是使用iptables,NodePort端口不会在节点暴露出来
刨析数据转发路径:
1、集群外机器192.168.109.x根据路由规则将数据包发送到pod所在机器172.18.7.15
2、数据包进入了pod所在的机器,所以k8s对该机器nat表的PREROUTING链做规则。链时指出报文要经过KUBE-SERVICES。
#worker节点查看PREROUTING链
iptables -n -t nat -L PREROUTING
3、把数据包转到KUBE-SERVICES这个链之后,因为是通过nodeport访问的,所有没有匹配到clusterIP,然后转到KUBE-NODEPORTS链上。
#查看KUBE-SERVICES这条链
iptables -n -t nat -L KUBE-SERVICES
4、KUBE-NODEPORTS还是将数据包转到KUBE-SVC-7CMV4UXPSLUSNNV3上,打上标签。再转到KUBE-EXT-7CMV4UXPSLUSNNV3链中,DNAT转换。
KUBE-NODEPORTS#查看KUBE-NODEPORTS这条链
ptables -n -t nat -L KUBE-NODEPORTS
Kubernetes在处理流量时,根据连接跟踪信息来确定流量的状态和方向。它可以判断流量是一个新的连接,还是一个已经建立的连接的数据包。
当流量到达KUBE-NODEPORTS链时,Kubernetes会根据目标端口和连接跟踪信息来查找到对应的服务。在这个例子中,Kubernetes会查找名为rancher-nodeport的cattle-system命名空间中的服务。
接下来,Kubernetes使用服务的选择器来查找与该服务相关联的Pod。选择器是一组标签,用于标识Pod所属的服务。
根据选择器找到的Pod,Kubernetes会使用kube-proxy来进行流量转发。kube-proxy是在每个节点上运行的一个组件,它负责监听服务和Pod的变化,并根据这些变化更新iptables规则。
kube-proxy使用iptables规则来将流量转发到具体的Pod