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

实时生效安装

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/

你可能感兴趣的:(docker 搭建macvlan 网络)