docker搭建macvlan网络

docker 搭建macvlan 网络

简单说,macvlan就是在宿主的网卡设置多个vlan信息,根据走的网卡不同,并带有不行的vlan标记。

交换机需要支持

macvlan需要交换机上有几个设置:

  • 连接宿主的交换机接口需要改为 Trunk 模式。(这样才能多vlan通过这个口通讯)
  • 交换机上添加macvlan设置的相应vlan信息。
  • 三层交换机上设置各个vlan的网关地址。并实现vlan间互联。

安装

环境介绍

宿主机IP|宿主机vlan|macvlan IP| vlan 号
—|—|—|—
192.168.53.11|233|172.20.30.x|30
192.168.53.12|233|172.20.19.x|19

实时生效安装

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
yum install -y epel-release
yum install -y vconfig
加载模块哦
modprobe 8021q
lsmod |grep -i 8021q
网卡开启混合模式
ip link set em1 promisc on
使用vconfig命令配置vlan
vconfig add em1 233
vconfig add em1 30 # 另外一台设置 vconfig add em1 19
在em1接口上配置两个VLAN
vconfig set_flag em1.233 1 1
vconfig set_flag em1.30 1 1 # 另外一台 vconfig set_flag em1.19 1 1

ifconfig em1 0.0.0.0
ifconfig em1.233 192.168.53.11 netmask 255.255.255.0 up
ifconfig em1.30 172.20.30.2 netmask 255.255.255.0 up

这样一个临时配置就可以了, 配置docker的网络就可以,docker配置网络的命令后面一起发吧,

上面属于临时配置,机器重启配置就没有了,不适合生产。

永久配置

1
2
um install -y epel-release
yum install -y vconfig

添加模块
vim /etc/rc.d/rc.local 添加

1
/sbin/modprobe 8021q

网卡开启混合模式

1
echo "PROMISC=yes" >> /etc/sysconfig/network-scripts/ifcfg-em1

修改王凯配置文件
vim /etc/sysconfig/network-scripts/ifcfg-em1

1
2
3
4
5
6
7
8
DEVICE=em1
NAME=em1
TYPE=Ethernet
BONDING_MASTER=yes
ONBOOT=yes
BOOTPROTO=none
PEERDNS=yes
PROMISC=yes

生成 macvlan 网卡

vim /etc/sysconfig/network-scripts/ifcfg-em1.233

1
2
3
4
5
6
7
8
9
DEVICE=em1.233
NAME=em1.233
ONBOOT=yes
IPADDR=192.168.53.11
NETMASK=255.255.255.0
GATEWAY=192.168.53.1
BOOTPROTO=static
VLAN=yes
NM_CONTROLLED=no

vim /etc/sysconfig/network-scripts/ifcfg-em1.30

1
2
3
4
5
6
DEVICE=em1.30
NAME=em1.30
ONBOOT=yes
BOOTPROTO=static
VLAN=yes
NM_CONTROLLED=no

另外一台 其他配置都一样, ifcfg-em1.30 网卡信息修改为 ifcfg-em1.19 即可。

之后重启网卡,如果配置没有问题,网络是可以连接的。

1
/etc/init.d/network restart

以后新添加vlan的时候,也可以先做好配置文件。直接ifup即可。
ifup /etc/sysconfig/network-scripts/ifcfg-em1.19

网络信息

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
[root@wd-slave01 ~]# ifconfig
em1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet6 fe80::d6be:d9ff:feae:80cf prefixlen 64 scopeid 0x20<link>
ether d4:be:d9:ae:80:cf txqueuelen 1000 (Ethernet)
RX packets 108408 bytes 17234693 (16.4 MiB)
RX errors 0 dropped 11508 overruns 0 frame 0
TX packets 24225 bytes 4849942 (4.6 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

docker0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 172.17.0.1 netmask 255.255.0.0 broadcast 0.0.0.0
inet6 fe80::42:87ff:fecd:c222 prefixlen 64 scopeid 0x20<link>
ether 02:42:87:cd:c2:22 txqueuelen 0 (Ethernet)
RX packets 458940 bytes 71009715 (67.7 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 198525 bytes 55224280 (52.6 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

em1.233: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.53.12 netmask 255.255.255.0 broadcast 192.168.53.255
inet6 fe80::d6be:d9ff:feae:80cf prefixlen 64 scopeid 0x20<link>
ether d4:be:d9:ae:80:cf txqueuelen 1000 (Ethernet)
RX packets 108408 bytes 17234693 (16.4 MiB)
RX errors 0 dropped 11508 overruns 0 frame 0
TX packets 24225 bytes 4849942 (4.6 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

em1.30: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet6 fe80::d6be:d9ff:feae:80cf prefixlen 64 scopeid 0x20<link>
ether d4:be:d9:ae:80:cf txqueuelen 1000 (Ethernet)
RX packets 2133458 bytes 245138875 (233.7 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 1343034 bytes 151915911 (144.8 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

docker 配置网络

1
docker network create -d macvlan --subnet=172.20.30.0 --gateway=172.20.30.1 -o parent=em1.30 mac_net1
1
2
docker network ls   查看网络情况    
docker network inspect 074ebc238447 查看网络详细信息及ip地址分配清凉

启动容器 指定IP 指定网络

1
2
3
docker run -d --name test1 --ip=172.55.55.10 --network mac_net1 nginx-nettools:1.13  
或动态分配
docker run -d --name test2 --network mac_net1 nginx-nettools:1.13

限制分配ip地址池

1
2
3
docker network create -d macvlan --subnet=172.20.30.0/24 --gateway=172.20.30.1 --ip-range=172.20.30.48/30 -o parent=em1.20 mac_net30
这样只能分配4个ip地址
172.20.30.128/25 也就是 128-255 可得 128个ip地址

感觉文章还可以的话,帮忙点点下面的广告哦! 谢谢支持!

感谢您的支持!