实验环境
虚机 | IP | 角色 | OS |
---|---|---|---|
docker1 | 190.100.100.41 | docker宿主机 | CentOS7.5 |
docker2 | 190.100.100.42 | docker宿主机 | CentOS7.5 |
linux | 190.100.100.40 | 软路由 | CentOS7.5 |
以上操作系统环境全部为vmware workstation运行的虚机
本次实验由易到难共分3个阶段,分别是网卡独占模式、子接口模式(为了共享物理网卡)以及网关模式(目的是为了打通二层的vlan)
一:网卡独占模式
此方法是最原始也最简单的工作模式
优点:配置简单
缺点:在物理网卡有限的情况下,不能复用物理资源,导致资源浪费;另外也不利于容器之间的隔离
本次实验使用docker1和docker2的ens37网卡
Docker1配置
- 创建macvlan网络
docker network create -d macvlan --subnet=166.66.66.0/24 -o parent=ens37 mac_net1
参数说明:
-d macvlan —指定网络类型为macvlan
–subnet=166.66.66.0/24 —指定网络CIDR
-o parent=ens37 —指定网卡(即使网卡上存在IP也不影响创建macvlan)
mac_net1 —给创建的macvlan网络起一个名字
- 启动虚机并指定IP
docker run -itd --name macvlan --ip=166.66.66.41 --network mac_net1 centos
创建了一个名称为macvlan的容器,并分配IP地址为:166.66.66.41
Docker2配置
- 创建macvlan网络
docker network create -d macvlan --subnet=166.66.66.0/24 -o parent=ens37 mac_net1
参数说明:
-d macvlan —指定网络类型为macvlan
–subnet=166.66.66.0/24 —指定网络CIDR
-o parent=ens37 —指定网卡(即使网卡上存在IP也不影响创建macvlan)
mac_net1 —给创建的macvlan网络起一个名字
- 启动虚机并指定IP
docker run -itd --name macvlan --ip=166.66.66.42 --network mac_net1 centos
测试网络连通
从docker1 ping docker2
从docker2 ping docker1
至此,第1个试验测试完成,停止虚机并删除macvlan配置,进行下一个实验。
二:子接口macvlan
Docker1虚机配置
生成网卡子接口配置
配置文件内容如下:
ens37.10子接口配置
cd /etc/sysconfig/network-scripts/
cat ifcfg-ens37.10 ifcfg-ens37.20
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens37.10
DEVICE=ens37.10
ONBOOT=yes
VLAN=yes
ens37.20子接口配置
cd /etc/sysconfig/network-scripts/
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens37.20
DEVICE=ens37.20
ONBOOT=yes
VLAN=yes
启用网卡
[root@docker1 network-scripts]# ifup ens37.10 ens37.20
INFO : [ipv6_wait_tentative] Waiting for interface ens37.10 IPv6 address(es) to leave the 'tentative' state
INFO : [ipv6_wait_tentative] Waiting for interface ens37.10 IPv6 address(es) to leave the 'tentative' state
[root@docker1 network-scripts]#
创建子接口macvlan
docker network create -d macvlan --subnet=166.66.10.0/24 -o parent=ens37.10 mac_net10
docker network create -d macvlan --subnet=166.66.20.0/24 -o parent=ens37.20 mac_net20
[root@docker1 network-scripts]# docker network create -d macvlan --subnet=166.66.10.0/24 -o parent=ens37.10 mac_net10
1c121ffa87321ae0ffc0f506c910e4a372dc628ec4dd10b10a82fd437fe82262
[root@docker1 network-scripts]# docker network create -d ma