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

2 篇文章 0 订阅
1 篇文章 0 订阅

前言

今天在搭建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
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值