18.6. 为启用 SR-IOV 的工作负载配置 QinQ 支持
QinQ (正式称为 802.1Q-in-802.1Q)是由 IEEE 802.1ad 定义的联网技术。IEEE 802.1ad 扩展了 IEEE 802.1Q-1998 标准,并通过向已使用 802.1Q 标记的数据包引入额外的 802.1Q 标签增强 VLAN 功能。此方法也称为 VLAN 堆栈或双 VLAN。
在执行以下文档中的任何任务前,请确保 安装了 SR-IOV Network Operator。
18.6.1. 关于 802.1Q-in-802.1Q 支持 复制链接链接已复制到粘贴板!
在传统的 VLAN 设置中,帧通常包含一个 VLAN 标签,如 VLAN-100,以及其他元数据,如服务质量 (QoS) 位和协议信息。QinQ 引入了第二个 VLAN 标签,其中服务提供商为其使用指定外部标签,提供它们的灵活性,而内部标签则保留给客户的 VLAN 专用。
QinQ 通过使用双 VLAN 标记促进嵌套 VLAN 的创建,从而在网络环境中实现更精细的分段和流量隔离。这种方法对于您需要通过通用基础架构向多个客户提供基于 VLAN 的服务的服务供应商网络特别有用,同时确保流量隔离和隔离。
下图演示了 OpenShift Container Platform 如何使用 SR-IOV 和 QinQ 实现容器化工作负载的高级网络分段和隔离。
图显示双 VLAN 标记 (QinQ) 如何在支持 SR-IOV 的 worker 节点上工作。位于 pod 命名空间中的 SR-IOV 虚拟功能 (VF),ext0
由带有 VLAN ID 和 VLAN 协议的 SR-IOV Container Network Interface (CNI) 配置。这与 S-tag 对应。在 pod 中,VLAN CNI 使用主接口 ext0
创建一个子接口。此子接口使用 802.1Q 协议添加内部 VLAN ID,该协议对应于 C-tag。
这演示了 QinQ 如何在网络内启用更精细的流量分段和隔离。帧结构在右侧详细介绍,突出显示包含 VLAN 标签、EtherType、IP、TCP 和 Payload 部分的包含。QinQ 促进通过共享基础架构向多个客户提供基于 VLAN 的服务,同时确保流量隔离和隔离。
OpenShift Container Platform SR-IOV 解决方案支持在 SriovNetwork
自定义资源 (CR) 上设置 VLAN 协议。虚拟功能 (VF) 可以使用此协议来设置 VLAN 标签,也称为外部标签。然后,Pod 可以使用 VLAN CNI 插件来配置内部标签。
NIC | 802.1ad/802.1Q | 802.1Q/802.1Q |
---|---|---|
Intel X710 | 否 | 支持 |
Intel E810 | 支持 | 支持 |
Mellanox | 否 | 支持 |
18.6.2. 为启用 SR-IOV 的工作负载配置 QinQ 支持 复制链接链接已复制到粘贴板!
先决条件
-
已安装 OpenShift CLI(
oc
)。 -
您可以使用具有
cluster-admin
角色的用户访问集群。 - 已安装 SR-IOV Network Operator。
流程
使用以下内容创建一个名为
sriovnetpolicy-810-sriov-node-network.yaml
的文件:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令来创建
SriovNetworkNodePolicy
对象:oc create -f sriovnetpolicy-810-sriov-node-network.yaml
$ oc create -f sriovnetpolicy-810-sriov-node-network.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 打开一个单独的终端窗口,运行以下命令来监控
openshift-sriov-network-operator
命名空间中指定节点的 SR-IOV 网络节点状态的同步状态:watch -n 1 'oc get sriovnetworknodestates -n openshift-sriov-network-operator <node_name> -o jsonpath="{.status.syncStatus}"'
$ watch -n 1 'oc get sriovnetworknodestates -n openshift-sriov-network-operator <node_name> -o jsonpath="{.status.syncStatus}"'
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 同步状态表示从
InProgress
更改为Succeeded
。创建一个
SriovNetwork
对象,并设置名为 S-tag 或Service Tag
的外部 VLAN,因为它属于基础架构。重要您必须在交换机的中继接口上配置 VLAN。另外,您可能需要进一步配置一些交换机来支持 QinQ 标记。
使用以下内容创建一个名为
nad-sriovnetwork-1ad-810.yaml
的文件:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令来创建对象:
oc create -f nad-sriovnetwork-1ad-810.yaml
$ oc create -f nad-sriovnetwork-1ad-810.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
使用内部 VLAN 创建
NetworkAttachmentDefinition
对象。内部 VLAN 通常被称为 C-tag 或Customer Tag
,它属于 Network Function:使用以下内容,创建一个名为
nad-cvlan100.yaml
的文件:Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 指定 pod 中的 VF 接口。默认名称为
net1
,因为 pod 注解中没有设置名称。
运行以下命令来应用 YAML 文件:
oc apply -f nad-cvlan100.yaml
$ oc apply -f nad-cvlan100.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
按照以下步骤,在节点上验证 QinQ 是否活跃:
使用以下内容创建一个名为
test-qinq-pod.yaml
的文件:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令来创建测试 pod:
oc create -f test-qinq-pod.yaml
$ oc create -f test-qinq-pod.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在存在 pod 的目标节点上进入 debug 会话,运行以下命令显示网络接口
ens5f0
的信息:oc debug node/my-cluster-node -- bash -c "ip link show ens5f0"
$ oc debug node/my-cluster-node -- bash -c "ip link show ens5f0"
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出中的
vlan protocol 802.1ad
ID 表示接口支持带有协议 802.1ad (QinQ)的 VLAN 标记。VLAN ID 为 171。