一、overlay的解决方案
为支持容器跨主机通信,Docker 提供了 overlay driver,使用户可以创建基于 VxLAN 的 overlay 网络。VxLAN 可将二层数据封装到 UDP 进行传输,VxLAN 提供与 VLAN 相同的以太网二层服务,但是拥有更强的扩展性和灵活性。
Docerk overlay 网络需要一个 key-value 数据库用于保存网络状态信息,包括 Network、Endpoint、IP 等。Consul、Etcd 和 ZooKeeper 都是Docker 支持的 key-vlaue 软件,我们这里使用 Consul。
环境限制:
必须安装key-value存储服务,如consul
宿主机已经安装docker engine
宿主机的hostname必须不同
实验环境:
docker01: 192.168.1.20
docker02: 192.168.1.21
docker03: 192.168.1.22
暂时不考虑防火墙和selinux安全问题。
将3台dockerhost防火墙和selinux全部关闭,并且分别更改主机名称。
在docker01上的操作。
//运行consul服务。
[root@docker01 ~]# docker run -d -p 8500:8500 -h consul --name consul --restart always progrium/consul -server -bootstrap
PS: 容器生产之后,我们可以通过浏览器访问consul服务,验证consul服务是否正常。访问dockerHost加映射端口。
修改docker02和docker03的docker配置文件
两台都修改
[root@docker02 ~]# vim /usr/lib/systemd/system/docker.service
修改:
ExecStart=/usr/bin/dockerd -H unix:///var/run/docker.sock -H tcp://0.0.0.0:2376 --cluster-store=consul://192.168.1.20:8500 --cluster-advertise=ens33:2376
[root@docker02 ~]# systemctl daemon-reload
[root@docker02 ~]# systemctl restart docker