zoukankan      html  css  js  c++  java
  • 容器网络(三)容器间通信

    以下操作仅仅为了说明容器间的互访原理

    一、同宿主机容器间通信

    1、在同一网桥

    创建网桥my_net1,网段172.16.0.0/16
    #
    docker network create --driver bridge --subnet 172.16.0.0/16 --gateway 172.16.0.1 my_net01 启动容器1 # docker run -it --rm --network=my_net01 busybox / # ifconfig eth0 Link encap:Ethernet HWaddr 02:42:AC:10:00:02 inet addr:172.16.0.2 Bcast:172.16.255.255 Mask:255.255.0.0 …… 启动容器2 # docker run -it --rm --network=my_net01 busybox / # ifconfig eth0 Link encap:Ethernet HWaddr 02:42:AC:10:00:03 inet addr:172.16.0.3 Bcast:172.16.255.255 Mask:255.255.0.0 …… 宿主机,可以看到网桥上有两张网卡 # brctl show bridge name bridge id STP enabled interfaces br-443f050b6ca3 8000.0242dee2c26a no vethed8ac3b vethf1258ae 测试连通性 / # ping 172.16.0.3 PING 172.16.0.3 (172.16.0.3): 56 data bytes 64 bytes from 172.16.0.3: seq=0 ttl=64 time=0.904 ms 64 bytes from 172.16.0.3: seq=1 ttl=64 time=0.177 ms

    在同一个网桥上的两个容器,分配到的IP地址属于同一网段,是直接就可以互访的

    2、在不同网桥

    创建网桥my_net2,网段172.18.0.0/16
    #
    docker network create --driver bridge --subnet 172.18.0.0/16 --gateway 172.18.0.1 my_net02

    创建容器3 # docker run -it --rm --network=my_net02 busybox / # ifconfig eth0 Link encap:Ethernet HWaddr 02:42:AC:12:00:02 inet addr:172.18.0.2 Bcast:172.18.255.255 Mask:255.255.0.0 …… 宿主机查看网桥信息 # brctl show bridge name bridge id STP enabled interfaces br-443f050b6ca3 8000.0242dee2c26a no vethed8ac3b vethf1258ae br-d32523fc2826 8000.0242594398dd no vetheec7c7a docker0 8000.024244c8bf47 no 开启linux内核的数据转发 # sysctl net.ipv4.ip_forward=1 可以查看到iptable,可以看到默认不同网桥的容器是不允许互相访问的 # iptables -S …… -A FORWARD -j DOCKER-ISOLATION-STAGE-1 …… -A DOCKER-ISOLATION-STAGE-1 -i br-d32523fc2826 ! -o br-d32523fc2826 -j DOCKER-ISOLATION-STAGE-2 -A DOCKER-ISOLATION-STAGE-1 -i br-443f050b6ca3 ! -o br-443f050b6ca3 -j DOCKER-ISOLATION-STAGE-2 …… -A DOCKER-ISOLATION-STAGE-2 -o br-d32523fc2826 -j DROP -A DOCKER-ISOLATION-STAGE-2 -o br-443f050b6ca3 -j DROP …… 我们需要把以下两条规则删除 # iptables -D DOCKER-ISOLATION-STAGE-2 -o br-d32523fc2826 -j DROP # iptables -D DOCKER-ISOLATION-STAGE-2 -o br-443f050b6ca3 -j DROP 容器已经实现互通了 / # ping 172.16.0.2 PING 172.16.0.2 (172.16.0.2): 56 data bytes 64 bytes from 172.16.0.2: seq=497 ttl=63 time=0.615 ms 64 bytes from 172.16.0.2: seq=498 ttl=63 time=0.193 ms 64 bytes from 172.16.0.2: seq=499 ttl=63 time=0.194 ms

    数据流程图如下:

    二、处于不同宿主机间的容器通信

    要实现不同宿主机间容器的通信,需满足如下条件

    • 多台宿主机必须要处于同一个局域网,因为需要配置静态路由到对应的宿主机
    • 不同的网桥的IP地址段不能冲突
    • 开启ip_forward流量转发
    • 关闭iptables的nat和禁止访问的规则

    数据流程图如下:

    节点10.30.20.87

    # docker network create --driver bridge --subnet 172.10.0.0/16 --gateway 172.10.0.1 my_net01
    # route add -net 172.11.0.0/16 gw 10.30.20.93
    # sysctl net.ipv4.ip_forward=1
    # docker run -it --network=my_net01 busybox
    / # ifconfig 
    eth0      Link encap:Ethernet  HWaddr 02:42:AC:0A:00:02  
              inet addr:172.10.0.2 Bcast:172.10.255.255 Mask:255.255.0.0
    
    ……

    节点10.30.20.93

    # docker network create --driver bridge --subnet 172.11.0.0/16 --gateway 172.11.0.1 my_net02
    # route add -net 172.10.0.0/16 gw 10.30.20.87
    # sysctl net.ipv4.ip_forward=1
    # docker run -it --network=my_net02 busybox
    / # ifconfig 
    eth0      Link encap:Ethernet  HWaddr 02:42:AC:0B:00:02  
              inet addr:172.11.0.2  Bcast:172.11.255.255  Mask:255.255.0.0
    
    ……

    删除nat和配置允许转发的策略 

    节点10.30.20.87

    # iptables -S -t nat
    
    ……
    
    -A POSTROUTING -s 172.10.0.0/16 ! -o br-a3d2032ddd68 -j MASQUERADE
    
    ……
    
    # iptables -t nat -D POSTROUTING -s 172.10.0.0/16 ! -o br-a3d2032ddd68 -j MASQUERADE
    
    # iptables -A FORWARD -o br-a3d2032ddd68 -j ACCEPT

     节点10.30.20.93

    # iptables -S -t nat
    
    ……
    
    -A POSTROUTING -s 172.11.0.0/16 ! -o br-568e8e2a15b4 -j MASQUERADE
    
    ……
    
    # iptables -t nat -D POSTROUTING -s 172.11.0.0/16 ! -o br-568e8e2a15b4 -j MASQUERADE
    
    # iptables -A FORWARD -o br-568e8e2a15b4 -j ACCEPT

     测试容器间的互联

    / # ping 172.11.0.2
    PING 172.11.0.2 (172.11.0.2): 56 data bytes
    64 bytes from 172.11.0.2: seq=0 ttl=62 time=0.883 ms
    64 bytes from 172.11.0.2: seq=1 ttl=62 time=0.443 ms
    64 bytes from 172.11.0.2: seq=2 ttl=62 time=0.521 ms
  • 相关阅读:
    codeforces 336D Vasily the Bear and Beautiful Strings(组合数学)
    13年山东省赛 The number of steps(概率dp水题)
    13年山东省赛 Mountain Subsequences(dp)
    13年山东省赛 Boring Counting(离线树状数组or主席树+二分or划分树+二分)
    codeforces 337C Quiz(贪心)
    codeforces 336C Vasily the Bear and Sequence(贪心)
    codeforces 335A Banana(贪心)
    codeforces 339C Xenia and Bit Operations(线段树水题)
    codeforces 339C Xenia and Weights(dp或暴搜)
    codeforces 340E Iahub and Permutations(错排or容斥)
  • 原文地址:https://www.cnblogs.com/guoxianqi2020/p/13626811.html
Copyright © 2011-2022 走看看