书籍来源:《Kubernetes网络权威指南:基础、原理与实践》
一边学习一边整理读书笔记,并与大家分享,侵权即删,谢谢支持!
附上汇总贴:《Kubernetes网络权威指南》读书笔记 | 汇总_COCOgsta的博客-CSDN博客
Macvlan先天存在的不足:
- 无法支持大量的MAC地址;
- 无法工作在无线网络环境中。
1.9.1 IPvlan简介
与Macvlan类似,IPvlan也是从一个主机接口虚拟出多个虚拟网络接口。区别在于IPvlan所有的虚拟接口都有相同的MAC地址,而IP地址却各不相同。
Linux 内核3.19版本才开始支持IPvlan,Docker从4.2版本起能够稳定支持IPvlan。
IPvlan有两种不同的模式,分别是L2和L3。一个父接口只能选择其中一种模式,依附于它的所有子虚拟接口都运行在该模式下。
- L2模式
IPvlan L2模式和Macvlan bridge模式的工作原理很相似,父接口作为交换机转发子接口的数据。
- L3模式
L3模式下,IPvlan有点像路由器的功能。只要父接口相同,即使虚拟机/容器不在同一个网络,也可以互相ping通对方,因为IPvlan会在中间做报文的转发工作。
图1-30 IPvlan L3模式
需要在外部路由器上配置好对应的路由规则,否则IPvlan的网络是不能被外部直接访问的。
1.9.2 测试IPvlan
创建两个测试用的network namespace:
创建IPvlan的虚拟网卡接口,创建IPvlan虚拟接口的命令和Macvlan格式相同:
把IPvlan接口放到前面创建好的network namespace中:
给两个虚拟网卡接口配置不同网络IP地址,并配置好路由项:
测试两个网络的连通性:
1.9.3 Docker IPvlan网络
从Docker1.13版本开始加入了对IPvlan的支持,测试过程如下所示。
创建IPvlan的网络,需要在创建Docker网络时把网络驱动(-d)设置成ipvlan,同时设置IPvlan的工作模式为L3:
启动两个容器,发现在同一个IPvlan网络的两个容器可以互相ping通:
创建另外一个IPvlan网络,和前面的网络不在同一个广播域:
在新建的网络中运行容器,发现可以ping通前面网络中的容器: