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