Docker跨主机网络方案之MacVlan

Docker跨主机网络方案之MacVlan

实验环境:

docker01 192.168.1.70
docker02 192.168.1.50

关闭防火墙和禁用selinux,更该主机名:

[root@localhost ~]# systemctl  stop  firewalld
[root@localhost ~]# systemctl  disable  firewalld
[root@localhost ~]# setenforce  0
[root@localhost ~]# systemctl  daemon-reload 
[root@localhost ~]# systemctl  restart  docker
[root@localhost ~]# hostnamectl  set-hostname  docker01
[root@localhost ~]# su -

macvlan的单网络通信
在这里插入图片描述
1)打开网卡的混杂模式
//需要在docker01和docker02上都进行操作

[root@docker01 ~]# ip link  set ens33  promisc on
[root@docker01 ~]# ip link  show ens33

2)在docker01上创建macvlan网络

在这里插入代码片[root@docker01 ~]# docker network  create  -d  macvlan  --subnet 172.22.16.0/24 --gateway  172.22.16.1 -o  parent=ens33  mac_net1
[root@docker01 ~]# docker network  ls
NETWORK ID          NAME                DRIVER              SCOPE
e6860af70e90        mac_net1            macvlan             local

PS:-o parent=绑定在哪张网卡之上
3)基于创建的macvlan网络运行一个容器

[root@docker01 ~]# docker run -itd --name bbox1 --ip 172.22.16.10 --network mac_net1 busybox

4)在docker02上创建macvlan网络,注意与docker01上的macvlan网络一摸一样

[root@docker02 ~]# docker network create -d macvlan --subnet 172.22.16.0/24 --gateway  172.22.16.1 -o  parent=ens33  mac_net1

5)在docker02上,基于创建的macvlan网络运行一个容器,验证与docker01上容器的通信

[root@docker02 ~]# docker run  -itd --name  bbox2  --network mac_net1 --ip 172.22.16.20 busybox

macvlan的多网络通信
在这里插入图片描述
1)docker01和docker02验证内核模块8021q封装
macvlan需要解决的问题:基于真实的ens33网卡,生产新的虚拟网卡

[root@docker01 ~]# modinfo  8021q
//如果内核模块没有开启,运行下边命令导入一下
[root@docker01 ~]# modprobe  8021q

2)基于ens33创建虚拟网卡
//修改ens33网卡配置文件:

[root@docker01 ~]# cd  /etc/sysconfig/network-scripts/
[root@docker01 network-scripts]# vim  ifcfg-ens33
//修改:
BOOTPROTO=manual   //手动模式

//手动添加虚拟网卡配置文件

[root@docker01 network-scripts]# cp  -p  ifcfg-ens33 ifcfg-ens33.10
//PS:-p  保留源文件或目录的属性
[root@docker01 network-scripts]# vim  ifcfg-ens33.10
BOOTPROTO=none
IPADDR=192.168.10.10
PREFIX=24
GATEWAY=192.168.10.1
NAME=ens33.10
DEVICE=ens33.10
ONBOOT=yes
VLAN=yes
//PS:这里注意,IP要和ens33网段做一个区分,保证网关和网段IP的一致性,设备名称和配置文件的一致性,并且打开VLAN支持模式

//创建第二个虚拟网卡配置文件

扫描二维码关注公众号,回复: 8680432 查看本文章
[root@docker01 network-scripts]# cp  -p  ifcfg-ens33.10  ifcfg-ens33.20
[root@docker01 network-scripts]# vim  ifcfg-ens33.20
BOOTPROTO=none
IPADDR=192.168.20.20
PREFIX=24
GATEWAY=192.168.20.1
NAME=ens33.20
DEVICE=ens33.20
ONBOOT=yes
VLAN=yes

3)docker01上的操作,启用创建的虚拟网卡

[root@docker01 network-scripts]# ifup ifcfg-ens33.10
[root@docker01 network-scripts]# ifup ifcfg-ens33.20

4)基于虚拟网卡,创建macvlan网络

[root@docker01 ~]# docker network create -d macvlan --subnet 172.16.10.0/24 --gateway 172.16.10.1 -o parent=ens33.10 mac_net10
[root@docker01 ~]# docker network create -d macvlan --subnet 172.16.20.0/24 --gateway 172.16.20.1 -o parent=ens33.20 mac_net20

5)基于创建的虚拟网卡,创建macvlan网络

[root@docker02 ~]# docker network create -d macvlan --subnet 172.16.10.0/24 --gateway 172.16.10.1 -o parent=ens33.10 mac_net10
[root@docker02 ~]# docker network create -d macvlan --subnet 172.16.20.0/24 --gateway 172.16.20.1 -o parent=ens33.20 mac_net20

6)docker02上也创建虚拟网卡,并启用

[root@docker01 ~]# scp  /etc/sysconfig/network-scripts/ifcfg-ens33.10 /etc/sysconfig/network-scripts/ifcfg-ens33.20  [email protected]:/etc/sysconfig/network-scripts/
[root@docker02 network-scripts]# vim  ifcfg-ens33
BOOTPROTO=manual
[root@docker02 network-scripts]# vim  ifcfg-ens33.10
BOOTPROTO=none
IPADDR=192.168.10.11
PREFIX=24
GATEWAY=192.168.10.1
NAME=ens33.10
DEVICE=ens33.10
ONBOOT=yes
VLAN=yes
[root@docker02 network-scripts]# vim  ifcfg-ens33.20
BOOTPROTO=none
IPADDR=192.168.20.21
PREFIX=24
GATEWAY=192.168.20.1
NAME=ens33.20
DEVICE=ens33.20
ONBOOT=yes
VLAN=yes
[root@docker02 network-scripts]# ifup ifcfg-ens33.10 
[root@docker02 network-scripts]# ifup ifcfg-ens33.20

7)基于macvlan网络创建容器,并指定IP地址,不过这里要注意,运行的同期与网络对应的网段相符合,还需要注意IP地址的唯一性

//docker01
[root@docker01 ~]# docker run -itd  --name  bbox10  --network mac_net10  --ip  172.16.10.10 192.168.1.70:5000/busybox:v1 
[root@docker01 ~]# docker run -itd  --name  bbox20  --network mac_net20  --ip  172.16.20.20 192.168.1.70:5000/busybox:v1
//docker02
[root@docker02 ~]# docker run -itd --name bbox11  --network mac_net10  --ip  172.16.10.11 192.168.1.70:5000/busybox:v1
[root@docker02 ~]# docker run -itd --name bbox21  --network mac_net20  --ip  172.16.20.21 192.168.1.70:5000/busybox:v1

8)将VMware虚拟机的网络改为桥接
在这里插入图片描述
9)进入容器测试通信
在docker01上进入容器bbox10和docker02上的bbox11进行通信
在docker01上进入容器bbox20和docker02上的bbox21进行通信

[root@docker01 ~]# docker exec  -it  bbox10  /bin/sh
/ # ping   172.16.10.11
PING 172.16.10.11 (172.16.10.11): 56 data bytes
64 bytes from 172.16.10.11: seq=0 ttl=64 time=0.668 ms
64 bytes from 172.16.10.11: seq=1 ttl=64 time=0.335 ms
[root@docker01 ~]# docker exec  -it  bbox20  /bin/sh
/ # ping  172.16.20.21
PING 172.16.20.21 (172.16.20.21): 56 data bytes
64 bytes from 172.16.20.21: seq=0 ttl=64 time=0.584 ms
64 bytes from 172.16.20.21: seq=1 ttl=64 time=0.365 ms
发布了27 篇原创文章 · 获赞 14 · 访问量 561

猜你喜欢

转载自blog.csdn.net/weixin_45636702/article/details/103690672