가상 인터페이스에서 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-vnIIP(상위 인터페이스) -
VMI, 에서 eth1.100용
subitf-vnIIP(하위 인터페이스)
구성 사용 사례
이 섹션에서는 서로 다른 유효하고 잘못된 상위 및 하위 인터페이스 구성의 예를 제공합니다.
유효한 구성
잘못된 구성
유효한 구성 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"
}
},
]