kubernetes 在pod内无法ping通servicename和ClusterIP的解决方法
1、需要使用 ipvs 替换iptables,操作是在所有节点上
[root@master ~]# vim /etc/sysctl.d/k8s.conf
增加 net.ipv4.ip_forward = 1
[root@master ~]# sysctl --system
2、安装IPVS
[root@master ~]# yum -y install ipvsadm ipset
# 临时生效 modprobe -- ip_vs modprobe -- ip_vs_rr modprobe -- ip_vs_wrr modprobe -- ip_vs_sh modprobe -- nf_conntrack_ipv4 # 永久生效 cat > /etc/sysconfig/modules/ipvs.modules <<EOF modprobe -- ip_vs modprobe -- ip_vs_rr modprobe -- ip_vs_wrr modprobe -- ip_vs_sh modprobe -- nf_conntrack_ipv4 EOF
3:配置kube-proxy,在master上操作,因使用kubeadmin安装,所以操作方式如下
[root@master] # kubectl edit cm kube-proxy -n kube-system
configmap/kube-proxy edited #修改如下 kind: MasterConfiguration apiVersion: kubeadm.k8s.io/v1alpha1 ... ipvs: excludeCIDRs: null minSyncPeriod: 0s scheduler: "" syncPeriod: 30s kind: KubeProxyConfiguration metricsBindAddress: 127.0.0.1:10249 mode: "ipvs" #修改
在 mode: "ipvs"
4:在master重启kube-proxy
kubectl get pod -n kube-system | grep kube-proxy | awk '{print $1}' | xargs kubectl delete pod -n kube-system
5:验证ipvs是否开启
[root@master ]# kubectl logs kube-proxy-97w6h -n kube-system
6:验证:进入pod内,现在可以ping通servicename了
[root@master ~] # kubectl exec -it pod-net-test -c t1 sh