가상 인터페이스에서 VLAN 하위 인터페이스 지원 활성화
요약 VNF(Virtualized Network Function) 및 CNF(Containerized Network Function) 워크로드는 종종 단일 인터페이스에서 여러 개의 가상 네트워크 서비스를 필요로 합니다. 클라우드 네이티브 Contrail® Networking™ 은 가상 인터페이스에서 VLAN 하위 인터페이스를 지원합니다.
VLAN 하위 인터페이스 개요
VLAN 하위 인터페이스는 네트워크 수준에서 가상(또는 물리적) 인터페이스의 논리적 분할입니다. VLAN 하위 인터페이스는 802.1Q VLAN 태그를 수신하고 전달하는 레이어 3 인터페이스입니다. 단일 가상 인터페이스에 여러 VLAN 태그를 할당할 수 있습니다. 패킷이 해당 인터페이스에 도착하면 패킷의 관련 VLAN 태그는 패킷 경로를 지정합니다. VLAN 하위 인터페이스를 사용하여 서비스를 위해 트래픽을 여러 VLAN으로 라우팅할 수 있습니다.
API 변경 사항
이 섹션은 VLAN 하위 인터페이스를 구성할 때 발생하는 API 호출에 대한 정보를 제공합니다.
클라우드 네이티브 Contrail Networking VLAN 하위 인터페이스를 구성할 때 Kubernetes는 새로운 properties
또는 VLAN 태그로 필드를 업데이트 VirtualMachineInterface
합니다. 업데이트가 발생한 후 개체는 VirtualMachineInterface
기존 VLAN 태그를 기반으로 다른 VirtualMachineInterface
개체를 참조합니다.
클라우드 네이티브 Contrail Networking Contrail Classic의 properties
필드를 로 virtualMachineInterfaceProperties
정의합니다.
네트워크 정의 변경 사항
이 섹션에서는 포드 내에서 가상 인터페이스에 대한 하위 인터페이스를 생성할 때 필요한 네트워크 정의 향상에 대한 정보를 제공합니다.
PodController
에서 kube-manager
포드 이벤트에 대한 감시는 네트워크 정의가 적용된 것을 읽습니다. Kube-manager
각 네트워크 선택 요소를 구문 분석하고 관련 VMI(가상 머신 인터페이스)를 생성합니다. 상위 VPI는 YAML 파일에 첨부된 태그만 net.juniper.contrail.interfacegroup
있는 네트워크 요소입니다. 하위 인터페이스는 YAML 파일에 첨부된 및 net.juniper.contrail.vlan
태그가 있는 네트워크 요소 net.juniper.contrail.interfacegroup
입니다.
다음 두 태그는 섹션에서 네트워크 정의를 cni-args
향상시킵니다.
-
net.juniper.contrail.interfacegroup
-
인터페이스 그룹은 두 개 이상의 인터페이스를 그룹화합니다.
-
상위 인터페이스는 이 태그와 연결된 네트워크 선택 요소입니다.
-
서브 인터페이스는 이 태그 및 VLAN 태그와 관련된 네트워크 선택 요소입니다.
-
net.juniper.contrail.vlan
-
하위 인터페이스에서 VLANID를 지정합니다.
-
VLAN 하위 인터페이스는 상위 인터페이스에 속합니다. 사용자는 하위 인터페이스가 연결할 네임스페이스를 지정해야 합니다. 다음 예를 고려하십시오.
예 1
apiVersion: v1 kind: Pod metadata: name: my-pod namespace: my-namespace annotations: k8s.v1.cni.cncf.io/networks: | [ { "name": "parent-vn", "namespace": "vn-ns", "cni-args": { "net.juniper.contrail.interfacegroup": "eth1"} ... }, { "name": "subitf-vn", "namespace": "vn-ns", "cni-args": { "net.juniper.contrail.vlan": 100, "net.juniper.contrail.interfacegroup": "eth1"}, ... }, ...
예 1은 에 대해 cni-args
지정된 포드 주석을 보여줍니다. 이 예의 구성은 포드 내에서 다음 3개의 VMI와 3개의 IIP(인터페이스 IP)를 생성합니다.
-
VMI, 기본 pod 네트워크에서 eth0용 IIP
-
VMI, 에서 eth1용
parent-vn
IIP(상위 인터페이스) -
VMI, 에서 eth1.100용
subitf-vn
IIP(하위 인터페이스)
구성 사용 사례
이 섹션에서는 서로 다른 유효하고 잘못된 상위 및 하위 인터페이스 구성의 예를 제공합니다.
유효한 구성
잘못된 구성
유효한 구성 1: 부모 1개, 하위 인터페이스 1개:
apiVersion: v1 kind: Pod metadata: name: vlan100-0 namespace: vlan-project annotations: k8s.v1.cni.cncf.io/networks: | [ { "name": "vlan-parent-vn", "namespace": "vlan-project", "cni-args": { "net.juniper.contrail.interfacegroup": "eth1" } }, { "name": "vlan-subintf-vn", "namespace": "vlan-project", "cni-args": { "net.juniper.contrail.vlan": "100", "net.juniper.contrail.interfacegroup": "eth1" } }, ...
유효한 구성 2: 상위 1개, 여러 하위 인터페이스:
apiVersion: v1 kind: Pod metadata: name: vlan100-0 namespace: vlan-project annotations: k8s.v1.cni.cncf.io/networks: | [ { "name": "vlan-parent-vn", "namespace": "vlan-project", "cni-args": { "net.juniper.contrail.interfacegroup": "eth1" } }, { "name": "vlan-subintf-vn2", "namespace": "vlan-project", "cni-args": { "net.juniper.contrail.vlan": "200", "net.juniper.contrail.interfacegroup": "eth1" } }, { "name": "vlan-subintf-vn", "namespace": "vlan-project", "cni-args": { "net.juniper.contrail.vlan": "100", "net.juniper.contrail.interfacegroup": "eth1" } } ]
유효한 구성 3: 여러 부모, 여러 하위 인터페이스:
apiVersion: v1 kind: Pod metadata: name: vlan100-0 namespace: vlan-project annotations: k8s.v1.cni.cncf.io/networks: | [ { "name": "vlan-parent-vn", "namespace": "vlan-project", "cni-args": { "net.juniper.contrail.interfacegroup": "eth1" } }, { "name": "vlan-subintf-vn2", "namespace": "vlan-project", "cni-args": { "net.juniper.contrail.vlan": "200", "net.juniper.contrail.interfacegroup": "eth1" } }, { "name": "vlan-subintf-vn", "namespace": "vlan-project", "cni-args": { "net.juniper.contrail.vlan": "100", "net.juniper.contrail.interfacegroup": "eth1" } }, { "name": "vlan-subintf-vn4", "namespace": "vlan-project", "cni-args": { "net.juniper.contrail.vlan": "100", "net.juniper.contrail.interfacegroup": "eth2" } }, { "name": "vlan-subintf-vn3", "namespace": "vlan-project", "cni-args": { "net.juniper.contrail.interfacegroup": "eth2" } } ]
잘못된 구성 1: 동일한 네트워크에서 여러 인터페이스:
apiVersion: v1 kind: Pod metadata: name: vlan100-0 namespace: vlan-project annotations: k8s.v1.cni.cncf.io/networks: | [ { "name": "vn1", "namespace": "vlan-project", "cni-args": { "net.juniper.contrail.interfacegroup": "eth1" } }, { "name": "vn1", "namespace": "vlan-project", "cni-args": { "net.juniper.contrail.vlan": "200", "net.juniper.contrail.interfacegroup": "eth1" } }, ]
잘못된 구성 2: 동일 interfacegroup
하지만 VLAN이 없는 두 개의 인터페이스
apiVersion: v1 kind: Pod metadata: name: vlan100-0 namespace: vlan-project annotations: k8s.v1.cni.cncf.io/networks: | [ { "name": "vn1", "namespace": "vlan-project", "cni-args": { "net.juniper.contrail.interfacegroup": "eth1" } }, { "name": "vn2", "namespace": "vlan-project", "cni-args": { "net.juniper.contrail.interfacegroup": "eth1" } }, ]