docker-networking-ingress.jpg

    操作系统: ubuntu 16.04.07 server
    xledger version: 1.4.2.9
    bsi version: r2.2.3
    现象: 主机一安装了xledger平台, 主机二单独安装bsi-ingress,发现ingress无法连接主机1的peer0.org1.test.com容器

    执行ln -sf /var/run/docker/netns/ /var/run,将docker namespace文件映射出来后, 执行ip netns查看容器的namespace列表, 将/etc/resolv.conf
    改为192.168.0.11
    找到ingress的所在的命名空间ID,然后执行ip netns exec “bsi-ingress命名空间ID” telnet peer0.org1.test.com 7051发现不通
    1.png

    1. 找到peer容器和ingress容器加入的网络的命名空间ID, 得知他们通过net_bsi_xledger连接. 从而知道1-spr开头和lb_spr开头的都为该网络的命名空间

    2.png

    1. 分别执行ip netns exec lb_spr8qtsev ip addr和ip netns exec 1-spr8qtsevw ip addr(第一行)

    3.png

    1. 得知该容器IP后,在ingress所在机器使用ip netns exec 1-spr8qtsevw telnet 10.0.64.25 7051 (10.0.64,25为peer service IP),peer所在机器同样在相同的网络命名空间(vxlan另一端)执行 ip netns exec 1-spr8qtsevw tcpdump -i any host 10.0.64.54 and port 7051 -nn 来查看抓取数据

    4.png
    经排查发现iptables的4789端口放行设置的为tcp而非udp(journactl -f -u docker),改成udp后这时抓包发现能抓到数据了:
    5.png

    这里发现虽然有数据包,peer的容器IP为10.0.64.40但是只是一直在建立tcp三次握手(没有成功?没发现10.0.64.54回给10.0.64.40的ack)并没有数据交换

    1. cat /proc/sys/net/ipv4/ip_forward 发现为1, arp -a 也发现物理网卡和MAC地址对的上
    2. 没辙,重启两台机器。。结果发现上述问题全部消失。都能连上了。。 后续再来分析。。。