0
点赞
收藏
分享

微信扫一扫

【记录】kubernetes解决pod内无法通过服务别名通信问题

勇敢乌龟 2022-02-17 阅读 89

目录

前言

今天在搭建k8s的时候,发现不同服务间容器内无法通过别名来通信,但是能通过容器ip来通信,说白了就是

  • ping 服务名 --不通
    在这里插入图片描述

  • ping 容器IP --通

网上查阅很多资料,才找到问题所在,话不多说,以下是解决方案。

我的k8s版本

  • kubernetes :v1.20.13
  • kuboard:v3.3.0.6

用ipvs替换iptables

在所有节点上操作如下

  • 开启内核支持
cat >> /etc/sysctl.conf << EOF
net.ipv4.ip_forward = 1
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1
EOF
  • 让配置生效
sysctl -p
  • 开启ipvs支持
yum -y install ipvsadm  ipset
  • ipvs生效
# 临时生效
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

配置kube-proxy,在master上操作

  • 因使用kubeadmin安装,所以操作方式如
kubectl edit cm kube-proxy -n kube-system
  • 修改mode配置
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"                  #修改这里
  • 在master重启kube-proxy
kubectl  get pod -n kube-system | grep kube-proxy | awk '{print $1}' | xargs kubectl delete pod -n kube-system

现在进入pod内,可以ping通了!!!

在这里插入图片描述

举报

相关推荐

0 条评论