一、使用网桥实现跨主机容器连接(不推荐)

网络拓扑

docker 外部主机同行 docker 跨主机_docker 外部主机同行

环境准备

       Win7+virtualBox

       两台Ubuntu16.04虚拟机

       安装网桥管理工具

       apt-get install bridge-utils

IP地址

       HOST1:10.211.55.3

       HOST2:10.211.55.5

网络设置

       修改/etc/network/interfaces文件

              auto br0

             iface br0 inet static

             address 10.211.55.3

              netmask 255.255.255.0

             gateway 10.211.55.1

             bridge_ports eth0

Docker设置

       修改/etc/default/docker文件

             -b 指定使用自定义网桥

                    -b=br0

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

              IP地址划分

                     HOST1:10.211.55.64/126

                     地址范围:10.211.55.65~10.211.55.126

                     HOST2:10.211.55.128/190

                     地址范围:10.211.55.129~10.211.55.190

       配置:

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

总结

       优点

              配置简单,不依赖第三方软件

       缺点

              与主机在同网段,需要小心划分IP地址

              需要有网段控制权,在生产环境中不易实现

              不容易管理

二、使用Open vSwitch实现跨主机容器连接(推荐)

Open vSwitch是什么

       Open vSwitch是一个高质量的、多层虚拟交换机,使用开源Apache2.0许可协议,由Nicira NetWorks开发,主要实现代码为可移植的C代码。它的目的是让大规模网络自动化可以通过编程扩展,同时任然支持标准的管理接口和协议(例如NetFlow,sFlow,SPAN,RSPAN,CLI,LACP,802.lag)。

docker 外部主机同行 docker 跨主机_docker_02

什么是GRE隧道

       GRE:通用路由协议封装

       隧道技术是一种通过使用互联网的基础设施在网络之间传递数据的方式。使用隧道传递的数据(或负载)可以是不同协议的数据帧或包。隧道协议将其他协议的数据帧或包重新封装然后通过隧道发送。新的帧头提供路由信息,以便通过互联网传递被封装的负载数据。

环境准备

       Win7+virtualBox

       两台Ubuntu16.04虚拟机

       双网卡,Host-Only & NAT

       安装Open vSwitch:

              apt-get install openvswitch-switch

       安装网桥管理工具

              apt-get install bridge-utils

IP地址

       HOST1:192.168.1.103

       HOST2:192.168.1.104

操作

       建立ovs网桥

       添加gre连接

       配置docker容器虚拟网桥
       为虚拟网桥添加ovs接口

       添加不同Docker容器网段路由

实例:

       ifconfig

       sudo ovs-vsctl show

       sudo ovs-vsctl add-br obr0

       sudo ovs-vsctl add-port obr0 gre0

       sudo ovs-vsctl set interface gre0 type=gre options:remote_ip=192.168.1.104

       sudo ovs-vsctl show

       sudo brctl addbr br0

       sudo ifconfig br0 192.168.1.1 netmask 255.255.255.0

       sudo brctl addif br0 obr0

       sudo brctl show

 

       sudo vim /etc/default/docker

       配置:DOCKER_OPTS="-b=br0"

       sudo service docker restart

      

       docker run -it ubuntu /bin/bash

       ifconfig

       ping 192.168.1.104

      

       route

       sudo ip route add 192.168.2.0/24 via 192.168.1.104 dev eth0

       route

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

weave是什么

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

http://weave.works

https://github.com/weaveworks/weave#readme

 

环境准备

       Win7+virtualBox

       两台Ubuntu16.04虚拟机

       双网卡,Host-Only & NAT

       IP地址

              HOST1:192.168.1.103

              HOST2:192.168.1.104

操作

安装weave

       启动weave

              $ weave launch

       连接不同主机

       通过weave启动容器

实例:

HOST1中操作

sudo wget -o /usr/bin/weave https://raw.githubusercontent.com/zettio/weave/master/weave  

       sudo chmod a+x /usr/bin/weave

       weave launch

       ps -l

HOST2中操作同上HOST1,再进行如下操作

       weave launch 192.168.1.103

       c2=(weave run 192.168.1.2/24 -it ubuntu /bin/bash)

       echo $c2

       docker attach $c2

       ifconfig

HOST1中操作

       weave run 192.168.1.10/24 -it --name wc1 ubuntu /bin/bash

       docker attach wc1

       ifconfig

       ping 192.168.1.2