八、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)。
什么是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容器连接起来。
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