L2 VLAN 子接口配置示例
阅读本主题,了解如何将带有第 2 层 VLAN 子接口的用户 Pod 添加到云原生路由器的实例中。
概述
您可以使用第 2 层 VLAN 子接口配置用户容器,并将其连接到云原生路由器实例。瞻博网络云原生路由器在部署时必须配置 L2 接口。必须为结构接口配置有效的 VLAN 配置 cRPD。例如:
set interfaces eth1 unit 100 vlan-id 100
注意:
请注意,单元号和 VLAN ID 必须匹配。
您的高级任务是:
-
定义和应用网络附件定义 (NAD) — NAD 文件定义 Multus 调用 JCNR-CNI 并创建要将 pod 接口连接到的网络所需的配置。
-
定义 Pod YAML 文件并将其应用到云原生路由器群集 - Pod YAML 包含 Pod 规范和 JCNR-CNI 创建的网络注释
注意:请查看 云原生路由器用例和配置概述 主题,了解有关 NAD 和 Pod YAML 文件的更多信息。
配置示例
- 以下是用于创建第 2 层 VLAN 子接口的 NAD 示例:
NAD 定义一个桥接域apiVersion: "k8s.cni.cncf.io/v1" kind: NetworkAttachmentDefinition metadata: name: vswitch-bd201-sub spec: config: '{ "cniVersion":"0.4.0", "name": "vswitch-bd201-sub", "capabilities":{"ips":true}, "plugins": [ { "type": "jcnr", "args": { "instanceName": "vswitch", "instanceType": "virtual-switch", "bridgeDomain": "bd201", "bridgeVlanId": "201", "parentInterface": "net1", "interface": "net1.201" }, "ipam": { "type": "static", "capabilities":{"ips":true}, "addresses":[ { "address":"10.3.0.1/24", "gateway":"10.3.0.254" }, { "address":"2001:db8:3003::10.3.0.1/120", "gateway":"2001:db8:3003::10.3.0.1" } ] }, "kubeConfig":"/etc/kubernetes/kubelet.conf" } ] }'bd201和一个具有父接口net1的子接口net1.201。Pod 将在实例中virtual-switch附加。它还定义了要分配给 pod 接口的静态 IP 地址。 - 应用 NAD 清单以创建网络。
kubectl apply -f nad_l2_vlan_subinterface.yaml networkattachmentdefinition.k8s.cni.cncf.io/vswitch-bd201-sub created
- 验证 NAD 已创建。
[root@jcnr-01]# kubectl get net-attach-def NAME AGE vswitch-bd201-sub 43s
- 下面是一个用于创建附加
vswitch-bd201-sub到网络的 pod 的示例 yaml: Pod 使用注释连接到apiVersion: v1 kind: Pod metadata: name: pod1 annotations: k8s.v1.cni.cncf.io/networks: "vswitch-bd201-sub" spec: containers: - name: pod1 image: ubuntu:latest imagePullPolicy: IfNotPresent securityContext: privileged: false resources: requests: memory: 2Gi limits: hugepages-1Gi: 2Gi env: - name: KUBERNETES_POD_UID valueFrom: fieldRef: fieldPath: metadata.uid volumeMounts: - name: dpdk mountPath: /dpdk subPathExpr: $(KUBERNETES_POD_UID) - mountPath: /dev/hugepages name: hugepage volumes: - name: dpdk hostPath: path: /var/run/jcnr/containers - name: hugepage emptyDir: medium: HugePagesk8s.v1.cni.cncf.io/networks路由器实例。 - 应用容器清单。
[root@jcnr-01]# kubectl apply -f pod_access_mode.yaml pod/pod1 created
- 验证 pod 是否正在运行。
[root@jcnr-01 ~]# kubectl get pods NAME READY STATUS RESTARTS AGE pod1 1/1 Running 0 40s
- 描述 pod 以验证是否创建了辅助接口并将其连接到
vswitch-bd201-sub网络。(为简洁起见,输出已经过修整)。[root@jcnr-01 ~]# kubectl describe pod pod1 Name: pod1 Namespace: default Priority: 0 Node: jcnr-01/10.100.20.25 Start Time: Mon, 26 Jun 2023 09:53:31 -0400 Labels: <none> Annotations: cni.projectcalico.org/containerID: 58642dd26f85769e14d302153357e84e6900398532d1b82b50a845ac1ede051a cni.projectcalico.org/podIP: cni.projectcalico.org/podIPs: jcnr.juniper.net/dpdk-interfaces: [ { "name": "net1", "vhost-adaptor-path": "/dpdk/vhost-net1.sock", "vhost-adaptor-mode": "client", "ipv4-address": "10.3.0.1/24", "ipv6-address": "2001:db8:3003::a03:1/120", "mac-address": "02:00:00:84:DC:42", "vlan-id": "201" } ] k8s.v1.cni.cncf.io/network-status: [{ "name": "k8s-pod-network", "ips": [ "10.233.91.97" ], "default": true, "dns": {} },{ "name": "default/vswitch-bd201-sub", "interface": "net1", "ips": [ "10.3.0.1", "2001:db8:3003::a03:1" ], "mac": "02:00:00:84:DC:42", "dns": {} }] ... - 验证 vRouter 是否已创建相应的接口。 访问 vRouter CLI 并发出
vif --list命令。 请注意,接口类型为vif0/2 PMD: vhostnet1-d5eee4ec-dd7c-4e MTU: 9160 Type:Virtual HWaddr:02:00:00:84:dc:42 DDP: OFF SwLB: ON Vrf:65535 Flags:L2 QOS:-1 Ref:14 RX queue errors to lcore 0 0 0 0 0 0 0 0 0 0 0 0 0 0 RX packets:0 bytes:0 errors:0 TX packets:0 bytes:0 errors:0 Drops:0 TX port packets:0 errors:293 vif0/3 Virtual: vhostnet1-d5eee4ec-dd7c-4e.201 Vlan(o/i)(,S): 201/201 Parent:vif0/2 MTU: 1514 Type:Virtual(Vlan) HWaddr:02:00:00:84:dc:42 DDP: OFF SwLB: ON Vrf:0 Flags:L2 QOS:-1 Ref:1 RX queue errors to lcore 0 0 0 0 0 0 0 0 0 0 0 0 0 0 RX packets:0 bytes:0 errors:0 TX packets:208 bytes:17071 errors:0 Drops:0Virtual,VLAN ID 设置为201。父接口是vif0/2。对于 L2 子接口,VRF 始终为 0。