Docker跨网络overlay,maclan
Docker machine环境做overlay网络
环境
consul 192.168.19.130
host1 192.168.19.20
host2 192.168.19.30
下载镜像
[root@consul ~]# docker search consul
[root@consul ~]# docker pull progrium/consul
启动consul容器
[root@consul ~]# docker run -d --restart always -p 8400:8400 -p 8500:8500 -p 8600:53/udp -h consul progrium/consul -server --bootstrap -ui-dir /ui
开放端口(三台主机)
[root@consul ~]# firewall-cmd --add-port={7946,4789,2733,2376}/tcp --premanent
[root@consul ~]# firewall-cmd --add-port={7946,4789,2733,2376}/udp --premanent
[root@consul ~]# setenforce 0
容器启动之后,可以用浏览器访问http://192.168.19.130:8500
在host1,host2上指定consul服务器的选项:
[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 overlay2 --tlsverify --tlscacert /etc/docker/ca.pem --tlscert /etc/docker/server.pem --tlskey /etc/docker/server-key.pem --label provider=generic --cluster-store=consul://192.168.19.130:8500 --cluster-advertise=ens33:2376
Environment=
注:这里是machine环境,修改对应的配置文件
若是普通环境下,修改/usr/lib/systemd/system/docker.service 这个文件
[Service]
Type=notify
#the default is not to use systemd for cgroups because the delegate issues still
exists and systemd currently does not support the cgroup feature set required
for containers run by docker
ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock --cluster-store=consul://192.168.19.130:8500 --cluster-advertise=ens33:2376
重启docker服务
[root@host1 ~]# systemctl daemon-reload
[root@host1 ~]# systemctl restart docker
host2主机进行相同操作
完成以后,再去页面查看:
在host1节点创建一个overlay网络:
[root@host1 ~]# docker network create -d overlay ov_net1
f6d9bd46b902e46ffe5096608cd7f92ba9206e270e84f7e70a3ee2074f3162bf
任何一个节点创建的网络,在另一个节点都会自动生成
用创建好的overlay网络分别在host1,host2上面创建容器
[root@host1 ~]# docker run -dit --name test2 --network ov_net1 192.168.19.130:1000/busybox2
[root@host2 ~]# docker run -dit --name test3 --network ov_net1 192.168.19.130:1000/busybox2
最后验证互通
[root@host1 ~]# docker exec -it 159e555b77ac15fe8a9 sh
/ # ping 10.0.0.3
PING 10.0.0.3 (10.0.0.3): 56 data bytes
64 bytes from 10.0.0.3: seq=0 ttl=64 time=1002.092 ms
64 bytes from 10.0.0.3: seq=1 ttl=64 time=1.307 ms
64 bytes from 10.0.0.3: seq=2 ttl=64 time=0.525 ms
64 bytes from 10.0.0.3: seq=3 ttl=64 time=1.304 ms
macvlan网络
host1,host2网卡打开混杂模式
[root@host1 ~]# ip link set ens33 promisc on
[root@host1 ~]# ip link show ens33
[root@host2 ~]# ip link set ens33 promisc on
[root@host2 ~]# ip link show ens33
host1创建macvlan网络,并运行主机
[root@host1 ~]# docker network create -d macvlan --subnet 172.22.16.0/24 --gateway 172.22.16.1 -o parent=ens33 mac_net1
[root@host1 ~]# docker run -dit --name bbox1 --ip 172.22.16.10 --network mac_net1 192.168.19.130:1000/busybox2
host2创建macvlan网络,并运行主机
[root@host2 ~]# docker network create -d macvlan --subnet 172.22.16.0/24 --gateway 172.22.16.1 -o parent=ens33 mac_net1
[root@host2 ~]# docker run -dit --name bbox2 --ip 172.22.16.11 --network mac_net1 192.168.19.130:1000/busybox2
进入容器,测试互通性
/ # ping 172.22.16.10
PING 172.22.16.10 (172.22.16.10): 56 data bytes
64 bytes from 172.22.16.10: seq=0 ttl=64 time=1.145 ms
64 bytes from 172.22.16.10: seq=1 ttl=64 time=0.850 ms
64 bytes from 172.22.16.10: seq=2 ttl=64 time=1.018 ms
64 bytes from 172.22.16.10: seq=3 ttl=64 time=0.389 ms
用 sub-interface 实现多 macvlan 网络
默认情况下,一个网卡只可以设置一个macvlan网络
[root@host1 ~]# docker network create -d macvlan --subnet 172.23.16.0/24 --gateway 172.23.16.1 -o parent=ens33 mac_net2
Error response from daemon: network dm-c92a63878c3d is already using parent interface ens33
实现多网络的方法:
创建 VLAN 设备:
# ip link add link ens33 name ens33.10 type vlan id 10
添加 IP:
# ip addr add 192.168.20.1/24 brd 192.168.200.255 dev ens33.10
启用设备:
# ip link set dev ens33.10 up
关闭设备:
# ip link set dev ens33.10 down
移除设备:
# ip link delete ens33.10
首先设置host1,host2
[root@host1 ~]# ip link add link ens33 name ens33.10 type vlan id 10
[root@host1 ~]# ip link set dev ens33.10 up
[root@host2 ~]# ip link add link ens33 name ens33.20 type vlan id 20
[root@host2 ~]# ip link set dev ens33:20 up
在host1,host2上面创建macvlan网络
[root@host1 ~]# docker network create -d macvlan --subnet=172.16.10.0/24 --gateway=172.16.10.254 -o parent=ens33.10 mac_net10
[root@host2 ~]# docker network create -d macvlan --subnet=172.16.20.0/24 --gateway=172.16.20.254 -o parent=ens33.20 mac_net20
运行容器
[root@host1 ~]# docker run -itd --name bbox3 --ip=172.16.10.11 --network mac_net10 192.168.19.130:1000/busybox2
[root@host2 ~]# docker run -dit --name bbox4 --ip=172.16.20.10 --network mac_net20 192.168.19.130:1000/busybox2