关于vlan说明
Macvlan和ipvlan是Linux网络驱动程序,它们将底层或主机接口直接暴露给在主机中运行的VM或容器。
Macvlan允许单个物理接口使用macvlan子接口具有多个mac和ip地址。这与使用vlan在物理接口上创建子接口不同。使用vlan子接口,每个子接口使用vlan属于不同的L2域,所有子接口都具有相同的mac地址。使用macvlan,每个子接口将获得唯一的mac和ip地址,并将直接暴露在底层网络中。Macvlan接口通常用于虚拟化应用程序,每个macvlan接口都连接到Container或VM。每个容器或VM可以直接从公共服务器获取dhcp地址,就像主机一样。这将有助于希望Container成为传统网络的客户使用他们已有的IP寻址方案。Macvlan有4种类型(Private, VEPA, Bridge, Passthru)。常用的类型是Macvlan网桥,它允许单个主机中的端点能够在没有数据包离开主机的情况下相互通信。对于外部连接,使用底层网络。下图显示了两个使用macvlan网桥相互通信以及外部世界的容器。两个容器将使用Macvlan子接口直接暴露在底层网络中。
使用mavvlan构建docker网络
Macvlan,MACVLAN或MAC-VLAN允许您在单个物理接口上配置多个第2层(即以太网MAC)地址。 Macvlan允许您配置父物理以太网接口(也称为上层设备)的子接口(也称为从设备),每个接口都有自己唯一的(随机生成的)MAC地址,因此也有自己的IP地址。然后,应用程序、VM和容器可以绑定到特定的子接口,以使用自己的MAC和IP地址直接连接到物理网络。
Mavlan子接口不能直接与父接口通信,即VM不能直接与主机通信。如果需要VM主机通信,则应添加另一个macvlan子接口并将其分配给主机。
Macvlan子接口使用 eth0.20@eth0
表示法来清楚地识别子接口及其父接口。子接口状态绑定到其父级状态。如果eth0关闭,则 eth0.20@eth0
也会关闭。
配置macvlan先决条件
- 至少需要Linux内核版本3.9以上,建议使用4.0或更高版本。
环境准备
主机名 | IP地址 | 地位 | 软件环境 |
---|---|---|---|
物理机 | 10.0.0.1 | 物理机 | windows10 |
网关 | 10.0.0.2 | 宿主机网关 | vmvare网关 |
c1 | 10.0.0.3 | 容器01 | docker |
c2 | 10.0.0.4 | 容器02 | docker |
node01 | 10.0.0.15 | 宿主机01(vm虚拟机) | centos 7.3/docker-ce1806 |
node02 | 10.0.0.16 | 宿主机02(vm虚拟机) | centos 7.3/docker-ce1806 |
2.3 启动网卡混合模式
两台主机网卡使用桥接模式,网卡混杂模式开启全部允许。
主机上配置的eth0网卡和创建的vlan网卡,均需要开启混杂模式。如果不开启混杂模式会导致macvlan网络无法访问外界,具体在不使用vlan时,表现为无法ping通路由,无法ping通同一网络内其他主机。
|
|
开启后查看网卡状态
|
|
其中BROADCAST,MULTICAST,PROMISC,UP,LOWER_UP
的PROMISC
说明网卡eth0已开启成混杂模式。
注:以上设置临时生效
基于macvlan构建docker跨宿主机通讯
|
|
说明:容器默认使用主机的DNS设置,因此无需配置DNS服务器。
查看创建结果
|
|
在node01上运行容器
|
|
在node02上运行容器
|
|
在C1上平C2 检查结果
|
|
构建macvlan与宿主机同网段docker网络
在两台主机上分别创建docker网络
|
|
说明:
--gateway
为宿主机的网关,如宿主机为物理机则设置路由器的ip。--subnet
为宿主机所在网段。
在两台主机上分别创建容器
|
|
测试网络连通情况
ping网关,结论:通。
|
|
ping宿主机,结论:不通。
|
|
ping其他宿主机,结论:通。
|
|
ping其他容器,结论:通。
|
|
带有VLAN的macvlan
说明
单个Docker主机网络接口只能作为一个macvlan或ipvlan网络的父接口。然而,一个macvlan,一个第2层域和每个物理接口一个子网是现代虚拟化解决方案中相当严重的限制。幸运的是,Docker主机子接口可以作为macvlan网络的父接口。这与VLAN的Linux实现完全一致,其中802.1Q中继连接上的每个VLAN都在物理接口的子接口上。
vlan介绍
VLAN(Virtual Local Area Network)又称虚拟局域网,是指在局域网的基础上,采用网络管理软件构建的可跨越不同网段、不同网络的端到端的逻辑网络。
一个VLAN组成一个逻辑子网,即一个逻辑广播域,它可以覆盖多个网络设备,允许处于不同地理位置的网络用户加入到一个逻辑子网中。使用VLAN功能后,能够将网络分割成多个广播域。
Linux支持在物理网卡上创建vlan子接口。每个vlan子接口属于不同的二层域,所有的vlan子接口拥有相同的MAC地址。这点是和Macvlan子接口不同的地方。
vlan范围说明
范围 | 说明 |
---|---|
0,4095 | 保留 仅限系统使用 用户不能查看和使用这些VLAN |
1 正常 | Cisco默认VLAN 用户能够使用该VLAN,但不能删除它 |
2-1001 | 正常 用于以太网的VLAN 用户可以创建、使用和删除这些VLAN |
1002-1005 | 正常 用于FDDI和令牌环的Cisco默认VLAN 用户不能删除这些VLAN |
1006-1024 | 保留 仅限系统使用 用户不能查看和使用这些VLAN |
1025-4094 | 扩展 仅用于以太网VLAN |
环境准备
主机名 | IP地址 | 地位 | 软件环境 |
---|---|---|---|
c1 | 10.10.0.1 | 容器01-02 | docker |
c2 | 10.10.0.2 | 容器01-02 | docker |
c3 | 10.10.0.3 | 容器02-01 | docker |
c4 | 10.10.0.4 | 容器02-02 | docker |
gateway01 | 10.0.0.253 | 容器01网关 | |
gateway01 | 10.0.0.254 | 容器01网关 | |
node01 | 10.0.0.15 | 宿主机01(vm虚拟机) | centos 7.3/docker-ce1806 |
node02 | 10.0.0.16 | 宿主机02(vm虚拟机) | centos 7.3/docker-ce1806 |
创建VLAN
为node01物理网卡创建macvlan子接口
|
|
启用macvlan
|
|
设置macvlan的ip和网关
|
|
参考网址
Exploring Docker Networking – Host, None, and MACVLAN | raid-zero.com | Page 3