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 |
实时生效安装
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配置网络的命令后面一起发吧,
上面属于临时配置,机器重启配置就没有了,不适合生产。
永久配置
um install -y epel-release
yum install -y vconfig
添加模块
vim /etc/rc.d/rc.local 添加
/sbin/modprobe 8021q
网卡开启混合模式
echo "PROMISC=yes" >> /etc/sysconfig/network-scripts/ifcfg-em1
修改王凯配置文件
vim /etc/sysconfig/network-scripts/ifcfg-em1
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
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
DEVICE=em1.30
NAME=em1.30
ONBOOT=yes
BOOTPROTO=static
VLAN=yes
NM_CONTROLLED=no
另外一台 其他配置都一样, ifcfg-em1.30 网卡信息修改为 ifcfg-em1.19 即可。
之后重启网卡,如果配置没有问题,网络是可以连接的。
/etc/init.d/network restart
以后新添加vlan的时候,也可以先做好配置文件。直接ifup即可。
ifup /etc/sysconfig/network-scripts/ifcfg-em1.19
网络信息
[root@wd-slave01 ~]# ifconfig
em1: flags=4163 mtu 1500
inet6 fe80::d6be:d9ff:feae:80cf prefixlen 64 scopeid 0x20
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 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
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 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
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 mtu 1500
inet6 fe80::d6be:d9ff:feae:80cf prefixlen 64 scopeid 0x20
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 配置网络
docker network create -d macvlan --subnet=172.20.30.0 --gateway=172.20.30.1 -o parent=em1.30 mac_net1
docker network ls 查看网络情况
docker network inspect 074ebc238447 查看网络详细信息及ip地址分配清凉
启动容器 指定IP 指定网络
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地址池
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地址
my github blog https://sukbeta.github.io/docker-build-MacVlanNetwork/