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: 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"
}
]
}
}다음 networks과 interfaces 같이 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-networkNAD를 위한 모범 사례
네임스페이스 관리, 모니터링, 검증을 포함하여 NAD를 사용하기 위한 모범 사례를 따르세요.
- 네임스페이스 관리: NAD가 VM과 동일한 네임스페이스에 생성되었는지 확인합니다.
- 모니터링:
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 가상화 에 대해 자세히 알아보세요