8.17. 가상 머신 네트워킹
8.17.1. 기본 Pod 네트워크에 대한 가상 머신 구성
masquerade
바인딩 모드를 사용하도록 네트워크 인터페이스를 구성하여 가상 머신을 기본 내부 Pod 네트워크에 연결할 수 있습니다.
8.17.1.1. 명령줄에서 가상 모드 구성
가상 모드를 사용하여 Pod IP 주소를 통해 나가는 가상 머신의 트래픽을 숨길 수 있습니다. 가상 모드에서는 NAT(Network Address Translation)를 사용하여 가상 머신을 Linux 브리지를 통해 Pod 네트워크 백엔드에 연결합니다.
가상 머신 구성 파일을 편집하여 가상 모드를 사용하도록 설정하고 트래픽이 가상 머신에 유입되도록 허용하십시오.
사전 요구 사항
- 가상 머신은 DHCP를 사용하여 IPv4 주소를 가져오도록 구성해야 합니다. 아래 예제는 DHCP를 사용하도록 구성되어 있습니다.
절차
가상 머신 구성 파일의
interfaces
스펙을 편집합니다.kind: VirtualMachine spec: domain: devices: interfaces: - name: default masquerade: {} 1 ports: 2 - port: 80 networks: - name: default pod: {}
참고포트 49152 및 49153은 libvirt 플랫폼에서 사용하도록 예약되며 이러한 포트로 들어오는 다른 모든 트래픽은 삭제됩니다.
가상 머신을 생성합니다.
$ oc create -f <vm-name>.yaml
8.17.1.2. 듀얼 스택(IPv4 및 IPv6)을 사용하여 가상 모드 구성
cloud-init를 사용하여 기본 Pod 네트워크에서 IPv6 및 IPv4를 모두 사용하도록 새 VM(가상 머신)을 구성할 수 있습니다.
가상 머신 인스턴스 구성의 Network.pod.vmIPv6NetworkCIDR
필드는 VM의 정적 IPv6 주소와 게이트웨이 IP 주소를 결정합니다. 이는 virt-launcher Pod에서 IPv6 트래픽을 가상 머신으로 라우팅하는 데 사용되며 외부적으로 사용되지 않습니다. Network.pod.vmIPv6NetworkCIDR
필드는 CIDR(Classless Inter-Domain Routing) 표기법으로 IPv6 주소 블록을 지정합니다. 기본값은 fd10:0:2::2/120
입니다. 네트워크 요구 사항에 따라 이 값을 편집할 수 있습니다.
가상 시스템이 실행 중이면 가상 시스템의 들어오고 나가는 트래픽이 virt-launcher Pod의 IPv4 주소와 고유한 IPv6 주소로 라우팅됩니다. 그런 다음 virt-launcher Pod는 IPv4 트래픽을 가상 시스템의 DHCP 주소로 라우팅하고 IPv6 트래픽을 가상 시스템의 IPv6 주소로 정적으로 설정합니다.
사전 요구 사항
- OpenShift Container Platform 클러스터는 듀얼 스택용으로 구성된 OVN-Kubernetes CNI(Container Network Interface) 네트워크 공급자를 사용해야 합니다.
절차
새 가상 시스템 구성에서
masquerade
가 있는 인터페이스를 포함하고 cloud-init를 사용하여 IPv6 주소 및 기본 게이트웨이를 구성합니다.apiVersion: kubevirt.io/v1 kind: VirtualMachine metadata: name: example-vm-ipv6 ... interfaces: - name: default masquerade: {} 1 ports: - port: 80 2 networks: - name: default pod: {} volumes: - cloudInitNoCloud: networkData: | version: 2 ethernets: eth0: dhcp4: true addresses: [ fd10:0:2::2/120 ] 3 gateway6: fd10:0:2::1 4
네임스페이스에서 가상 머신을 생성합니다.
$ oc create -f example-vm-ipv6.yaml
검증
- IPv6가 구성되었는지 확인하려면 가상 시스템을 시작하고 가상 시스템 인스턴스의 인터페이스 상태를 확인하여 IPv6 주소가 있는지 확인합니다.
$ oc get vmi <vmi-name> -o jsonpath="{.status.interfaces[*].ipAddresses}"
8.17.2. 가상 머신 노출 서비스 생성
Service
오브젝트를 사용하여 클러스터 내에서 또는 클러스터 외부에 가상 머신을 노출할 수 있습니다.
8.17.2.1. 서비스 정보
Kubernetes 서비스는 포드 집합에서 실행되는 애플리케이션을 네트워크 서비스로 노출하는 추상 방법입니다. 서비스를 사용하면 애플리케이션이 트래픽을 수신할 수 있습니다. Service
오브젝트에 spec.type
을 지정하여 다양한 방식으로 서비스를 노출할 수 있습니다.
- ClusterIP
-
클러스터 내의 내부 IP 주소에 서비스를 노출합니다.
ClusterIP
는 기본 서비스유형
입니다. - NodePort
-
클러스터에서 선택한 각 노드의 동일한 포트에 서비스를 노출합니다.
NodePort
를 사용하면 클러스터 외부에서 서비스에 액세스할 수 있습니다. - LoadBalancer
- 현재 클라우드에서 외부 로드 밸런서를 생성하고(지원되는 경우) 고정 외부 IP 주소를 서비스에 할당합니다.
8.17.2.1.1. 듀얼 스택 지원
클러스터에 대해 IPv4 및 IPv6 이중 스택 네트워킹을 사용하도록 설정한 경우 Service
개체에 spec.ipFamilyPolicy
및 spec.ipFamilies
필드를 정의하여 IPv4, IPv6 또는 둘 다 사용하는 서비스를 생성할 수 있습니다.
spec.ipFamilyPolicy
필드는 다음 값 중 하나로 설정할 수 있습니다.
- SingleStack
- 컨트롤 플레인은 처음 구성된 서비스 클러스터 IP 범위를 기반으로 서비스의 클러스터 IP 주소를 할당합니다.
- PreferDualStack
- 컨트롤 플레인은 듀얼 스택이 구성된 클러스터에서 서비스에 IPv4 및 IPv6 클러스터 IP 주소를 모두 할당합니다.
- RequireDualStack
-
이 옵션은 듀얼 스택 네트워킹이 활성화되어 있지 않은 클러스터에 실패합니다. 듀얼 스택이 구성된 클러스터의 경우 해당 동작은 값이
PreferDualStack
으로 설정된 경우와 동일합니다. 컨트롤 플레인은 IPv4 및 IPv6 주소 범위의 클러스터 IP 주소를 할당합니다.
spec.ipFamilies
필드를 다음 배열 값 중 하나로 설정하여 단일 스택에 사용할 IP 제품군을 정의하거나 이중 스택의 IP 제품군 순서를 정의할 수 있습니다.
-
[IPv4]
-
[IPv6]
-
[IPv4, IPv6]
-
[IPv6, IPv4]
8.17.2.2. 가상 머신을 서비스로 노출
클러스터 내부 또는 외부에서 실행 중인 VM(가상 머신)에 연결할 ClusterIP
,NodePort
LoadBalancer
서비스를 생성합니다.
절차
VirtualMachine
매니페스트를 편집하여 서비스 생성을 위한 라벨을 추가합니다.apiVersion: kubevirt.io/v1 kind: VirtualMachine metadata: name: vm-ephemeral namespace: example-namespace spec: running: false template: metadata: labels: special: key 1 # ...
- 1
spec.template.metadata.labels
섹션에special: key
라벨을 추가합니다.
참고가상 머신의 라벨은 Pod로 전달됩니다.
special: key
레이블은서비스
매니페스트의spec.selector
특성의 레이블과 일치해야 합니다.-
VirtualMachine
매니페스트 파일을 저장하여 변경 사항을 적용합니다. VM을 노출할
서비스
매니페스트를 생성합니다.apiVersion: v1 kind: Service metadata: name: vmservice 1 namespace: example-namespace 2 spec: externalTrafficPolicy: Cluster 3 ports: - nodePort: 30000 4 port: 27017 protocol: TCP targetPort: 22 5 selector: special: key 6 type: NodePort 7
- 1
Service
오브젝트의 이름입니다.- 2
Service
오브젝트가 있는 네임스페이스입니다. 이는VirtualMachine
매니페스트의metadata.namespace
필드와 일치해야 합니다.- 3
- 선택 사항: 노드에서 외부 IP 주소에서 수신되는 서비스 트래픽을 배포하는 방법을 지정합니다. 이는
NodePort
및LoadBalancer
서비스 유형에만 적용됩니다. 기본값은Cluster
로 트래픽을 모든 클러스터 끝점으로 균등하게 라우팅합니다. - 4
- 선택 사항: 설정하면
nodePort
값이 모든 서비스에서 고유해야 합니다. 지정하지 않으면30000
이상의 범위의 값이 동적으로 할당됩니다. - 5
- 선택 사항: 서비스에서 노출할 VM 포트입니다. 포트 목록이 VM 매니페스트에 정의된 경우 열려 있는 포트를 참조해야 합니다.
targetPort
를 지정하지 않으면포트
와 동일한 값을 사용합니다. - 6
VirtualMachine
매니페스트의spec.template.metadata.labels
스탠자에 추가한 라벨 참조입니다.- 7
- 서비스 유형입니다. 가능한 값은
ClusterIP
,NodePort
및LoadBalancer
입니다.
-
서비스
매니페스트 파일을 저장합니다. 다음 명령을 실행하여 서비스를 생성합니다.
$ oc create -f <service_name>.yaml
- VM을 시작합니다. VM이 이미 실행 중인 경우 다시 시작합니다.
검증
Service
오브젝트를 쿼리하여 사용할 수 있는지 확인합니다.$ oc get service -n example-namespace
ClusterIP
서비스의 출력 예NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE vmservice ClusterIP 172.30.3.149 <none> 27017/TCP 2m
NodePort
서비스의 출력 예NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE vmservice NodePort 172.30.232.73 <none> 27017:30000/TCP 5m
LoadBalancer
서비스의 출력 예NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE vmservice LoadBalancer 172.30.27.5 172.29.10.235,172.29.10.235 27017:31829/TCP 5s
가상 머신에 연결하는 적절한 방법을 선택합니다.
ClusterIP
서비스의 경우 서비스 IP 주소와 서비스 포트를 사용하여 클러스터 내에서 VM에 연결합니다. 예를 들면 다음과 같습니다.$ ssh fedora@172.30.3.149 -p 27017
NodePort
서비스의 경우 노드 IP 주소와 클러스터 네트워크 외부의 노드 포트를 지정하여 VM에 연결합니다. 예를 들면 다음과 같습니다.$ ssh fedora@$NODE_IP -p 30000
-
LoadBalancer
서비스의 경우vinagre
클라이언트를 사용하여 공용 IP 주소 및 포트를 사용하여 가상 머신에 연결합니다. 외부 포트는 동적으로 할당됩니다.
8.17.2.3. 추가 리소스
8.17.3. Linux 브리지 네트워크에 가상 머신 연결
Linux 브리지를 사용하여 가상 머신을 여러 네트워크에 연결할 수 있습니다. 여러 인터페이스에 대한 액세스를 사용하는 기존 워크로드가 포함된 가상 머신을 가져올 수 있습니다.
가상 머신을 추가 네트워크에 연결하려면 다음을 수행합니다.
웹 콘솔 또는 CLI에서 네임스페이스에 대한 브리지 네트워크 연결 정의를 구성합니다.
참고네트워크 연결 정의는 Pod 또는 가상 머신과 동일한 네임스페이스에 있어야 합니다.
웹 콘솔 또는 CLI를 사용하여 가상 머신을 네트워크 연결 정의에 연결합니다.
- 웹 콘솔에서 새로운 또는 기존의 가상 머신용 NIC를 생성합니다.
- CLI에서 가상 머신 구성에 네트워크 정보를 포함합니다.
8.17.3.1. OpenShift Virtualization 네트워킹 용어집
OpenShift Virtualization은 사용자 정의 리소스 및 플러그인을 사용하여 고급 네트워킹 기능을 제공합니다.
다음 용어는 OpenShift Virtualization 설명서 전체에서 사용됩니다.
- CNI(컨테이너 네트워크 인터페이스(Container Network Interface))
- 컨테이너 네트워크 연결에 중점을 둔 Cloud Native Computing Foundation 프로젝트입니다. OpenShift Virtualization에서는 CNI 플러그인을 사용하여 기본 Kubernetes 네트워킹 기능을 기반으로 빌드합니다.
- Multus
- Pod 또는 가상 머신에서 필요한 인터페이스를 사용할 수 있도록 여러 CNI가 존재할 수 있는 "메타" CNI 플러그인입니다.
- CRD(사용자 정의 리소스 정의(Custom Resource Definition))
- 사용자 정의 리소스를 정의할 수 있는 Kubernetes API 리소스 또는 CRD API 리소스를 사용하여 정의한 오브젝트입니다.
- 네트워크 연결 정의
- Pod, 가상 머신, 가상 머신 인스턴스를 하나 이상의 네트워크에 연결할 수 있는 Multus 프로젝트에서 도입한 CRD입니다.
- PXE(Preboot eXecution Environment)
- 관리자가 네트워크를 통해 서버에서 클라이언트 머신을 부팅할 수 있는 인터페이스입니다. 네트워크 부팅을 통해 운영 체제 및 기타 소프트웨어를 클라이언트에 원격으로 로드할 수 있습니다.
8.17.3.2. 네트워크 연결 정의 생성
8.17.3.2.1. 사전 요구 사항
- 모든 노드에서 Linux 브리지를 구성하고 연결해야 합니다. 자세한 내용은 노드 네트워킹 섹션을 참조하십시오.
가상 머신의 네트워크 연결 정의에는 ipam을 구성할 수 없습니다.
8.17.3.2.2. 웹 콘솔에서 Linux 브리지 네트워크 연결 정의 생성
네트워크 관리자는 네트워크 연결 정의를 생성하여 Pod 및 가상 머신에 계층 2 네트워킹을 제공할 수 있습니다.
절차
-
웹 콘솔에서 네트워킹
네트워크 연결 정의를 클릭합니다. 네트워크 연결 정의 생성을 클릭합니다.
참고네트워크 연결 정의는 Pod 또는 가상 머신과 동일한 네임스페이스에 있어야 합니다.
- 고유한 이름과 선택적 설명을 입력합니다.
- 네트워크 유형 목록을 클릭하고 CNV Linux 브리지를 선택합니다.
- 브리지 이름 필드에 브리지 이름을 입력합니다.
- 선택 사항: 리소스에 VLAN ID가 구성된 경우 VLAN 태그 번호 필드에 ID 번호를 입력합니다.
- 선택 사항: MAC Spoof Check 를 선택하여 MAC 스푸핑 필터링을 활성화합니다. 이 기능은 단일 MAC 주소만 Pod를 종료할 수 있도록 허용하여 MAC 스푸핑 공격에 대한 보안을 제공합니다.
생성을 클릭합니다.
참고Linux 브리지 네트워크 연결 정의는 가상 머신을 VLAN에 연결하는 가장 효율적인 방법입니다.
8.17.3.2.3. CLI에서 Linux 브리지 네트워크 연결 정의 생성
네트워크 관리자는 cnv-bridge
유형의 네트워크 연결 정의를 구성하여 Pod 및 가상 머신에 계층 2 네트워킹을 제공할 수 있습니다.
사전 요구 사항
-
노드는 nftables를 지원해야 하며 MAC 스푸핑 검사를 사용하려면
nft
바이너리를 배포해야 합니다.
절차
- 가상 머신과 동일한 네임스페이스에 네트워크 연결 정의를 생성합니다.
다음 예와 같이 네트워크 연결 정의에 가상 머신을 추가합니다.
apiVersion: "k8s.cni.cncf.io/v1" kind: NetworkAttachmentDefinition metadata: name: <bridge-network> 1 annotations: k8s.v1.cni.cncf.io/resourceName: bridge.network.kubevirt.io/<bridge-interface> 2 spec: config: '{ "cniVersion": "0.3.1", "name": "<bridge-network>", 3 "type": "cnv-bridge", 4 "bridge": "<bridge-interface>", 5 "macspoofchk": true, 6 "vlan": 1 7 }'
- 1
NetworkAttachmentDefinition
개체의 이름입니다.- 2
- 선택 사항: 노드 선택에 대한 주석 키-값 쌍입니다. 여기서
bridge-interface
는 일부 노드에 구성된 브릿지의 이름입니다. 네트워크 연결 정의에 이 주석을 추가하면bridge-interface
브리지가 연결된 노드에서만 가상 머신 인스턴스가 실행됩니다. - 3
- 구성의 이름입니다. 구성 이름이 네트워크 연결 정의의
name
값과 일치하는 것이 좋습니다. - 4
- 이 네트워크 연결 정의에 대한 네트워크를 제공하는 CNI(컨테이너 네트워크 인터페이스) 플러그인의 실제 이름입니다. 다른 CNI를 사용하려는 경우를 제외하고 이 필드를 변경하지 마십시오.
- 5
- 노드에 구성된 Linux 브리지의 이름입니다.
- 6
- 선택 사항: MAC 스푸핑 검사를 활성화하는 플래그입니다.
true
로 설정하면 Pod 또는 게스트 인터페이스의 MAC 주소를 변경할 수 없습니다. 이 속성은 단일 MAC 주소만 Pod를 종료할 수 있도록 허용하여 MAC 스푸핑 공격에 대한 보안을 제공합니다. - 7
- 선택 사항: VLAN 태그입니다. 노드 네트워크 구성 정책에 추가 VLAN 구성이 필요하지 않습니다.
참고Linux 브리지 네트워크 연결 정의는 가상 머신을 VLAN에 연결하는 가장 효율적인 방법입니다.
네트워크 연결 정의를 만듭니다.
$ oc create -f <network-attachment-definition.yaml> 1
- 1
- 여기서
<network-attachment-definition.yaml>
은 네트워크 연결 정의 매니페스트의 파일 이름입니다.
검증
다음 명령을 실행하여 네트워크 연결 정의가 생성되었는지 확인합니다.
$ oc get network-attachment-definition <bridge-network>
8.17.3.3. 추가 네트워크에 가상 머신 연결
8.17.3.3.1. 웹 콘솔에서 가상 머신의 NIC를 생성
웹 콘솔에서 추가 NIC를 생성하고 가상 머신에 연결합니다.
절차
-
OpenShift Virtualization 콘솔의 올바른 프로젝트에서 사이드 메뉴에 있는 워크로드
가상화를 클릭합니다. - 가상 머신 탭을 클릭합니다.
- 가상 머신을 선택하여 가상 머신 개요 화면을 엽니다.
- 네트워크 인터페이스를 클릭하여 가상 머신에 이미 연결된 NIC를 표시합니다.
- 네트워크 인터페이스 추가를 클릭하여 목록에 새 슬롯을 만듭니다.
- 네트워크 드롭다운 목록을 사용하여 추가 네트워크에 대한 네트워크 연결 정의를 선택합니다.
- 새 NIC의 이름, 모델, 유형, MAC 주소를 입력합니다.
- Add(추가 )를 클릭하여 NIC를 저장하고 가상 머신에 연결합니다.
8.17.3.3.2. 네트워킹 필드
이름 | 설명 |
---|---|
이름 | 네트워크 인터페이스 컨트롤러의 이름입니다. |
모델 | 네트워크 인터페이스 컨트롤러의 모델을 나타냅니다. 지원되는 값은 e1000e 및 virtio입니다. |
네트워크 | 사용 가능한 네트워크 연결 정의 목록입니다. |
유형 |
사용 가능한 바인딩 방법 목록입니다. 기본 Pod 네트워크의 경우 권장되는 유일한 바인딩 방법은 |
MAC 주소 | 네트워크 인터페이스 컨트롤러의 MAC 주소입니다. MAC 주소를 지정하지 않으면 주소가 자동으로 할당됩니다. |
8.17.3.3.3. CLI의 추가 네트워크에 가상 머신 연결
브리지 인터페이스를 추가하고 가상 머신 구성에서 네트워크 연결 정의를 지정하여 가상 머신을 추가 네트워크에 연결합니다.
이 절차에서는 YAML 파일을 사용하여 구성을 편집하고 업데이트된 파일을 클러스터에 적용하는 방법을 시연합니다. 또는 oc edit <object> <name>
명령을 사용하여 기존 가상 머신을 편집할 수도 있습니다.
사전 요구 사항
- 구성을 편집하기 전에 가상 머신을 종료합니다. 실행 중인 가상 머신을 편집하는 경우 변경 사항을 적용하려면 가상 머신을 다시 시작해야 합니다.
절차
- 브리지 네트워크에 연결하려는 가상 머신 구성을 생성하거나 편집합니다.
spec.template.spec.domain.devices.interfaces
목록에 브리지 인터페이스를 추가하고spec.template.spec.networks
목록에 네트워크 연결 정의를 추가합니다. 이 예제에서는a-bridge-network
네트워크 연결 정의에 연결하는bridge-net
브리지 인터페이스를 추가합니다.apiVersion: kubevirt.io/v1 kind: VirtualMachine metadata: name: <example-vm> spec: template: spec: domain: devices: interfaces: - masquerade: {} name: <default> - bridge: {} name: <bridge-net> 1 ... networks: - name: <default> pod: {} - name: <bridge-net> 2 multus: networkName: <network-namespace>/<a-bridge-network> 3 ...
- 1
- 브리지 인터페이스의 이름입니다.
- 2
- 네트워크의 이름입니다. 이 값은 해당
spec.template.spec.domain.devices.interfaces 항목의
name
값과 일치해야 합니다. - 3
- 네트워크 연결 정의의 이름, 존재하는 네임스페이스가 접두사로 지정됩니다. 네임스페이스는
default
네임스페이스 또는 VM을 생성할 동일한 네임스페이스여야 합니다. 이 경우multus
가 사용됩니다. Multus는 Pod 또는 가상 머신에서 필요한 인터페이스를 사용할 수 있도록 여러 CNI가 존재할 수 있는 클라우드 네트워크 인터페이스(CNI) 플러그인입니다.
설정을 적용합니다.
$ oc apply -f <example-vm.yaml>
- 선택 사항: 실행 중인 가상 머신을 편집한 경우 변경 사항을 적용하려면 가상 머신을 다시 시작해야 합니다.
8.17.3.4. 추가 리소스
8.17.4. SR-IOV 네트워크에 가상 머신 연결
다음 단계를 수행하여 VM(가상 머신)을 SR-IOV(Single Root I/O Virtualization) 네트워크에 연결할 수 있습니다.
- SR-IOV 네트워크 장치를 구성합니다.
- SR-IOV 네트워크를 구성합니다.
- VM을 SR-IOV 네트워크에 연결합니다.
8.17.4.1. 사전 요구 사항
- SR-IOV Network Operator가 설치되어 있어야 합니다.
8.17.4.2. SR-IOV 네트워크 장치 구성
SR-IOV Network Operator는 SriovNetworkNodePolicy.sriovnetwork.openshift.io
CustomResourceDefinition을 OpenShift Container Platform에 추가합니다. SriovNetworkNodePolicy CR(사용자 정의 리소스)을 만들어 SR-IOV 네트워크 장치를 구성할 수 있습니다.
SriovNetworkNodePolicy
오브젝트에 지정된 구성을 적용하면 SR-IOV Operator가 노드를 비우고 경우에 따라 노드를 재부팅할 수 있습니다.
구성 변경 사항을 적용하는 데 몇 분이 걸릴 수 있습니다.
사전 요구 사항
-
OpenShift CLI(
oc
)를 설치합니다. -
cluster-admin
역할의 사용자로 클러스터에 액세스할 수 있어야 합니다. - SR-IOV Network Operator가 설치되어 있습니다.
- 비운 노드에서 제거된 워크로드를 처리하기 위해 클러스터에 사용 가능한 노드가 충분합니다.
- SR-IOV 네트워크 장치 구성에 대한 컨트롤 플레인 노드를 선택하지 않았습니다.
절차
SriovNetworkNodePolicy
오브젝트를 생성한 후 YAML을<name>-sriov-node-network.yaml
파일에 저장합니다.<name>
을 이 구성의 이름으로 바꿉니다.apiVersion: sriovnetwork.openshift.io/v1 kind: SriovNetworkNodePolicy metadata: name: <name> 1 namespace: openshift-sriov-network-operator 2 spec: resourceName: <sriov_resource_name> 3 nodeSelector: feature.node.kubernetes.io/network-sriov.capable: "true" 4 priority: <priority> 5 mtu: <mtu> 6 numVfs: <num> 7 nicSelector: 8 vendor: "<vendor_code>" 9 deviceID: "<device_id>" 10 pfNames: ["<pf_name>", ...] 11 rootDevices: ["<pci_bus_id>", "..."] 12 deviceType: vfio-pci 13 isRdma: false 14
- 1
- CR 오브젝트의 이름을 지정합니다.
- 2
- SR-IOV Operator가 설치된 네임스페이스를 지정합니다.
- 3
- SR-IOV 장치 플러그인의 리소스 이름을 지정합니다. 리소스 이름에 대해 여러
SriovNetworkNodePolicy
오브젝트를 생성할 수 있습니다. - 4
- 구성할 노드를 선택하려면 노드 선택기를 지정합니다. 선택한 노드의 SR-IOV 네트워크 장치만 구성됩니다. SR-IOV CNI(Container Network Interface) 플러그인 및 장치 플러그인은 선택한 노드에만 배포됩니다.
- 5
- 선택 사항:
0
에서99
사이의 정수 값을 지정합니다. 숫자가 작을수록 우선 순위가 높아지므로 우선 순위10
은 우선 순위99
보다 높습니다. 기본값은99
입니다. - 6
- 선택 사항: 가상 기능의 최대 전송 단위(MTU) 값을 지정합니다. 최대 MTU 값은 NIC 모델마다 다를 수 있습니다.
- 7
- SR-IOV 물리적 네트워크 장치에 생성할 가상 기능(VF) 수를 지정합니다. Intel NIC(Network Interface Controller)의 경우 VF 수는 장치에서 지원하는 총 VF보다 클 수 없습니다. Mellanox NIC의 경우 VF 수는
128
보다 클 수 없습니다. - 8
nicSelector
매핑은 Operator가 구성할 이더넷 장치를 선택합니다. 모든 매개변수에 값을 지정할 필요는 없습니다. 의도하지 않게 이더넷 장치를 선택할 가능성을 최소화하기 위해 이더넷 어댑터를 충분히 정밀하게 식별하는 것이 좋습니다.rootDevices
를 지정하면vendor
,deviceID
또는pfNames
의 값도 지정해야 합니다.pfNames
와rootDevices
를 동시에 지정하는 경우 동일한 장치를 가리키는지 확인하십시오.- 9
- 선택 사항: SR-IOV 네트워크 장치의 공급업체 16진수 코드를 지정합니다. 허용되는 유일한 값은
8086
또는15b3
입니다. - 10
- 선택 사항: SR-IOV 네트워크 장치의 장치 16진수 코드를 지정합니다. 허용되는 값은
158b
,1015
,1017
입니다. - 11
- 선택 사항: 이 매개 변수는 이더넷 장치에 대해 하나 이상의 물리적 기능(PF) 이름으로 이루어진 배열을 허용합니다.
- 12
- 이 매개변수는 이더넷 장치의 물리적 기능을 위해 하나 이상의 PCI 버스 주소 배열을 허용합니다. 다음 형식으로 주소를 입력합니다.
0000:02:00.1
. - 13
vfio-pci
드라이버 유형은 OpenShift Virtualization의 가상 기능에 필요합니다.- 14
- 선택 사항: RDMA(원격 직접 메모리 액세스) 모드를 활성화할지 여부를 지정합니다. Mellanox 카드의 경우
isRdma
를false
로 설정합니다. 기본값은false
입니다.
참고isRDMA
플래그가true
로 설정된 경우 RDMA 가능 VF를 일반 네트워크 장치로 계속 사용할 수 있습니다. 어느 모드에서나 장치를 사용할 수 있습니다.-
선택 사항:
SriovNetworkNodePolicy.Spec.NodeSelector
로 SR-IOV 가능 클러스터 노드에 레이블을 지정하지 않은 경우 레이블을 지정합니다. 노드 레이블링에 대한 자세한 내용은 "노드에서 라벨을 업데이트하는 방법"을 참조하십시오. SriovNetworkNodePolicy
오브젝트를 생성합니다.$ oc create -f <name>-sriov-node-network.yaml
<name>
은 이 구성의 이름을 지정합니다.구성 업데이트를 적용하면
sriov-network-operator
네임스페이스의 모든 Pod가Running
상태로 전환됩니다.SR-IOV 네트워크 장치가 구성되어 있는지 확인하려면 다음 명령을 입력합니다.
<node_name>
을 방금 구성한 SR-IOV 네트워크 장치가 있는 노드 이름으로 바꿉니다.$ oc get sriovnetworknodestates -n openshift-sriov-network-operator <node_name> -o jsonpath='{.status.syncStatus}'
8.17.4.3. SR-IOV 추가 네트워크 구성
SriovNetwork
오브젝트를 생성하여 SR-IOV 하드웨어를 사용하는 추가 네트워크를 구성할 수 있습니다.
SriovNetwork
오브젝트를 생성하면 SR-IOV Network Operator가 NetworkAttachmentDefinition
오브젝트를 자동으로 생성합니다.
SriovNetwork
오브젝트가 Pod 또는 가상 머신에 running
상태의 경우 수정하거나 삭제하지 마십시오.
사전 요구 사항
-
OpenShift CLI(
oc
)를 설치합니다. -
cluster-admin
권한이 있는 사용자로 로그인합니다.
절차
-
다음
SriovNetwork
오브젝트를 생성한 후 YAML을<name>-sriov-network.yaml
파일에 저장합니다.<name>
을 이 추가 네트워크의 이름으로 변경합니다.
apiVersion: sriovnetwork.openshift.io/v1 kind: SriovNetwork metadata: name: <name> 1 namespace: openshift-sriov-network-operator 2 spec: resourceName: <sriov_resource_name> 3 networkNamespace: <target_namespace> 4 vlan: <vlan> 5 spoofChk: "<spoof_check>" 6 linkState: <link_state> 7 maxTxRate: <max_tx_rate> 8 minTxRate: <min_rx_rate> 9 vlanQoS: <vlan_qos> 10 trust: "<trust_vf>" 11 capabilities: <capabilities> 12
- 1
<name>
을 오브젝트의 이름으로 바꿉니다. SR-IOV Network Operator는 동일한 이름으로NetworkAttachmentDefinition
오브젝트를 생성합니다.- 2
- SR-IOV Network Operator가 설치된 네임스페이스를 지정합니다.
- 3
<sriov_resource_name>
을 이 추가 네트워크에 대한 SR-IOV 하드웨어를 정의하는SriovNetworkNodePolicy
오브젝트의spec.resourceName
매개변수 값으로 바꿉니다.- 4
<target_namespace>
를 SriovNetwork의 대상 네임스페이스로 바꿉니다. 대상 네임스페이스의 pod 또는 가상 머신만 SriovNetwork에 연결할 수 있습니다.- 5
- 선택 사항:
<vlan>
을 추가 네트워크의 VLAN(Virtual LAN) ID로 바꿉니다. 정수 값은0
에서4095
사이여야 합니다. 기본값은0
입니다. - 6
- 선택 사항:
<spoof_check>
를 VF의 스푸핑 검사 모드로 바꿉니다. 허용되는 값은 문자열"on"
및"off"
입니다.중요SR-IOV Network Operator가 지정한 값을 따옴표로 묶거나 CR을 거부해야 합니다.
- 7
- 선택 사항:
<link_state>
를 VF(가상 기능)의 링크 상태로 바꿉니다. 허용되는 값은enable
,disable
및auto
입니다. - 8
- 선택 사항: VF의 경우
<max_tx_rate>
를 최대 전송 속도(Mbps)로 바꿉니다. - 9
- 선택 사항: VF의 경우
<min_tx_rate>
를 최소 전송 속도(Mbps)로 바꿉니다. 이 값은 항상 최대 전송 속도보다 작거나 같아야 합니다.참고인텔 NIC는
minTxRate
매개변수를 지원하지 않습니다. 자세한 내용은 BZ#1772847에서 참조하십시오. - 10
- 선택 사항:
<vlan_qos>
를 VF의 IEEE 802.1p 우선 순위 수준으로 바꿉니다. 기본값은0
입니다. - 11
- 선택 사항:
<trust_vf>
를 VF의 신뢰 모드로 바꿉니다. 허용되는 값은 문자열"on"
및"off"
입니다.중요SR-IOV Network Operator가 지정한 값을 따옴표로 묶거나 CR을 거부해야 합니다.
- 12
- 선택 사항:
<capabilities>
를 이 네트워크에 구성할 수 있는 기능으로 바꿉니다.
오브젝트를 생성하려면 다음 명령을 입력합니다.
<name>
을 이 추가 네트워크의 이름으로 변경합니다.$ oc create -f <name>-sriov-network.yaml
선택 사항: 이전 단계에서 생성한
SriovNetwork
오브젝트와 연결된NetworkAttachmentDefinition
오브젝트가 존재하는지 확인하려면 다음 명령을 입력합니다.<namespace>
를SriovNetwork
오브젝트에 지정한 네임스페이스로 바꿉니다.$ oc get net-attach-def -n <namespace>
8.17.4.4. SR-IOV 네트워크에 가상 머신 연결
VM 구성에 네트워크 세부 정보를 포함하여 VM(가상 머신)을 SR-IOV 네트워크에 연결할 수 있습니다.
절차
VM 구성의
spec.domain.devices.interfaces
및spec.networks
에 SR-IOV 네트워크 세부 정보를 포함합니다.kind: VirtualMachine ... spec: domain: devices: interfaces: - name: <default> 1 masquerade: {} 2 - name: <nic1> 3 sriov: {} networks: - name: <default> 4 pod: {} - name: <nic1> 5 multus: networkName: <sriov-network> 6 ...
가상 머신 구성을 적용합니다.
$ oc apply -f <vm-sriov.yaml> 1
- 1
- 가상 머신 YAML 파일의 이름입니다.
8.17.5. 가상 머신용 IP 주소 구성
가상 머신에 대해 동적으로 또는 정적으로 프로비저닝된 IP 주소를 구성할 수 있습니다.
사전 요구 사항
- 가상 머신은 외부 네트워크에 연결되어 있어야 합니다.
- 가상 시스템의 동적 IP를 구성하려면 추가 네트워크에서 DHCP 서버를 사용할 수 있어야 합니다.
8.17.5.1. cloud-init를 사용하여 새 가상 머신의 IP 주소 구성
cloud-init를 사용하여 가상 머신을 생성할 때 IP 주소를 구성할 수 있습니다. IP 주소는 동적으로 또는 정적으로 프로비저닝될 수 있습니다.
절차
가상 머신을 구성하고 가상 머신 구성의
spec.volumes.cloudInitNoCloud.networkData
필드에 cloud-init 네트워크 세부 정보를 포함합니다.동적 IP를 구성하려면 인터페이스 이름과
dhcp4
부울을 지정합니다.kind: VirtualMachine spec: ... volumes: - cloudInitNoCloud: networkData: | version: 2 ethernets: eth1: 1 dhcp4: true 2
고정 IP를 구성하려면 인터페이스 이름과 IP 주소를 지정합니다.
kind: VirtualMachine spec: ... volumes: - cloudInitNoCloud: networkData: | version: 2 ethernets: eth1: 1 addresses: - 10.10.10.14/24 2
8.17.6. 가상 머신에서 NIC의 IP 주소 보기
웹 콘솔 또는 oc
클라이언트를 사용하여 NIC(네트워크 인터페이스 컨트롤러)의 IP 주소를 볼 수 있습니다. QEMU 게스트 에이전트는 가상 머신의 보조 네트워크에 대한 추가 정보를 표시합니다.
8.17.6.1. 사전 요구 사항
- 가상 머신에 QEMU 게스트 에이전트를 설치합니다.
8.17.6.2. CLI에서 가상 머신 인터페이스의 IP 주소 보기
네트워크 인터페이스 구성은 oc describe vmi <vmi_name>
명령에 포함되어 있습니다.
가상 머신에서 ip addr
을 실행하거나 oc get vmi <vmi_name> -o yaml
을 실행하여 IP 주소 정보를 볼 수도 있습니다.
절차
oc describe
명령을 사용하여 가상 머신 인터페이스 구성을 표시합니다.$ oc describe vmi <vmi_name>
출력 예
... Interfaces: Interface Name: eth0 Ip Address: 10.244.0.37/24 Ip Addresses: 10.244.0.37/24 fe80::858:aff:fef4:25/64 Mac: 0a:58:0a:f4:00:25 Name: default Interface Name: v2 Ip Address: 1.1.1.7/24 Ip Addresses: 1.1.1.7/24 fe80::f4d9:70ff:fe13:9089/64 Mac: f6:d9:70:13:90:89 Interface Name: v1 Ip Address: 1.1.1.1/24 Ip Addresses: 1.1.1.1/24 1.1.1.2/24 1.1.1.4/24 2001:de7:0:f101::1/64 2001:db8:0:f101::1/64 fe80::1420:84ff:fe10:17aa/64 Mac: 16:20:84:10:17:aa
8.17.6.3. 웹 콘솔에서 가상 머신 인터페이스의 IP 주소 보기
가상 머신의 가상 머신 개요 화면에 IP 정보를 표시합니다.
절차
-
OpenShift Virtualization 콘솔의 사이드 메뉴에서 워크로드
가상화를 클릭합니다. - 가상 머신 탭을 클릭합니다.
- 가상 머신 이름을 선택하여 가상 머신 개요 화면을 엽니다.
연결된 각 NIC에 대한 정보는 IP 주소 아래에 표시됩니다.
8.17.7. 가상 머신의 MAC 주소 풀 사용
KubeMacPool 구성 요소는 네임스페이스의 가상 머신 NIC에 대한 MAC 주소 풀 서비스를 제공합니다.
8.17.7.1. About KubeMacPool
KubeMacPool은 네임스페이스당 MAC 주소 풀을 제공하고 풀의 가상 머신 NIC에 MAC 주소를 할당합니다. 이렇게 하면 다른 가상 머신의 MAC 주소와 충돌하지 않는 고유한 MAC 주소가 NIC에 할당됩니다.
해당 가상 머신에서 생성된 가상 머신 인스턴스에서는 재부팅 시 할당되는 MAC 주소가 유지됩니다.
KubeMacPool은 가상 머신과 독립적으로 생성된 가상 머신 인스턴스는 처리하지 않습니다.
OpenShift Virtualization을 설치할 때 KubeMacPool은 기본적으로 활성화됩니다. 네임스페이스에 mutatevirtualmachines.kubemacpool.io=ignore
레이블을 추가하여 네임스페이스의 MAC 주소 풀을 비활성화합니다. 레이블을 제거하여 네임스페이스에 대해 KubeMacPool을 다시 활성화합니다.
8.17.7.2. CLI에서 네임스페이스의 MAC 주소 풀 비활성화
mutatevirtualmachines.kubemacpool.io=allocate
레이블을 네임스페이스에 추가하여 네임스페이스에서 가상 머신의 MAC 주소 풀을 비활성화합니다.
절차
mutatevirtualmachines.kubemacpool.io=ignore
레이블을 네임스페이스에 추가합니다. 다음 예제에서는<namespace1>
및<namespace2>
네임스페이스에 KubeMacPool 라벨을 추가합니다.$ oc label namespace <namespace1> <namespace2> mutatevirtualmachines.kubemacpool.io=ignore
8.17.7.3. CLI에서 네임스페이스의 MAC 주소 풀을 다시 활성화
네임스페이스에 대해 KubeMacPool을 비활성화하고 다시 활성화하려면 네임스페이스에서 mutatevirtualmachines.kubemacpool.io=ignore
레이블을 제거합니다.
이전 버전의 OpenShift Virtualization에서는 mutatevirtualmachines.kubemacpool.io=allocate
레이블을 사용하여 네임스페이스에 KubeMacPool을 활성화했습니다. 이는 여전히 지원되지만 KubeMacPool의 중복은 기본적으로 활성화되어 있습니다.
절차
네임스페이스에서 KubeMacPool 라벨을 제거합니다. 다음 예제에서는
<namespace1>
및<namespace2>
네임스페이스에 KubeMacPool을 다시 사용하도록 설정합니다.$ oc label namespace <namespace1> <namespace2> mutatevirtualmachines.kubemacpool.io-