• Docker容器跨主机通信之:直接路由方式


    主机1的IP地址为:192.168.1.221
    主机2的IP地址为:192.168.1.222
     为主机1上的Docker容器分配的子网:172.17.1.0/24 为主机2上的Docker容器分配的子网:172.17.2.0/24 这样配置之后,两个主机上的Docker容器就肯定不会使用相同的IP地址从而避免了IP冲突。 综上所述,数据包在两个容器间的传递过程如下: 从container1 发往 container2 的数据包,首先发往container1的“网关”docker0,然后通过查找主机1的路由得知需要将数据包发给主机2,数据包到达主机2后再转发给主机2的docker0,最后由其将数据包转到container2中;反向原理相同,不再赘述。

    概述
      就目前Docker自身默认的网络来说,单台主机上的不同Docker容器可以借助docker0网桥直接通信,这没毛病,而不同主机上的Docker容器之间只能通过在主机上用映射端口的方法来进行通信,有时这种方式会很不方便,甚至达不到我们的要求,因此位于不同物理机上的Docker容器之间直接使用本身的IP地址进行通信很有必要。再者说,如果将Docker容器起在不同的物理主机上,我们不可避免的会遭遇到Docker容器的跨主机通信问题。本文就来尝试一下。

    方案原理分析
      由于使用容器的IP进行路由,就需要避免不同主机上的容器使用了相同的IP,为此我们应该为不同的主机分配不同的子网来保证。于是我们构造一下两个容器之间通信的路由方案。

    环境介绍:

    编辑主机1上的 /etc/docker/daemon.json 添加内容:"bip" : "ip/netmask"

    [root@localhost ~]# vi /etc/docker/daemon.json
    
    {
    "registry-mirrors": [
    "https://dockerhub.azk8s.cn",
    "https://docker.mirrors.ustc.edu.cn",
    "https://registry.docker-cn.com"
    ],
    "bip": "172.17.1.252/24"
    }

    编辑主机2上的 /etc/docker/daemon.json 添加内容:"bip" : "ip/netmask"

    [root@localhost ~]# vi /etc/docker/daemon.json
    
    {
    "registry-mirrors": [
    "https://dockerhub.azk8s.cn",
    "https://docker.mirrors.ustc.edu.cn",
    "https://registry.docker-cn.com"
    ],
    "bip": "172.17.2.252/24"
    }
    ~

    重启主机1和主机2的docker

    [root@localhost ~]# systemctl restart docker.service

    主机1上添加路由

    [root@localhost ~]# route add -net 172.17.2.0 netmask 255.255.255.0 gw 192.168.1.222

    主机2上添加路由

    [root@localhost ~]# route add -net 172.17.1.0 netmask 255.255.255.0 gw 192.168.1.221

    主机1上配置防火墙规则

    [root@localhost ~]# iptables -t nat -F POSTROUTING
    [root@localhost ~]# iptables -t nat -A POSTROUTING -s 172.17.1.0/24 ! -d 172.17.0.0/16 -j MASQUERADE

    主机2上配置防火墙规则

    [root@localhost ~]# iptables -t nat -F POSTROUTING
    [root@localhost ~]# iptables -t nat -A POSTROUTING -s 172.17.2.0/24 ! -d 172.17.0.0/16 -j MASQUERADE

    主机1、主机2上启动容器

    [root@localhost ~]# docker run -itd --name con2 busybox:latest /bin/sh
    f69f50b318f92a043431f6105793bd6a2900b177634a217bf1c2c5c2827bba7d
    
    [root@localhost ~]# docker run -itd --name con1 busybox:latest /bin/sh
    52293d78380324255b897819420f7925996225b60c95ab64814167d58e52f486

    进入容器测试

    [root@localhost ~]# docker attach f69f50b318f9
    / # ifconfig
    eth0      Link encap:Ethernet  HWaddr 02:42:AC:11:01:01  
              inet addr:172.17.1.1  Bcast:172.17.1.255  Mask:255.255.255.0
              UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
              RX packets:8 errors:0 dropped:0 overruns:0 frame:0
              TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
              collisions:0 txqueuelen:0 
              RX bytes:648 (648.0 B)  TX bytes:0 (0.0 B)
    
    lo        Link encap:Local Loopback  
              inet addr:127.0.0.1  Mask:255.0.0.0
              UP LOOPBACK RUNNING  MTU:65536  Metric:1
              RX packets:0 errors:0 dropped:0 overruns:0 frame:0
              TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
              collisions:0 txqueuelen:1 
              RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)
    
    / # ping 172.17.2.1
    PING 172.17.2.1 (172.17.2.1): 56 data bytes
    64 bytes from 172.17.2.1: seq=0 ttl=62 time=2.095 ms
    64 bytes from 172.17.2.1: seq=1 ttl=62 time=0.944 ms
    64 bytes from 172.17.2.1: seq=2 ttl=62 time=1.022 ms
    64 bytes from 172.17.2.1: seq=3 ttl=62 time=0.955 ms
    ^C
    --- 172.17.2.1 ping statistics ---
    4 packets transmitted, 4 packets received, 0% packet loss
    round-trip min/avg/max = 0.944/1.254/2.095 ms
    / # 
    [root@localhost ~]# docker attach 52293d783803 
    / # ifconfig
    eth0      Link encap:Ethernet  HWaddr 02:42:AC:11:02:01  
              inet addr:172.17.2.1  Bcast:172.17.2.255  Mask:255.255.255.0
              UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
              RX packets:8 errors:0 dropped:0 overruns:0 frame:0
              TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
              collisions:0 txqueuelen:0 
              RX bytes:648 (648.0 B)  TX bytes:0 (0.0 B)
    
    lo        Link encap:Local Loopback  
              inet addr:127.0.0.1  Mask:255.0.0.0
              UP LOOPBACK RUNNING  MTU:65536  Metric:1
              RX packets:0 errors:0 dropped:0 overruns:0 frame:0
              TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
              collisions:0 txqueuelen:1 
              RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)
    
    / # ping 172.17.1.1
    PING 172.17.1.1 (172.17.1.1): 56 data bytes
    64 bytes from 172.17.1.1: seq=0 ttl=62 time=2.422 ms
    64 bytes from 172.17.1.1: seq=1 ttl=62 time=0.929 ms
    64 bytes from 172.17.1.1: seq=2 ttl=62 time=1.027 ms
    ^C
    --- 172.17.1.1 ping statistics ---
    3 packets transmitted, 3 packets received, 0% packet loss
    round-trip min/avg/max = 0.929/1.459/2.422 ms
    / # 
  • 相关阅读:
    1523. K-inversions URAL 求k逆序对,,,,DP加树状数组
    Football 概率DP poj3071
    Collecting Bugs poj2096 概率DP
    E. Exposition
    Subsequence
    D. How many trees? DP
    hdu 1542 线段树 求矩形并
    Huge Mission
    2013 ACM/ICPC Asia Regional Chengdu Online hdu4731 Minimum palindrome
    008 jackson的一些使用记录
  • 原文地址:https://www.cnblogs.com/liujunjun/p/12097315.html
Copyright © 2020-2023  润新知