問題描述:在k8s集群中主機無法ping通service ip,但是pod ip是可以ping通
1.先看下serviceIP是怎么來的错维?
serviceIP是serviceController生成的奖地,參數(shù)–service-cluster-ip-range string會配置在controller-manager上,serviceController會在這個參數(shù)指定的cidr范圍內(nèi)取一個IP
2.為什么不能ping?
serviceIP是虛擬的地址赋焕,沒有分配給任何網(wǎng)絡(luò)接口参歹,當數(shù)據(jù)包傳輸時不會把這個IP作為數(shù)據(jù)包的源IP或目的IP。
kube-proxy在iptables模式下宏邮,這個IP沒有被設(shè)置在任何的網(wǎng)絡(luò)設(shè)備上泽示,ping這個IP的時候,沒有任何的網(wǎng)絡(luò)協(xié)議棧會回應(yīng)這個ping請求蜜氨。
可以查看kube-proxy的服務(wù)的配置文件,核查kube-proxy的代理模式捎泻。mode處不配置飒炎,默認為iptables模式
kubectl edit configmap -n kube-system kube-proxy
在iptables模式時,clusterIp會在iptables的PREROUTING鏈里面用于nat轉(zhuǎn)換規(guī)則中笆豁。
而在ipvs模式下郎汪,會使用在ipvs模塊的ipvs規(guī)則轉(zhuǎn)換中。
在ipvs模式下闯狱,所有的clusterIp會被設(shè)置在node上的kube-ipvs0的虛擬網(wǎng)卡上煞赢,這個時候去ping是可以通的。
完美解決