docker容器的跨主机连接
使用网桥实现跨主机容器连接
1、准备环境
a、两台虚拟机
b、安装网桥管理工具
sudo apt-get install bridge-utils
c、IP地址:
Host1:10.211.55.3
Host2:10.211.55.5
2、修改网路配置文件/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
这里命令指定了我们要建立网桥的名称,IP分配的方式,子网掩码,默认的网关,以及指定了将物理网卡连接到指定网桥上。
3、修改/etc/default/docker文件
指定两个配置选项
-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
例子:
DOCKER_OPTS=" -b=br0 --fixed-cidr=10.211.55.64/26"
4、重启系统
$reboot
5、查看ifconfig
$IFCONFIG
6、查看docker启动选项
ps -ef | grep docker
优点:
配置简单,不依赖第三方软件
缺点:
与主机在同意网段,需要小心的分配ip
需要有网段控制权,在生产环境中不容器实现
不容易管理(如果用vmwar等虚拟机难以实现这样的网络基础设定)
兼容性不佳
使用Open vSwitch实现跨主机容器连接
Open vSwitch是一个开源的虚拟的交换机软件,实际上Open vSwitch是一个高质量的、多层虚拟交换机,使用开源Apache2.0许可协议,由Nicira Networks开发,主要实现代码为可移植的c代码。他的目的是让大规模网络自动化可以通过变成扩展,同时仍然支持标准的管理接口和协议(例如:NetFlow,sFlow,SPAN,RSPAN,CLI.802.1ag)
GRE隧道
ERE:通用路由协议封装
隧道技术:是一种通过使用互联网的基础设施在网络的基础设施在网络之间传递数据的方式。使用隧道传递的数据可以是不同协议的数据帧或包。隧道协议将其它协议的数据帧或包重新封装然互通过隧道发送。新的帧头提供路由信息,以便通过互联网传递被封装的负载数据。
环境装备:
a.安装Open vSwitch
sudo apt-get install openvswitch-switch
b.安装网桥
sudo apt-get install bridge-utils
c.IP地址
Host1:192.168.59.103
Host2:192.168.59.104
操作:
1、查看ovs的状态
$sudo ovs-vsctl show
2、建立ovs网桥
$sudo ovs-vsctl add-br obr0(网桥名称)
3、添加GRE接口
$sudo ovs-vsctl add-port obr0 gre0(gre名字)
4、设置GRE接口
$sudo ovs-vsctl set interface gre0(gre名字) type=gre option:remote_ip=192.168.59.104(指定我们需要连接的远程服务器的地址,也就是我们索要连接的另一台虚拟机的地址)
5、查看ovs设置的状态
$sudo ovs-vsctl show
6、建立本机docker容器需要使用的虚拟网桥
$sudo brctl addbr br0(网桥名称)
7、为br0设置网络地址
$sudo ifconfig br0 192.168.1.1 netmask 255.255.255.0
8、为br0网桥添加ovs网桥的连接
$sudo brctl addif br0 obr0
9、查看ovs设置的状态
$sudo ovs-vsctl show
10、配置docker用我们新建的网桥来配置dcoker0
DOCKER_OPTS=" -b=br0"
11、重启docker服务
$sudo service docker restart
12、创建一个容器
$ping另一台主机可以ping通,却ping不通另一个主机的里的容器
这是因为对于不通网段来说,我们需要通过路由表来确定不通网段网络的地址
13、查看当前的路由表
$route
14、添加容器使用网段路由信息
$sudo ip route add 192.168.2.0/24(网段的名) via 192.168.59.104(告诉路由器查找网段的地址) dev eth0(指定查找设备,通过本机的eth0网卡)
总结:比网桥连接复杂些,但是能够有效的跨越网络中的障碍来实现网络中容器之间的连接。虽然复杂,但是可以将操作写成脚本将操作自动化。
使用weave工具实现跨主机容器连接
weave:开源的。建立一个虚拟的网络,用于将运行在不同主机的docker容器连接起来。
环境准备
IP地址
Host1:192.168.59.103
Host2:192.168.59.104
操作:
1、下载veave
$sudo wget -o /usr/bin/ewave https://raw.githubusercontent.com/zettio/weave/master/weave
通过gethub网址下载veave并且保存在本地/usr/bin/ewave文件夹下
2、更改veave文件夹的模式,让他可以执行
$sudo chmod a+x /usr/bin/ewave
这样veave就可以使用了
3、启动veave
$veave launch
在启动veave时,实际上会在docker上运行一个veave的容器。
4、配dockerhost2
5、dockerHost2中运行
$veave launch 192.168.59.103
这时和第一个不一样,要将dockerHost1的IP地址传入,这是为了使两个dickerhost能够正确的连接在一起。
6、在dockerHost2使用veavw创建一个容器
$c2=$(veave launch 192.168.1.2/24(这个IP地址就是在将要启动的容器中分配的IP地址,这个IP就是veave来维护的) -it ubuntu /bin/bash)
7、在dockerHost1使用veavw创建一个容器
veave launch 192.168.1.10/24 -it --name wec1 ubuntu /bin/bash
8、这时ping另一个容器就很容易ping通了
总结:使用veave工具非常容易的为docker容器指定一个我们任意希望分配的IP地址,并且非常方便来划分IP地址段,从而将不同主机的容器划分在不通的网段中。
不但可以实现跨主机的容器连接,而且非常方便的来限定跨主机的方式运用什么样的方式来连接,