macvlan Multus-CNI在OpenShift上的使用

macvlan架构图

macvlan Multus-CNI在OpenShift上的使用


Macvlan允许您配置父级物理以太网接口(也称为上级设备)的子接口(也称为从设备),每个子接口都有自己的唯一MAC地址,因此也有自己的IP地址。然后,应用程序、VM和容器可以绑定到特定的子接口,以使用其自己的MAC和IP地址直接连接到物理网络。有些NIC对其在硬件中支持的MAC地址数量有限制。超过限制可能会影响性能。


macvlan Multus-CNI在OpenShift上的使用

macvlan Multus-CNI在OpenShift上的使用


Ipvlan与macvlan非常相似,但有一个重要区别。Ipvlan不会为创建的子接口分配唯一的MAC地址。所有子接口共享父接口的MAC地址,但使用不同的IP地址。

macvlan Multus-CNI在OpenShift上的使用

由于单个父接口上的所有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节点,查看节点的网卡:

macvlan Multus-CNI在OpenShift上的使用

确认192.168.137.0/24的网关是192.168.137.1macvlan Multus-CNI在OpenShift上的使用

修改网络CO,增加如下,配置静态IP,赋予到tomcat项目:

oc edit networks.operator.openshift.iocluster

macvlan Multus-CNI在OpenShift上的使用

查看赋予项目的网络:

macvlan Multus-CNI在OpenShift上的使用

确认IP未被使用:


macvlan Multus-CNI在OpenShift上的使用


书写创建pod的yaml,使用cni网络注释

macvlan Multus-CNI在OpenShift上的使用

文本格式:

[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

macvlan Multus-CNI在OpenShift上的使用

登录pod,确认IP增加:

macvlan Multus-CNI在OpenShift上的使用

在pod里ping网关:

macvlan Multus-CNI在OpenShift上的使用

在外部主机ping pod ip:

macvlan Multus-CNI在OpenShift上的使用


增加DHCP网络:

修改网络co,增加如下内容,添加dhcp网络到tomcat1:

macvlan Multus-CNI在OpenShift上的使用

[root@lb.weixinyucluster ~]#  oc get network-attachment-definitions -n  tomcat1

NAME               AGE

macvlan-network1   9s


书写创建pod的yaml

macvlan Multus-CNI在OpenShift上的使用

macvlan Multus-CNI在OpenShift上的使用


但是,查看pod创建过程,出现报错,原因是我的和环境中没有配置dhcp server。需要注意的是,dhcp server不能配置在pod所在的worker节点上(Linux does not allow to communicate between macvlan interface and its master interface,),需要配置在外部。因此,即worker节点能够访问到的dhcp server。这与很多客户的环境不匹配,因此不再进行测试。建议使用静态分配IP的方式。

macvlan Multus-CNI在OpenShift上的使用


上一篇:使用 Node.js Express 的最佳实践


下一篇:Kubernetes — MACVLAN CNI