问题: 集群的POD内不能访问clusterIP和service
问题描述: 进入集群的任意一个POD,ping不通集群内的clusterIP和service
问题解决方案:
步骤:
①我们需要修改kube-proxy的配置文件,添加mode 为ipvs。
在master节点,执行如下命令。
kubectl edit cm kube-proxy -n kube-system
将mode标签的属性改为:ipvs
mode: "ipvs"
具体情况如下图所示:
②ipvs模式需要要添加ip_vs相关模块。
cat > /etc/sysconfig/modules/ipvs.modules <<EOF
#!/bin/bash
modprobe -- ip_vs
modprobe -- ip_vs_rr
modprobe -- ip_vs_wrr
modprobe -- ip_vs_sh
modprobe -- nf_conntrack_ipv4
EOF
chmod 755 /etc/sysconfig/modules/ipvs.modules && bash /etc/sysconfig/modules/ipvs.modules && lsmod | grep -e ip_vs -e nf_conntrack_ipv4
③重启kube-proxy 的pod。
kubectl get pod -n kube-system | grep kube-proxy |awk '{system("kubectl delete pod "$1" -n kube-system")}'
执行结果:
pod "kube-proxy-62gvr" deleted
pod "kube-proxy-n2rml" deleted
④在pod重启后再查看日志,发现模式已经变为ipvs了。
root@master:/# kubectl get pod -n kube-system |grep kube-proxy
kube-proxy-8zfnf 1/1 Running 0 3h50m
kube-proxy-hflh8 1/1 Running 0 3h50m
root@master:/# kubectl logs -n kube-system kube-proxy-8zfnf
I0907 09:09:03.021645 1 server_others.go:170] Using ipvs Proxier.
W0907 09:09:03.022003 1 proxier.go:401] IPVS scheduler not specified, use rr by default
I0907 09:09:03.022256 1 server.go:534] Version: v1.15.1
I0907 09:09:03.037801 1 conntrack.go:52] Setting nf_conntrack_max to 131072
I0907 09:09:03.038305 1 config.go:187] Starting service config controller
I0907 09:09:03.038337 1 controller_utils.go:1029] Waiting for caches to sync for service config controller
I0907 09:09:03.038368 1 config.go:96] Starting endpoints config controller
I0907 09:09:03.038376 1 controller_utils.go:1029] Waiting for caches to sync for endpoints config controller
I0907 09:09:03.138523 1 controller_utils.go:1036] Caches are synced for service config controller
I0907 09:09:03.138523 1 controller_utils.go:1036] Caches are synced for endpoints config controller
⑤进入pod重新ping一下clusterIP和service。