kubernetes 在pod内无法ping通servicename和ClusterIP的解决方法
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


浙公网安备 33010602011771号