10.229.0.0/16 SVC IP
10.249.0.0/16 POD IP
跨主机的POD间通信
此处以dns为例
从容器出来到cni.0的包,src是pod IP,dst 是svc ip
从flannel.1发的包,dst已经被ipvs模块更换成实际endpoint ip
在eth0上抓的包,dns包已经被打包入 vxlan中。
从host到跨主机pod的通信
nat表的OUTPUT链会把出向的dst为ipset KUBE-CLUSTER-IP,src不为10.249.0.0/16打标记0x4000(即所有不是从pod ip访问svc IP的流量打标)
-A OUTPUT -m comment --comment "kubernetes service portals" -j KUBE-SERVICES
-A KUBE-SERVICES ! -s 10.249.0.0/16 -m comment --comment "Kubernetes service cluster ip + port for masquerade purpose" -m set --match-set KUBE-CLUSTER-IP dst,dst -j KUBE-MARK-MASQ
-A KUBE-MARK-MASQ -j MARK --set-xmark 0x4000/0x4000
放行打标的流量
-A FORWARD -m comment --comment "kubernetes forwarding rules" -j KUBE-FORWARD
-A KUBE-FORWARD -m comment --comment "kubernetes forwarding rules" -m mark --mark 0x4000/0x4000 -j ACCEPT
对打标的流量作nat,nat之后的ip为flannel网卡的ip地址
-A KUBE-POSTROUTING -m comment --comment "kubernetes service traffic requiring SNAT" -m mark --mark 0x4000/0x4000 -j MASQUERADE
流量从falnnel网卡出,只能在flannel网卡抓到包