macvlan架构图
Macvlan允许您配置父级物理以太网接口(也称为上级设备)的子接口(也称为从设备),每个子接口都有自己的唯一MAC地址,因此也有自己的IP地址。然后,应用程序、VM和容器可以绑定到特定的子接口,以使用其自己的MAC和IP地址直接连接到物理网络。有些NIC对其在硬件中支持的MAC地址数量有限制。超过限制可能会影响性能。
Ipvlan与macvlan非常相似,但有一个重要区别。Ipvlan不会为创建的子接口分配唯一的MAC地址。所有子接口共享父接口的MAC地址,但使用不同的IP地址。
由于单个父接口上的所有VM或容器都使用相同的MAC地址,因此ipvlan也有一些缺点:
共享的MAC地址会影响DHCP操作。如果您的VM或容器使用DHCP来获取网络设置,请确保它们在DHCP请求中使用唯一的ClientID,并确保您的DHCP服务器根据ClientID(而不是客户端的MAC地址)分配IP地址。
自动配置的EUI-64 IPv6地址基于MAC地址。 共享相同父接口的所有VM或容器将自动生成相同的IPv6地址。确保您的VM或容器使用静态IPv6地址或IPv6隐私地址并禁用SLAAC。
在以下情况下使用Ipvlan:
父接口是无线的。
您的父接口性能下降是因为您已经超过了其他MAC地址的数量。对于生产,您应该考虑将NIC换成更好的NIC,并使用macvlans。
物理交换机限制了端口允许的MAC地址数量(端口安全性)。对于生产,您应该与网络管理员一起解决此策略问题,并使用macvlans。
您可以运行高级网络方案,例如使用在同一VM或容器中运行的BGP守护程序来宣传在VM或容器中运行的服务。
而macvlan适用于ipvlan的所有场景。
在OCP 4.3上测试macvlan。首先验证静态IP模式。
首先确认worker节点的网段:192.168.91.0/24
登录worker节点,查看节点的网卡:
确认192.168.137.0/24的网关是192.168.137.1
修改网络CO,增加如下,配置静态IP,赋予到tomcat项目:
oc edit networks.operator.openshift.iocluster
查看赋予项目的网络:
确认IP未被使用:
书写创建pod的yaml,使用cni网络注释
文本格式:
[root@lb.weixinyucluster ~]# cat 1.yaml
apiVersion: v1
kind: Pod
metadata:
name: example-staticip
annotations:
k8s.v1.cni.cncf.io/networks: macvlan-network
spec:
containers:
- name: example-pod
command: ["/bin/bash", "-c", "sleep 2000000000000"]
image: centos/tools
[root@lb.weixinyucluster ~]# oc apply -f 1.yaml
pod/example-staticip created
登录pod,确认IP增加:
在pod里ping网关:
在外部主机ping pod ip:
增加DHCP网络:
修改网络co,增加如下内容,添加dhcp网络到tomcat1:
[root@lb.weixinyucluster ~]# oc get network-attachment-definitions -n tomcat1
NAME AGE
macvlan-network1 9s
书写创建pod的yaml
但是,查看pod创建过程,出现报错,原因是我的和环境中没有配置dhcp server。需要注意的是,dhcp server不能配置在pod所在的worker节点上(Linux does not allow to communicate between macvlan interface and its master interface,),需要配置在外部。因此,即worker节点能够访问到的dhcp server。这与很多客户的环境不匹配,因此不再进行测试。建议使用静态分配IP的方式。