1、容器的跨主机访问主要方式
使用网桥实现跨主机容器连接
使用Open vSwitch实现跨主机容器连接
使用weave实现夸主机容器连接
2、使用网桥实现跨主机容器连接
网络拓扑
环境准备
IP HOST
HOST1: 10.211.55.3
HOST2: 10.211.55.4
步骤
2.1、在第一台主机上编辑/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_posts eth0
保存重启主机以使配置生效
2.2、在第一台机器修改docker配置文件
vim /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 0.211.55.64/26
保存重启docker
2.3、在第二台主机上重复1、2操作
主要第二台的--fixed-cidr的网段和第一台主机的网段不同
2.4、测试
分别在两台主机上启动docker容器测试访问连接
2.5、容器使用网桥跨主机访问的优缺点
优点
配置简单,不依赖第三方软件
缺点
与主机在同网段,需要小心划分地址
需要有网段控制权,在生产环境中不易实现
不容易管理
兼容性不佳
3、使用Open vSwitch实现跨主机容器连接
4、使用weave实现和跨主机容器连接
4.1、下载weave
wget -O /usr/bin/weave https://raw.githubusercontent.com/zettio/weave/master/weave
4.2、赋予weave可执行权限
chmod a+x /usr/bin/weave
4.3、启动weave路由器
weave launch
注意:启动weave路由器,这个路由器其实也是以容器的形式运行的。(前提是已经启动了docker服务进程)可以使用docker ps 查看已经运行了名为weave 的容器了
4.4、查看镜像,可以发现上面下载的weave路由容器镜像
docker images
weaveworks/weaveexec latest b97d7728de92 2 weeks ago 87.4MB
weaveworks/weave latest 86be55495cf0 2 weeks ago 69.8MB
weaveworks/weavedb latest b5c2d24a7b71 4 weeks ago 282B
4.5、此时会发现有两个网桥,一个是Docker默认生成的,另一个是Weave生成的。(#yum安装bridge-utils工具后,就会出现brctl命令 )
brctl show
bridge name bridge id STP enabled interfaces
docker0 8000.024221279713 no veth87270fe
weave 8000.c673cc1045d9 no vethwe-bridge
4.6、查看运行的容器,发现weave路由容器已经自动运行
docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
7b92630ad7fa weaveworks/weave:latest "/home/weave/weaver …" 2 days ago Up 2 days weave
4.7、weave关闭
docker stop weave
docker rm weave
4.8、weave命令帮助
weave --help
4.9、weave跨主机访问实战
4.9.1、机器环境准备
node1 10.10.172.201
node2 10.10.172.202
node1宿主机上的应用容器my-test1: 192.168.0.2/24
node2宿主机上的应用容器my-test2: 192.168.0.3/24
两台机上均安装Docker及Weave,并均启动好Weave路由容器(安装及启动操作如上)。最好关闭两台机器的防火墙!(如果打开防火墙,需要开放6783端口)
4.9.2、在两台机上均启动一个应用容器,有以下两种方式:
第一种方式:可以直接使用weave run命令
[root@node1 ~]# weave run 192.168.0.2/24 -itd docker.io/centos /bin/bash
The 'weave run' command has been removed as of Weave Net version 2.0
Please see release notes for further information
由上可知,weave在2.0版本之后就没有“weave run”这个命令了,所以还是使用下面的第二种方式
第二种方式:先使用docker run启动好容器,然后使用weave attach命令给容器绑定IP地址
在node1上执行如下命令
首先创建一个名为my-test1的容器
docker run -itd --name=my-test1 docker.io/centos /bin/bash
使用weave为创建的容器帮定一个地址
weave attach 192.168.0.2/24 my-test1 #使用容器名称或容器id都可以
进入my-test1容器中使用ifconfig命令可以看到ethwe网桥信息
同样在node2上机器创建名为my-test2的容器并帮定地址192.168.0.3/24,创建方式同上
温馨提示:
上面在docker run启动容器时,可以添加--net=none参数,这个表示容器启动后不 使用默认的虚拟网卡docker0自动分配的ip,而是使用weave绑定的ip;当然也可以选择不添加这个参数去启动容器,这样,容器启动后就会有两个网卡,即两个ip:一个是docker0自动分配的ip,这个适用于同主机内的容器间通信,即同主机的容器使用docker0分配的ip可以相互通信;另一个就是weave网桥绑定的ip。
容器互联:
默认情况下,上面在node1和node2两台宿主机上创建的2个容器间都是相互ping不通的。需要使用weave connect命令在两台weave的路由器之间建立连接。
在node1上执行weave connect命令连接node2上的weave
weave connect 10.10.172.202
在node2上执行weave connect命令连接node1上的weave
weave connect 10.10.172.201
注意可以使用weave forget ip断开相应的连接
然后就会发现,此时位于两台不同主机上的相同子网段内的容器之间可以相互ping通了
进入容器my-test1中是使用ping 192.168.0.3查看连接情况
进入容器my-test2中是使用ping 192.168.0.2查看连接情况
weave 的更详细的使用介绍请看如下的第一条链接
参考资料
https://cloud.tencent.com/info/db29d62422e7075188bcb9b67ef9b25c.html
https://blog.csdn.net/u010391029/article/details/71727129