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

原文地址:https://www.cnblogs.com/yyuuee/p/15305104.html