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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM