docker overlay跨主机网络
1.环境
docker版本
Docker version 18.02.0-ce, build fc4de44
3台主机
192.168.55.51 host1
192.168.55.52 host2
192.168.55.53 host2
2.部署Consul
Docerk overlay 网络需要一个 key-value 数据库用于保存网络状态信息,包括 Network、Endpoint、IP 等。Consul、Etcd 和 ZooKeeper 都是 Docker 支持的 key-vlaue 软件,我们这里使用 Consul。
在 docker 主机 host1 上部署支持的组件,比如 Consul
docker run -d -p 8500:8500 -h consul --name consul progrium/consul -server -bootstrap
容器启动后,可以通过 http://192.168.55.51:8500 访问 Consul。
3.修改docker启动项并重启docker(3台上操作)
#修改docker daemon 的配置文件/etc/systemd/system/docker.service
[root@host1 ~]# cat /etc/systemd/system/docker.service.d/10-machine.conf
[Service]
ExecStart=
ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2376 -H unix:///var/run/docker.sock --storage-driver devicemapper --tlsverify --tlscacert /etc/docker/ca.pem --tlscert /etc/docker/server.pem --tlskey /etc/docker/server-key.pem --label provider=generic --registry-mirror http://db411c61.m.daocloud.io --cluster-store=consul://192.168.55.51:8500 --cluster-advertise=192.168.55.51:2376
Environment=
#配置说明
--cluster-store 指定 consul 的地址。
--cluster-advertise 告知 consul 自己的连接地址。(即docker的连接,2376为docker的端口)
#重启docker
systemctl daemon-reload
systemctl restart docker
4.查看host1 和 host2、host3 将自动注册到 Consul 数据库中
访问http://192.168.55.51:8500
查看key/value==docker==nodes/ (可以看到3台主全部注册上来了)
5.在 host1 中创建 overlay 网络 ov_net1
docker network create -d overlay ov_net1
-d overlay 指定 driver 为 overaly。
docker network ls
查看当前网络:
[root@host1 ~]# docker network ls
NETWORK ID NAME DRIVER SCOPE
8925d1ce67ad bridge bridge local
0fb41307416f host host local
fc3f61663c71 none null local
cb5cce10b030 ov_net1 overlay global
注意到 ov_net1 的 SCOPE 为 global,而其他网络为 local。在 host2 上查看存在的网络:
host2 上也能看到 ov_net1。这是因为创建 ov_net1 时 host1 将 overlay 网络信息存入了 consul,host2 从 consul 读取到了新网络的数据。之后 ov_net 的任何变化都会同步到 host1 和 host2、host3。
docker network inspect ov_net1
查看 ov_net1 的详细信息:
[root@host1 ~]# docker network inspect ov_net1
[
{
"Name": "ov_net1",
"Id": "cb5cce10b0301720ded000830038183c9752448a77c4010f6d1e194923bf1ef7",
"Created": "2018-03-20T15:43:52.509618103+08:00",
"Scope": "global",
"Driver": "overlay",
"EnableIPv6": false,
"IPAM": {
"Driver": "default",
"Options": {},
"Config": [
{
"Subnet": "10.0.0.0/24",
"Gateway": "10.0.0.1"
}
]
},
"Internal": false,
"Attachable": false,
"Ingress": false,
"ConfigFrom": {
"Network": ""
},
"ConfigOnly": false,
"Containers": {},
"Options": {},
"Labels": {}
}
]
IPAM 是指 IP Address Management,docker 自动为 ov_net1 分配的 IP 空间为 10.0.0.0/24。
6.运行一个 busybox 容器并连接到 ov_net1
host1
docker run -tid --name bbox1 --network ov_net1 busybox
#查看容器的网络配置:
docker exec bbox1 ip r
host2
docker run -tid --name bbox2 --network ov_net1 busybox
#查看容器的网络配置:
docker exec bbox2 ip r
#查看网络互通
host1上查看
docker exec bbox1 ping -c 3 bbox2