네트워크 연결 정의를 구성하는 방법

Red Hat Blog를 보다가 관심 가는 글이 보여서 AI번역+약간 교정해 보았습니다.
출처: https://developers.redhat.com/articles/2024/12/19/how-configure-network-attachment-definitions

Red Hat OpenShift Virtualization은 쿠버네티스 네이티브 방식으로 컨테이너와 함께 가상 머신(VM)을 실행할 수 있는 기능을 제공합니다. 이를 가능하게 하는 핵심 구성 요소 중 하나는 NetworkAttachmentDefinition (NAD)입니다. NAD는 VM에 여러 네트워크 인터페이스를 제공하여 하이브리드 연결, 가상 LAN(VLAN) 및 고성능 네트워크 시나리오를 지원합니다.

NAD는 포드 또는 가상 머신에 대한 추가 네트워크 인터페이스를 정의하는 데 사용되는 쿠버네티스 CustomResourceDefinition (CRD)입니다. OpenShift Virtualization과 통합된 Multus CNI 플러그인을 통해 이를 구현할 수 있습니다.

NAD의 주요 특징:

  • 멀티 네트워킹: 여러 네트워크를 VM에 연결할 수 있는 기능입니다.
  • 사용자 정의 네트워킹: 가상 LAN(VLAN), single root input/output virtualization(SR-IOV) 또는 MacVLAN 구성을 정의합니다.
  • 유연한 IPAM: DHCP, 고정 IP 또는 기타 방법을 사용하여 IP를 할당합니다.

OpenShift 가상화의 NAD 아키텍처

NAD가 어떻게 작동하는지 더 잘 이해하기 위해 그림 1에 표시된 대로 아키텍처를 분석해 보겠습니다.

  • Primary network : 기본 OpenShift SDN.
  • Multus CNI : 보조 네트워크와 인터페이스를 관리합니다.
  • Plug-ins : MacVLAN, SR-IOV 또는 기타 설정을 위한 특정 구성입니다.
NAD 아키텍처
그림 1: NAD 아키텍처.

NAD를 생성하고 사용하는 방법

네트워크 연결 정의를 만드는 몇 가지 예를 살펴보겠습니다.

예제 1: MacVLAN NAD 구성

이 예제에서는 VM에 MacVLAN 기반 보조 네트워크를 설정합니다. MacVLAN은 동일한 물리적 네트워크 내에서 트래픽을 분할하는 데 자주 사용됩니다.

YAML: MacVLAN NAD 구성

apiVersion: k8s.cni.cncf.io/v1
kind: NetworkAttachmentDefinition
metadata:
 name: macvlan-network
 namespace: my-namespace
spec:
 config: '{
   "cniVersion": "0.3.1",
   "type": "macvlan",
   "master": "eth0",
   "mode": "bridge",
   "ipam": {
     "type": "static",
     "addresses": [
       {
         "address": "192.168.1.100/24",
         "gateway": "192.168.1.1"
       }
     ]
   }
 }

다음 networksinterfaces 같이 VM 사양에 NAD를 추가하여 MacVLAN NAD를 VM에 연결합니다.

apiVersion: kubevirt.io/v1
kind: VirtualMachine
metadata:
 name: my-vm
 namespace: my-namespace
spec:
 template:
   spec:
     domain:
       devices:
         interfaces:
         - name: default
           masquerade: {}
         - name: macvlan-net
           bridge: {}
     networks:
     - name: default
       pod: {}
     - name: macvlan-net
       multus:
         networkName: my-namespace/macvlan-network

예제 2: SR-IOV NAD 구성

SR-IOV는 물리적 네트워크 인터페이스 컨트롤러(NIC)에서 VM으로 가상 기능(VF)을 전담하여 거의 기본 네트워크 성능을 제공합니다.

YAML: SR-IOV NAD

apiVersion: k8s.cni.cncf.io/v1
kind: NetworkAttachmentDefinition
metadata:
 name: sriov-network
 namespace: my-namespace
spec:
 config: '{
   "cniVersion": "0.3.1",
   "type": "sriov",
   "ipam": {
     "type": "host-local",
     "subnet": "192.168.2.0/24",
     "rangeStart": "192.168.2.100",
     "rangeEnd": "192.168.2.200",
     "gateway": "192.168.2.1"
   }
 }

SR-IOV NAD를 VM에 연결하고 SR-IOV 인터페이스를 포함하도록 VM 사양을 업데이트합니다.

apiVersion: kubevirt.io/v1
kind: VirtualMachine
metadata:
 name: sriov-vm
 namespace: my-namespace
spec:
 template:
   spec:
     domain:
       devices:
         interfaces:
         - name: default
           masquerade: {}
         - name: sriov-net
           bridge: {}
     networks:
     - name: default
       pod: {}
     - name: sriov-net
       multus:
         networkName: my-namespace/sriov-network

예제 3: VLAN 구성

VLAN을 사용하면 Multus와 VLAN 컨테이너 네트워크 인터페이스(CNI) 플러그인을 사용하여 네트워크를 논리적으로 분할할 수 있습니다. 

YAML: VLAN NAD 구성

apiVersion: k8s.cni.cncf.io/v1
                        kind: NetworkAttachmentDefinition
                        metadata:
                         name: vlan-network
                         namespace: my-namespace
                        spec:
                         config: '{
                           "cniVersion": "0.3.1",
                           "type": "vlan",
                           "vlanId": 100,
                           "master": "eth0",
                           "ipam": {
                             "type": "static",
                             "addresses": [
                               {
                                 "address": "10.10.1.100/24",
                                 "gateway": "10.10.1.1"
                               }
                             ]
                           }
                         }

다음과 같이 VLAN NAD를 VM에 연결합니다.

apiVersion: kubevirt.io/v1
                        kind: VirtualMachine
                        metadata:
                         name: vlan-vm
                         namespace: my-namespace
                        spec:
                         template:
                           spec:
                             domain:
                               devices:
                                 interfaces:
                                 - name: default
                                   masquerade: {}
                                 - name: vlan-net
                                   bridge: {}
                             networks:
                             - name: default
                               pod: {}
                             - name: vlan-net
                               multus:
                                 networkName: my-namespace/vlan-network

NAD를 위한 모범 사례

네임스페이스 관리, 모니터링, 검증을 포함하여 NAD를 사용하기 위한 모범 사례를 따르세요.

  1. 네임스페이스 관리: NAD가 VM과 동일한 네임스페이스에 생성되었는지 확인합니다.
  2. 모니터링: kubectl과 같은 NAD 상태를 확인하는 도구를 사용합니다.
kubectl get network-attachment-definitions -n my-namespace

3. 검증: virtctl을 사용해서 VM 네트워킹을 검증합니다.

    네트워크 성능 개선

    네트워크 연결 정의는 OpenShift Virtualization의 고급 네트워킹의 초석입니다. MacVLAN, SR-IOV 또는 VLAN을 구성하는 경우 NAD는 유연하고 고성능의 네트워크 설정을 지원합니다. 이러한 구성을 통해 Red Hat OpenShift는 VM과 컨테이너를 원활하게 함께 실행할 수 있는 강력한 플랫폼이 됩니다.

    OpenShift 가상화 에 대해 자세히 알아보세요 

    답글 남기기

    이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다

    You May Also Like