zoukankan      html  css  js  c++  java
  • Docker容器跨主机通信之:直接路由方式

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

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

    环境介绍:

    主机1的IP地址为:192.168.145.128
    主机2的IP地址为:192.168.145.129
    为主机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中;反向原理相同,不再赘述。

    1、分别对主机1和主机2上的docker0进行配置

    编辑主机1上的 /etc/docker/daemon.json 文件,添加内容:"bip" : "ip/netmask"
    { "bip", "172.17.1.252/24" }
    
    编辑主机2上的 /etc/docker/daemon.json 文件,添加内容:"bip" : "ip/netmask"
    { "bip", "172.17.2.252/24" }
    
    重启docker服务
    主机1和主机2上均执行如下命令重启docker服务以使修改后的docker0网段生效
    systemctl restart docker

    2、添加路由规则

    主机1上添加路由规则如下:
    route add -net 172.17.2.0 netmask 255.255.255.0 gw 192.168.145.129
    
    主机2上添加路由规则如下:
    route add -net 172.17.1.0 netmask 255.255.255.0 gw 192.168.145.128

    3、配置iptables规则

    主机1上添加如下规则:
    iptables -t nat -F POSTROUTING
    iptables -t nat -A POSTROUTING -s 172.17.1.0/24 ! -d 172.17.0.0/16 -j MASQUERADE
    
    主机2上添加如下规则:
    iptables -t nat -F POSTROUTING
    iptables -t nat -A POSTROUTING -s 172.17.2.0/24 ! -d 172.17.0.0/16 -j MASQUERADE

    4、启动容器

    主机1上启动centos容器:
    docker run -it --name container1 centos /bin/bash
    
    主机2上启动centos容器:
    docker run -it --name container2 centos /bin/bash

    好了,现在两容器可以互ping通。

    5、路由持久化(防止主机重启路由丢失)

    root@rancher:~#  vi /etc/rc.local
    
    添加路由信息,切记写到exit之前!!!:
    route add -net 172.17.2.0 netmask 255.255.255.0 gw 192.168.102.88
  • 相关阅读:
    修改科目的字段状态组-OBC4
    采购收货-对于物料,在工厂、库存地点中不存在物料主数据
    采购收货
    新建工厂
    采购订单收货提示,T169P表不存在
    维护工厂日历
    开始创建物料没有选择会计视图,需要怎么维护
    拓端数据tecdat|R语言分布滞后线性和非线性模型(DLMs和DLNMs)分析时间序列数据
    拓端数据tecdat|R语言分布滞后非线性模型(DLNM)研究发病率,死亡率和空气污染示例
    拓端数据tecdat|R语言中实现广义相加模型GAM和普通最小二乘(OLS)回归
  • 原文地址:https://www.cnblogs.com/jarno/p/11770373.html
Copyright © 2011-2022 走看看