Docker容器的跨主机连接

使用网桥实现跨主机容器连接

1.网桥方式需要安装网桥管理工具:

apt-get install bridge-utils

2.修改主机的/etc/network/interfaces文件

  1. auto lo
  2. iface lo inet loopback
  3. auto br0
  4. iface br0 inet static
  5. address 10.211.55.3 #这里具体需要填写你自己主机的IP地址
  6. netmask 255.255.255.0
  7. gateway 10.211.55.1 #需要你填写具体的网管
  8. bridge_ports eth0

3.修改/etc/default/docker文件,添加如下内容

DOCKER_OPTS="-b=br0 --fixed-cidr='10.211.55.64/26'"

解释一下:

-b:指定使用自定义网桥,-b=br0

–fixed-cidr:限制ip地址的分配范围

IP地址划分为:

Host1:10.211.55.64/26

地址范围:10.211.55.65~10.211.55.126

Host2:10.211.55.128/26

地址范围:10.211.55.129~10.211.55.190

怎么算的?

http://help.bitscn.com/ip/

设置完毕以后使用ifconfig,ps -fe | grep docker来查看一下.在其他的主机上也做同样的地址配置就可以是选不同物理主机之间的docker容器互联了.

楼主鼓捣了半天,没配置好还是算了吧,因为这种方式实现跨主机容器连接的方式缺点很多一般不使用.

所以咱们直接学第二种方式来实现跨主机的容器连接.

使用Open vSwitch(ovs)实现跨主机的容器连接.

先看官方的定义:它是一个高质量的,多层的虚拟交换机,使用开源Apache2.0许可协议,主要实现代码是可移植的C代码.目的是让大规模网络自动化可以通过编程扩展,同时仍然支持标准的管理接口和协议.

再来看民间的:一个虚拟交换机.交换机有啥作用,OVS就啥作用.

先看一下实现这种方式的连接所具备的条件:

1.双网卡,Host-Only & NAT

2.安装Open vSwitch:apt-get install openvswitch-switch

操作步骤:

1.在虚拟机中建立ovs网桥

2.添加gre连接

3.配置docker容器虚拟网桥

4.为虚拟网桥添加ovs接口

5.添加不同Docker容器网段路由

具体执行的一些命令如下:

  1. sudo ovs-vsctl show
  2. sudo ovs-vsctl add-br obr0
  3. sudo ovs-vsctl add-port obr0 gre0
  4. sudo ovs-vsctl set interface gre0 type=gre options:remote_ip=192.168.59.104
  5. sudo ovs-vsctl show
  6. sudo brctl addbr br0
  7. sudo ifconfig br0 192.168.1.1 netmask 255.255.255.0
  8. sudo brctl addif br0 obr0
  9. sudo brctl show
  10. route
  11. sudo ip route add 192.168.2.0/24 via 192.168.59.104 dev eth0


使用weave实现跨主机容器连接

建立一个虚拟的网络,用于将运行在不同主机的Docker容器连接起来.

要实现这种方式所需要的条件如下:

双网卡,Host-Only & NAT

host1:10.0.2.6

host2:10.0.2.8

host1上应用容器1:192.168.0.2/24 host1上应用容器2:192.168.1.2/24

host2上应用容器1:192.168.0.3/24

两台机器上均安装Docker以及weave,并均启动好weave路由容器

在两台机器上均启动一个应用容器.可以直接使用weave run命令,也可以先使用docker run启动好容器,然后使用weave attach命令给容器绑定IP地址.

weave run 192.168.0.2/24

或者

docker run -itd ubuntu bash
weave attach 192.168.0.2/24 &ID

这个时候发现两个容器之间不通的,需要使用weave connect命令在两台weave的路由器之间建立连接.

weave connect 10.0.2.8

会发现,此时位于两台不同主机上的容器之间可以相互ping通了。但是处于不同子网的两个容器是不能互联的,这样我们就可以使用不同子网进行容器间的网络隔离了。

我们会发现,如果不使用Docker的原生网络,在容器内部是不能访问宿主机以及外部网络的。此时我们可以使用weave expose 192.168.0.1/24来给weave网桥添加IP,以实现容器与宿主机网络连通。但是,此时在容器内部依然不能访问外部网络。

我们可以同时使用Docker的原生网络和weave网络来实现容器互联及容器访问外网和端口映射。使用外部网络及端口映射的时候就使用docker0网桥,需要容器互联的时候就使用weave网桥。每个容器分配两个网卡。

操作步骤:

1.安装weave

# sudo wget -O /usr/local/bin/weave https://raw.githubusercontent.com/zettio/weave/master/weave
# sudo chmod a+x /usr/local/bin/weave

2.启动weave

weave launch