【docker系列】consul+overlay实现容器跨主机网络通信
一、原理说明及服务器规划
overlay网络是什么?
overlay就是覆盖的意思,指的就是在物理网络层上再搭建一层网络,基于VXLAN技术封装实现Docker原生网络,可以被称为逻辑网。2台服务器能够通过逻辑网通信的前提是,它们之间的物理网络也是能够通信的,因为overlay网络之建立在物理网络基础之上的。
分布式协调服务的作用?
实现docker跨主机网络通信,我们需要搭建一个分布式协调服务,服务选型可以是consul、etcd、zookpper,这里我们使用consul。
分布式协调服务在这里的作用参考上图:
- 三个服务器分别启动docker引擎,在启动引擎的时候向docker注册自己的服务地址。
- 在server1新建了一个overlay network,docker daemon会将network相关的信息注册到consul。consul将network信息同步到server2、server3。
- 当server3新启动了一个容器x,docker daemon会将容器x的网络配置注册及服务地址配置到consul,并将变更信息通知到其他服务器上的docker daemon
- 当server2上的一个容器想访问server3上面的容器x,因为其已经通过consul获得了server3容器网络信息,从而能够通过overlay网络访问到server3的容器x。
二、安装Consul集群
consul集群角色规划
主机名 | ip | consul服务角色 |
---|---|---|
zimug1 | 192.168.1.111 | server |
zimug2 | 192.168.1.112 | server |
zimug3 | 192.168.1.113 | server |
正常情况下,consul需要从官网下载(wget https://releases.hashicorp.com/consul/1.11.5/consul_1.11.5_linux_386.zip
),由于众所周知的原因下载比较慢,我把这个包传到了CSDN 。下载之后解压就一个consul文件,分别放到三台CentOS的/usr/bin
目录下即可。并且在三台服务器上分别执行
mkdir -p /root/data/consul
新建目录用于持久化存储consul数据chmod u+x /usr/bin/consul
增加执行权限- 将以下的端口在服务器上开放出来,consul服务及通信端口。
firewall-cmd --zone=public --add-port=2375/tcp --permanent;
firewall-cmd --zone=public --add-port=8300/tcp --permanent;
firewall-cmd --zone=public --add-port=8301/tcp --permanent;
firewall-cmd --zone=public --add-port=8302/tcp --permanent;
firewall-cmd --zone=public --add-port=8500/tcp --permanent;
firewall-cmd --zone=public --add-port=8600/tcp --permanent;
firewall-cmd --reload;
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 在三台服务器上分别启动一个consul Server服务
##登录zimug1主机,以server形式运行
nohup consul agent -server -bootstrap-expect 2 -data-dir /root/data/consul -node=zimug1 -bind=192.168.1.111 -ui -client 0.0.0.0 &
##登录zimug2主机,以server形式运行
nohup consul agent -server -bootstrap-expect 2 -data-dir /root/data/consul -node=zimug2 -bind=192.168.1.112 -ui -client 0.0.0.0 &
##登录zimug3主机,以server形式运行
nohup consul agent -server -bootstrap-expect 2 -data-dir /root/data/consul -node=zimug3 -bind=192.168.1.113 -ui -client 0.0.0.0 &
- 1
- 2
- 3
- 4
- 5
- 6
consul参数说明:
-server: 以server身份启动。
-bootstrap-expect:集群要求的最少server数量,当低于这个数量,集群即失效。
-data-dir:data存放的目录,更多信息请参阅consul数据同步机制
-node:节点id,在同一集群不能重复。
-bind:监听的ip地址。
-client:客户端的ip地址(0.0.0.0表示不限制)
至此consul server的三个节点就全都启动完成了,但它们现在是独立的。在zimug2、zimug3的服务器上执行下列命令,将zimug2、zimug3的consul服务join到zimug1的consul服务上,这样它们三个组成一个集群。
consul join 192.168.1.111
- 1
完成后通过consul members
发现集群现在有三个节点。
# consul members
Node Address Status Type Build Protocol DC Segment
server-1 192.168.1.111:8301 alive server 1.7.2 2 dc1 <all>
server-2 192.168.1.112:8301 alive server 1.7.2 2 dc1 <all>
server-3 192.168.1.113:8301 alive server 1.7.2 2 dc1 <all>
- 1
- 2
- 3
- 4
- 5
通过浏览器访问 http://192.168.1.111:8500 可以查看到如下的consul图形界面。
三、修改docker环境
- 关闭防火墙
systemctl stop firewalld
,很不幸的是经过笔者实验,使用自建overlay网络必须关闭防火墙。(暂时没找到好的解决方案) - 在三台服务器上修改如下配置文件
vim /etc/docker/daemon.json
。
{
"cluster-store": "consul://192.168.1.111:8500",
"cluster-advertise": "enp0s3:2375"
}
- 1
- 2
- 3
- 4
上面配置的含义是通过当前宿主机的enp0s3:2375(docker守护进程服务),与consul集群中的192.168.1.111:8500的节点进行通信(注册)。其中enp0s3是当前主机的网卡接口名称,通过ifconfig命令即可查看(根据操作系统不同,有的叫做enp0s8、eth0等)。
# 加载配置文件# 重启docker
systemctl daemon-reload && systemctl restart docker
- 1
- 2
全都完成之后访问http://192.168.1.111:8500/ui/dc1/kv/docker/nodes/
会发现三个docker注册节点。
四、创建docker network并启动容器
创建一个overlay类型的网络叫做multihost
docker network create -d overlay multihost
- 1
你会发现我们在zimug1主机上执行命令,multihost网络被同步到zimug2、zimug3上面。这就是分布式协调服务consul起到了作用。
# docker network ls
NETWORK ID NAME DRIVER SCOPE
54ca5d5bb09a bridge bridge local
7dbdfb1e4b51 host host local
447926f66f45 none null local
9d9ec4c5aee3 multihost overlay global
- 1
- 2
- 3
- 4
- 5
- 6
在三台服务器上zimug1、zimug2、zimug3中选择2个服务器,分散跨主机创建2个容器,使用multihost的overlay网络。
在zimug1服务器上启动一个容器,使用multihost的overlay网络。
docker run -it --rm --net=multihost --name=host1 centos;
- 1
在zimug2服务器上启动一个容器,使用multihost的overlay网络。
docker run -it --rm --net=multihost --name=host2 centos;
- 1
容器host1在zimug1主机上,容器host2在zimug2主机上,测试网络联通性
如果主机名称ping不通的话,换成ip ping一下试试,怎么知道容器的ip?
- 在容器内部查看
ip addr
- 在容器宿主机查看
docker inspect <容器id或名称> |grep IPAddress
文章来源: zimug.blog.csdn.net,作者:字母哥哥,版权归原作者所有,如需转载,请联系作者。
原文链接:zimug.blog.csdn.net/article/details/125253806
- 点赞
- 收藏
- 关注作者
评论(0)