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