docker 环境下创建 overlay 网络方案

一.环境

三台机器,其中一台安装 consul(192.168.1.21), 两台创建网络(192.168.1.32,33)

二.实现步骤

1.构建环境

1)三台机器部署docker环境

2)选择一台作为consul服务器,安装consul;consul 为一个key-value数据库用于保存网络状态信息,其他的支持key-value的软件有etcd,zookeeper等。

我们这里直接用镜像方式启动consul容器,来部署 consul,

docker run -d  -p  8500:8500  -h  consul  --name   consul  progrium/consul  -server  -bootstrap

启动之后,我们可以用浏览器192.168.1.21:8500, 进行查看consul;

3)修改两台机器的docker daemon  配置文件

/usr/lib/systemd/system/docker.service

在ExecStart=/usr/bin/dockerd 后加入  --cluster-store=consul://192.168.1.21:8500 --cluster-advertise=ens33:2376

其中192.168.1.21为consul 主机, ens33为 consul 主机的网卡

4)到浏览器192.168.1.21:8500, 进行查看consul;在 key/value 下发现两个节点,此为自动注册到consul数据库中的节点。

2.构建overlay网络

1)在一台主机中创建overlay网络

docker  network  create  -d  overlay  ov_net1

-d 为指定driver为overlay

docker  network ls  查看网络情况

网络类型为 global,同时可在另一台主机查看到该网络,因为创建该网络时,主机将网络信息存入 consul中,另一台主机会读取到新网络的信息,在主机上对网络的操作会同步到consul中。

2)在网络中运行容器

 docker run -itd --name bbox1 --network ov_net1 busybox

查看网络配置

docker exec bbox1 ip r

会有两个网卡,一个eth0,连接 overlay网络, 另一个 eth1,连接主机的docker_gwbridge, 为访问外网的容器提供出口;

在另一台机器运行容器2,

docker run -itd --name bbox2  --network ov_net1 busybox

docker exec bbox2 ip a

docker exec bbox2 ping -c bbox1  同一个overlay 网络的容器可以互相ping 通

3)不同overlay中网络的隔离性

创建一个ov_net2网络

docker network create -d overlay ov_net2

在该网络中运行一个容器

docker  run -itd  --name  bbox3  --network  ov_net2

测试该容器是否能ping 通其他容器

docker  exec -it  bbox3  ping  -c  2  bbox1

 不通,说明不同overlay网络之间是隔离的。

如果要让两个 overlay的容器通信,可以将其中的一个容器连到另一个容器所在的overlay,

docker network connect ov_net1 bbox3

测试docker exec -it bbox3 ping -c 2 10.0.0.2 ,网络为通。10.0.0.2为bbox1的ip地址

4)ip管理

默认分配子网,10.0.X.0/24 ,也可以通过 --subnet 指定ip 范围

docker  network  create  -d  overlay  --subnet  10.2.0.0/24   ov_net3

 

posted @ 2018-09-16 17:05  mushou  阅读(7118)  评论(0编辑  收藏  举报