POD跨主机不能访问

最近论坛里面发现有小伙伴POD之间跨主机不能访问,自己使用脚本搭建偶尔也有同样的情况,由于没有多余的时间查看这个问题,就搁置了很久,今天又遇到了这个问题,决定吧这个问题高清楚

  • 先来起个http服务用来测试
kubectl run t-server --image vinkdong/defaultbackend:1.4 --overrides='{"spec":{"template":{"spec":{"nodeName":"vk005"}}}}'
  • 在两个节点上启动测试POD,拆成两个窗口执行
kubectl run t-04 -ti --image vinkdong/net-tools bash --overrides='{"spec":{"template":{"spec":{"nodeName":"vk004"}}}}'
kubectl run t-05 -ti --image vinkdong/net-tools bash --overrides='{"spec":{"template":{"spec":{"nodeName":"vk005"}}}}'
  • 效果如图显示t-04无法访问在vk005上的的服务

IMG

开始查找问题

  • 根据经验检查Kernel IP forwarding
# check that  ipv4 forwarding is enabled
sysctl net.ipv4.ip_forward
# 0 means that forwarding is disabled
net.ipv4.ip_forward = 1

sysctl -w net.ipv4.ip_forward=1

测试之后还是无法访问

  • 检查Bridge-netfilter
# check that bridge netfilter is enabled
sysctl net.bridge.bridge-nf-call-iptables

# 0 means that bridging is disabled
net.bridge.bridge-nf-call-iptables = 0

改成1

modprobe br_netfilter
# turn the iptables setting on
sysctl -w net.bridge.bridge-nf-call-iptables=1

还是不可以

  • 检查防火墙
#在vk005上启动
iperf -s -p 8472 -u

#在vk004上测试
iperf -c 172.28.128.103 -u -p 8472 -b 1K

测试防火墙没问题

  • 检查Pod CIDR
kubectl get no vk005 -o jsonpath={.spec.podCIDR}

发现与vk005中的真实pod网段不一致。

  • 修改vk005中的配置与获取到保持一致
vim /var/lib/kubelet/kubelet-config.yaml
vim /etc/cni/net.d/10-bridge.conf
reboot -f
  • 删除vk005中的pod

重新测试 发现已经正常了。

IMG

VinkDong

open to open