L3 VLAN 하위 인터페이스 구성 예
요약 레이어 3 VLAN 하위 인터페이스가 있는 사용자 포드를 클라우드 네이티브 라우터의 인스턴스에 추가하는 방법을 알아보려면 이 주제를 읽어보십시오.
개요
계층 3 VLAN 하위 인터페이스로 사용자 Pod를 구성하고 JCNR 인스턴스에 연결할 수 있습니다. 주니퍼 클라우드 네이티브 라우터는 구축 시 L3 인터페이스를 구성해야 합니다. cRPD는 패브릭 인터페이스에 대한 유효한 VLAN 구성으로 구성되어야 합니다. 예를 들어:
set interfaces ens1f1v1 unit 201 vlan-id 201 set interfaces ens1f1v1 unit 201 family inet address 192.168.123.1/24 set interfaces ens1f1v1 unit 201 family inet6 address abcd:192:168:123::1/64 set routing-instance blue interface ens1f1v1.201
개략적인 작업은 다음과 같습니다.
-
NAD(네트워크 연결 정의) 정의 및 적용 - NAD 파일은 Multus가 JCNR-CNI를 호출하고 Pod 인터페이스를 연결할 네트워크를 생성하는 데 필요한 구성을 정의합니다.
-
클라우드 네이티브 라우터 클러스터에 포드 YAML 파일 정의 및 적용 - 포드 YAML에는 JCNR-CNI에서 생성한 네트워크에 대한 포드 규격 및 주석이 포함되어 있습니다
참고:NAD 및 Pod YAML 파일에 대한 자세한 정보는 JCNR 사용 사례 및 구성 개요 주제를 검토하십시오.
구성 예시
- 다음은 레이어 3 VLAN 하위 인터페이스를
apiVersion: "k8s.cni.cncf.io/v1" kind: NetworkAttachmentDefinition metadata: name: vrf201 spec: config: '{ "cniVersion":"0.4.0", "name": "vrf201", "plugins": [ { "type": "jcnr", "args": { "instanceName": "vrf201", "instanceType": "virtual-router", "parentInterface":"net1", "vlanId": "201" }, "ipam": { "type": "static", "addresses":[ { "address":"99.61.0.2/16", "gateway":"99.61.0.1" }, { "address":"1234::99.61.0.2/120", "gateway":"1234::99.61.0.1" } ] }, "kubeConfig":"/etc/kubernetes/kubelet.conf" } ] }'
net1
와 VLAN ID201
를 사용하여 가상 라우터 인스턴스를vrf201
정의합니다.virtual-router
인스턴스 유형은 VPN 라우팅 및 포워딩 인스턴스 유형과 유사하지만 VPN과 관련되지 않은 애플리케이션에 사용됩니다. 이 인스턴스 유형에는 가상 라우팅 및 포워딩(VRF) 가져오기, VRF 내보내기, VRF 대상 또는 경로 구분자 요구 사항이 없습니다. Pod VLAN 하위 인터페이스가 인스턴스에 연결됩니다vrf201
. 또한 NAD는 Pod 인터페이스에 할당할 정적 IP 주소를 정의합니다. - NAD 매니페스트를 적용하여 네트워크를 생성합니다.
kubectl apply -f nad_l3_vlan_subinterface_201.yaml networkattachmentdefinition.k8s.cni.cncf.io/vrf201 created
- NAD가 생성되었는지 확인합니다.
kubectl get net-attach-def NAME AGE vrf201 30s
- 다음은 및
vrf202
네트워크에apiVersion: v1 kind: Pod metadata: name: pod1 annotations: k8s.v1.cni.cncf.io/networks: | [ { "name": "vrf201", "interface":"net1.201" } ] spec: containers: - name: pod1 image: ubuntu:latest imagePullPolicy: IfNotPresent securityContext: privileged: false env: - name: KUBERNETES_POD_UID valueFrom: fieldRef: fieldPath: metadata.uid volumeMounts: - name: dpdk mountPath: /dpdk subPathExpr: $(KUBERNETES_POD_UID) volumes: - name: dpdk hostPath: path: /var/run/jcnr/containers
vrf201
Pod를 만드는 yaml의 예입니다. Pod는 주석을k8s.v1.cni.cncf.io/networks
사용하여 라우터 인스턴스에 연결됩니다. - Pod 매니페스트를 적용합니다.
[root@jcnr-01]# kubectl apply -f pod_l3_subinterface.yaml pod/pod1 created
- 포드가 실행 중인지 확인합니다.
[root@jcnr-01 ~]# kubectl get pods NAME READY STATUS RESTARTS AGE pod1 1/1 Running 0 38s
- 보조 인터페이스가 생성되고 네트워크에 연결되었는지 확인하기 위해 포드를
vrf201
설명합니다. (간결성을 위해 출력이 잘립니다.)[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: 90de252886b3e0a97526ac175544078fb03debf05650946d759e2de0d5179c17 cni.projectcalico.org/podIP: 10.233.91.126/32 cni.projectcalico.org/podIPs: 10.233.91.126/32 jcnr.juniper.net/dpdk-interfaces: [ { "name": "net1.201", "vhost-adaptor-path": "/dpdk/vhost-net1.sock", "vhost-adaptor-mode": "client", "ipv4-address": "99.61.0.2/16", "ipv6-address": "1234::633d:2/120", "mac-address": "02:00:00:8C:97:A2", "vlan-id": "201" } ] k8s.v1.cni.cncf.io/network-status: [{ "name": "k8s-pod-network", "ips": [ "10.233.91.126" ], "default": true, "dns": {} },{ "name": "default/vrf201", "interface": "net1.201", "ips": [ "99.61.0.2", "1234::633d:2" ], "mac": "02:00:00:8C:97:A2", "dns": {} }] ...
- vRouter에 해당 인터페이스가 생성되었는지 확인합니다. vRouter CLI에 액세스하고 명령을 실행합니다
vif --list
.vif0/11 PCI: 0000:b3:11.1 (Speed 10000, Duplex 1) NH: 16 MTU: 9014 ---> fabric interface Type:Physical HWaddr:b2:56:78:5c:af:fa IPaddr:0.0.0.0 DDP: OFF SwLB: ON Vrf:0 Mcast Vrf:0 Flags:L3L2Vof QOS:0 Ref:42 RX port packets:10988509 errors:0 RX queue errors to lcore 0 0 0 0 0 0 0 0 0 0 0 0 0 0 Fabric Interface: 0000:b3:11.1 Status: UP Driver: net_iavf RX packets:10988509 bytes:5582067106 errors:0 TX packets:10988484 bytes:5581953776 errors:0 Drops:0 TX port packets:10988484 errors:0 vif0/17 PMD: ens1f1v1 NH: 44 MTU: 9000 ---> tap interface Type:Host HWaddr:b2:56:78:5c:af:fa IPaddr:0.0.0.0 DDP: OFF SwLB: ON Vrf:0 Mcast Vrf:0 Flags:L3L2 QOS:0 Ref:41 TxXVif:11 RX device packets:2201 bytes:935980 errors:0 RX queue packets:2201 errors:0 RX queue errors to lcore 0 0 0 0 0 0 0 0 0 0 0 0 0 0 RX packets:2201 bytes:935980 errors:0 TX packets:493 bytes:161906 errors:0 Drops:0 TX queue packets:493 errors:0 TX device packets:493 bytes:161906 errors:0 vif0/48 Virtual: ens1f1v1.201 Vlan(o/i)(,S): 201/201 NH: 161 MTU: 1514 Parent:vif0/11 Sub-type: physical-tap ---> L3 sub-interface, parent is a physical interface Type:Virtual(Vlan) HWaddr:b2:56:78:5c:af:fa IPaddr:192.168.123.1 IP6addr:abcd:192:168:123::1 DDP: OFF SwLB: ON Vrf:201 Mcast Vrf:201 Flags:L3DProxyEr QOS:-1 Ref:4 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:18 bytes:1836 errors:0 Drops:0 vif0/49 Virtual: ens1f1v1.201 Vlan(o/i)(,S): 201/201 NH: 156 MTU: 9000 Parent:vif0/17 Sub-type: Host-tap ---> L3 sub-interface, parent is a tap interface Type:Virtual(Vlan) HWaddr:b2:56:78:5c:af:fa IPaddr:192.168.123.1 IP6addr:abcd:192:168:123::1 DDP: OFF SwLB: ON Vrf:201 Mcast Vrf:65535 Flags:L3DProxyEr QOS:-1 Ref:4 TxXVif:48 RX queue errors to lcore 0 0 0 0 0 0 0 0 0 0 0 0 0 0 RX packets:18 bytes:1908 errors:0 TX packets:0 bytes:0 errors:0 Drops:0 vif0/50 PMD: vhostnet1-9403fd77-648a-47 NH: 177 MTU: 9160 ---> pod interface Type:Virtual HWaddr:00:00:5e:00:01:00 IPaddr:0.0.0.0 DDP: OFF SwLB: ON Vrf:65535 Mcast Vrf:65535 Flags:L3DProxyEr QOS:-1 Ref:20 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 vif0/51 Virtual: vhostnet1-9403fd77-648a-47.202 Vlan(o/i)(,S): 202/202 NH: 17 MTU: 1514 Parent:vif0/50 ---->L3 pod sub-interface, parent is the pod interface Type:Virtual(Vlan) HWaddr:00:00:5e:00:01:00 IPaddr:99.62.0.2 IP6addr:1234::633e:2 DDP: OFF SwLB: ON Vrf:2 Mcast Vrf:2 Flags:PL3DProxyEr QOS:-1 Ref:4 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