12.2. 노드 네트워크 구성 업데이트
NodeNetworkConfigurationPolicy
매니페스트를 클러스터에 적용하여 노드 네트워크 구성을 업데이트(예: 노드에서 인터페이스 추가 또는 제거)할 수 있습니다.
12.2.1. nmstate 정보
OpenShift Virtualization에서는 nmstate
를 사용하여 노드 네트워크의 상태를 보고하고 구성합니다. 이를 통해 단일 구성 매니페스트를 클러스터에 적용하여(예: 모든 노드에서 Linux 브리지 생성) 네트워크 정책 구성을 수정할 수 있습니다.
노드 네트워킹은 다음 오브젝트에서 모니터링하고 업데이트합니다.
NodeNetworkState
- 해당 노드의 네트워크 상태를 보고합니다.
NodeNetworkConfigurationPolicy
-
노드에서 요청된 네트워크 구성을 설명합니다.
NodeNetworkConfigurationPolicy
매니페스트를 클러스터에 적용하는 방식으로 인터페이스 추가 및 제거를 포함하여 노드 네트워크 구성을 업데이트합니다. NodeNetworkConfigurationEnactment
- 각 노드에 적용된 네트워크 정책을 보고합니다.
OpenShift Virtualization에서는 다음과 같은 nmstate 인터페이스 유형을 사용할 수 있습니다.
- Linux 브리지
- VLAN
- 본딩
- 이더넷
OpenShift Container Platform 클러스터에서 OVN-Kubernetes를 기본 CNI(Container Network Interface) 공급자로 사용하는 경우, OVN-Kubernetes의 호스트 네트워크 토폴로지 변경으로 인해 호스트의 기본 인터페이스에 Linux 브리지 또는 본딩을 연결할 수 없습니다. 해결 방법으로 호스트에 연결된 보조 네트워크 인터페이스를 사용하거나 OpenShift SDN 기본 CNI 공급자로 전환할 수 있습니다.
12.2.2. 노드에서 인터페이스 만들기
NodeNetworkConfigurationPolicy
매니페스트를 클러스터에 적용하여 클러스터의 노드에서 인터페이스를 만듭니다. 매니페스트는 요청된 인터페이스 구성을 자세히 설명합니다.
기본적으로 매니페스트는 클러스터의 모든 노드에 적용됩니다. 특정 노드에 인터페이스를 추가하려면 spec: nodeSelector
매개변수와 노드 선택기에 적합한 <key>:<value>
를 추가합니다.
절차
NodeNetworkConfigurationPolicy
매니페스트를 생성합니다. 다음 예제에서는 모든 작업자 노드에서 Linux 브리지를 구성합니다.apiVersion: nmstate.io/v1beta1 kind: NodeNetworkConfigurationPolicy metadata: name: <br1-eth1-policy> 1 spec: nodeSelector: 2 node-role.kubernetes.io/worker: "" 3 desiredState: interfaces: - name: br1 description: Linux bridge with eth1 as a port 4 type: linux-bridge state: up ipv4: dhcp: true enabled: true bridge: options: stp: enabled: false port: - name: eth1
노드 네트워크 정책을 생성합니다.
$ oc apply -f <br1-eth1-policy.yaml> 1
- 1
- 노드 네트워크 구성 정책 매니페스트의 파일 이름입니다.
추가 리소스
12.2.3. 노드에 노드 네트워크 정책 업데이트 확인
NodeNetworkConfigurationPolicy
매니페스트는 클러스터의 노드에 대해 요청된 네트워크 구성을 설명합니다. 노드 네트워크 정책에는 요청된 네트워크 구성과 클러스터 전체에 대한 정책 실행 상태가 포함됩니다.
노드 네트워크 정책을 적용하면 클러스터의 모든 노드에 대해 NodeNetworkConfigurationEnactment
오브젝트가 생성됩니다. 노드 네트워크 구성 시행은 해당 노드에서 정책의 실행 상태를 나타내는 읽기 전용 오브젝트입니다. 정책이 노드에 적용되지 않으면 문제 해결을 위해 해당 노드에 대한 시행에 역추적이 포함됩니다.
절차
정책이 클러스터에 적용되었는지 확인하려면 정책과 해당 상태를 나열합니다.
$ oc get nncp
선택 사항: 정책을 구성하는 데 예상보다 오래 걸리는 경우 특정 정책의 요청된 상태 및 상태 조건을 검사할 수 있습니다.
$ oc get nncp <policy> -o yaml
선택 사항: 모든 노드에서 정책을 구성하는 데 예상보다 오래 걸리는 경우 클러스터의 시행 상태를 나열할 수 있습니다.
$ oc get nnce
선택 사항: 실패한 구성에 대한 오류 보고를 포함하여 특정 시행의 구성을 보려면 다음을 수행합니다.
$ oc get nnce <node>.<policy> -o yaml
12.2.4. 노드에서 인터페이스 제거
NodeNetworkConfigurationPolicy
오브젝트를 편집하고 인터페이스의 state
를 없음
으로 설정하여 클러스터의 1개 이상의 노드에서 인터페이스를 제거할 수 있습니다.
노드에서 인터페이스를 제거해도 노드 네트워크 구성이 이전 상태로 자동 복원되지 않습니다. 이전 상태를 복원하려면 정책에서 노드 네트워크 구성을 정의해야 합니다.
브리지 또는 본딩 인터페이스를 제거하면 이전에 해당 브릿지 또는 본딩 인터페이스에 연결되었거나 종속되었던 클러스터의 모든 노드 NIC가 down
상태가 되어 연결할 수 없습니다. 연결 손실을 방지하기 위해, 노드 NIC를 동일한 정책으로 구성하여 DHCP 또는 고정 IP 주소의 상태를 up
으로 구성합니다.
인터페이스를 추가한 노드 네트워크 정책을 삭제해도 노드의 정책 구성은 변경되지 않습니다. NodeNetworkConfigurationPolicy
는 클러스터의 오브젝트이지만 요청된 구성만 나타냅니다.
마찬가지로 인터페이스를 제거해도 정책은 삭제되지 않습니다.
절차
인터페이스를 생성하는 데 사용되는
NodeNetworkConfigurationPolicy
매니페스트를 업데이트합니다. 다음 예에서는 Linux 브릿지를 제거한 후 연결이 손실되지 않도록 DHCP로eth1
NIC를 구성합니다.apiVersion: nmstate.io/v1beta1 kind: NodeNetworkConfigurationPolicy metadata: name: <br1-eth1-policy> 1 spec: nodeSelector: 2 node-role.kubernetes.io/worker: "" 3 desiredState: interfaces: - name: br1 type: linux-bridge state: absent 4 - name: eth1 5 type: ethernet 6 state: up 7 ipv4: dhcp: true 8 enabled: true 9
- 1
- 정책 이름입니다.
- 2
- 선택 사항:
nodeSelector
매개변수를 포함하지 않으면 정책이 클러스터의 모든 노드에 적용됩니다. - 3
- 이 예제에서는
node-role.kubernetes.io/worker: ""
노드 선택기를 사용하여 클러스터의 모든 작업자 노드를 선택합니다. - 4
absent
상태로 변경하면 인터페이스가 제거됩니다.- 5
- 브리지 인터페이스에서 연결을 해제할 인터페이스의 이름입니다.
- 6
- 인터페이스 유형입니다. 이 예제에서는 이더넷 네트워킹 인터페이스를 생성합니다.
- 7
- 인터페이스에 요청되는 상태입니다.
- 8
- 선택 사항:
dhcp
를 사용하지 않는 경우 고정 IP를 설정하거나 IP 주소 없이 인터페이스를 종료할 수 있습니다. - 9
- 이 예제에서
ipv4
를 활성화합니다.
노드에서 정책을 업데이트하고 인터페이스를 제거합니다.
$ oc apply -f <br1-eth1-policy.yaml> 1
- 1
- 정책 매니페스트의 파일 이름입니다.
12.2.5. 다양한 인터페이스에 대한 예제 정책 구성
12.2.5.1. 예제: Linux 브리지 인터페이스 노드 네트워크 구성 정책
NodeNetworkConfigurationPolicy
매니페스트를 클러스터에 적용하여 클러스터의 노드에서 Linux 브리지 인터페이스를 만듭니다.
다음 YAML 파일은 Linux 브리지 인터페이스의 매니페스트 예제입니다. 여기에는 해당 정보로 교체해야 하는 샘플 값이 포함되어 있습니다.
apiVersion: nmstate.io/v1beta1 kind: NodeNetworkConfigurationPolicy metadata: name: br1-eth1-policy 1 spec: nodeSelector: 2 kubernetes.io/hostname: <node01> 3 desiredState: interfaces: - name: br1 4 description: Linux bridge with eth1 as a port 5 type: linux-bridge 6 state: up 7 ipv4: dhcp: true 8 enabled: true 9 bridge: options: stp: enabled: false 10 port: - name: eth1 11
- 1
- 정책 이름입니다.
- 2
- 선택 사항:
nodeSelector
매개변수를 포함하지 않으면 정책이 클러스터의 모든 노드에 적용됩니다. - 3
- 이 예제에서는
hostname
노드 선택기를 사용합니다. - 4
- 인터페이스 이름입니다.
- 5
- 선택 사항: 사람이 읽을 수 있는 인터페이스 설명입니다.
- 6
- 인터페이스 유형입니다. 이 예제에서는 브리지를 만듭니다.
- 7
- 생성 후 인터페이스에 요청되는 상태입니다.
- 8
- 선택 사항:
dhcp
를 사용하지 않는 경우 고정 IP를 설정하거나 IP 주소 없이 인터페이스를 종료할 수 있습니다. - 9
- 이 예제에서
ipv4
를 활성화합니다. - 10
- 이 예제에서
stp
를 비활성화합니다. - 11
- 브리지가 연결되는 노드 NIC입니다.
12.2.5.2. 예제: VLAN 인터페이스 노드 네트워크 구성 정책
NodeNetworkConfigurationPolicy
매니페스트를 클러스터에 적용하여 클러스터의 노드에서 VLAN 인터페이스를 만듭니다.
다음 YAML 파일은 VLAN 인터페이스의 매니페스트 예제입니다. 여기에는 해당 정보로 교체해야 하는 샘플 값이 포함되어 있습니다.
apiVersion: nmstate.io/v1beta1 kind: NodeNetworkConfigurationPolicy metadata: name: vlan-eth1-policy 1 spec: nodeSelector: 2 kubernetes.io/hostname: <node01> 3 desiredState: interfaces: - name: eth1.102 4 description: VLAN using eth1 5 type: vlan 6 state: up 7 vlan: base-iface: eth1 8 id: 102 9
12.2.5.3. 예제: 본딩 인터페이스 노드 네트워크 구성 정책
NodeNetworkConfigurationPolicy
매니페스트를 클러스터에 적용하여 클러스터의 노드에서 본딩 인터페이스를 만듭니다.
OpenShift Virtualization에서는 다음 본딩 모드만 지원합니다.
-
mode=1 active-backup
-
mode=2 balance-xor
-
mode=4 802.3ad
-
mode=5 balance-tlb
- mode=6 balance-alb
다음 YAML 파일은 본딩 인터페이스의 매니페스트 예제입니다. 여기에는 해당 정보로 교체해야 하는 샘플 값이 포함되어 있습니다.
apiVersion: nmstate.io/v1beta1 kind: NodeNetworkConfigurationPolicy metadata: name: bond0-eth1-eth2-policy 1 spec: nodeSelector: 2 kubernetes.io/hostname: <node01> 3 desiredState: interfaces: - name: bond0 4 description: Bond enslaving eth1 and eth2 5 type: bond 6 state: up 7 ipv4: dhcp: true 8 enabled: true 9 link-aggregation: mode: active-backup 10 options: miimon: '140' 11 slaves: 12 - eth1 - eth2 mtu: 1450 13
- 1
- 정책 이름입니다.
- 2
- 선택 사항:
nodeSelector
매개변수를 포함하지 않으면 정책이 클러스터의 모든 노드에 적용됩니다. - 3
- 이 예제에서는
hostname
노드 선택기를 사용합니다. - 4
- 인터페이스 이름입니다.
- 5
- 선택 사항: 사람이 읽을 수 있는 인터페이스 설명입니다.
- 6
- 인터페이스 유형입니다. 이 예제에서는 본딩을 생성합니다.
- 7
- 생성 후 인터페이스에 요청되는 상태입니다.
- 8
- 선택 사항:
dhcp
를 사용하지 않는 경우 고정 IP를 설정하거나 IP 주소 없이 인터페이스를 종료할 수 있습니다. - 9
- 이 예제에서
ipv4
를 활성화합니다. - 10
- 본딩의 드라이버 모드입니다. 이 예제에서는 활성 백업 모드를 사용합니다.
- 11
- 선택 사항: 이 예에서는 miimon을 사용하여 140ms마다 본딩 링크를 검사합니다.
- 12
- 본딩의 하위 노드 NIC입니다.
- 13
- 선택 사항: 본딩의 최대 전송 단위(MTU). 지정하지 않는 경우 이 값은 기본적으로
1500
으로 설정됩니다.
12.2.5.4. 예제: 이더넷 인터페이스 노드 네트워크 구성 정책
NodeNetworkConfigurationPolicy
매니페스트를 클러스터에 적용하여 클러스터의 노드에서 이더넷 인터페이스를 구성합니다.
다음 YAML 파일은 이더넷 인터페이스의 매니페스트 예제입니다. 여기에는 해당 정보로 교체해야 하는 샘플 값이 포함되어 있습니다.
apiVersion: nmstate.io/v1beta1 kind: NodeNetworkConfigurationPolicy metadata: name: eth1-policy 1 spec: nodeSelector: 2 kubernetes.io/hostname: <node01> 3 desiredState: interfaces: - name: eth1 4 description: Configuring eth1 on node01 5 type: ethernet 6 state: up 7 ipv4: dhcp: true 8 enabled: true 9
- 1
- 정책 이름입니다.
- 2
- 선택 사항:
nodeSelector
매개변수를 포함하지 않으면 정책이 클러스터의 모든 노드에 적용됩니다. - 3
- 이 예제에서는
hostname
노드 선택기를 사용합니다. - 4
- 인터페이스 이름입니다.
- 5
- 선택 사항: 사람이 읽을 수 있는 인터페이스 설명입니다.
- 6
- 인터페이스 유형입니다. 이 예제에서는 이더넷 네트워킹 인터페이스를 생성합니다.
- 7
- 생성 후 인터페이스에 요청되는 상태입니다.
- 8
- 선택 사항:
dhcp
를 사용하지 않는 경우 고정 IP를 설정하거나 IP 주소 없이 인터페이스를 종료할 수 있습니다. - 9
- 이 예제에서
ipv4
를 활성화합니다.
12.2.5.5. 예제: 동일한 노드 네트워크 구성 정책의 여러 인터페이스
동일한 노드 네트워크 구성 정책으로 여러 개의 인터페이스를 생성할 수 있습니다. 이러한 인터페이스는 서로를 참조할 수 있으므로 단일 정책 매니페스트를 사용하여 네트워크 구성을 빌드하고 배포할 수 있습니다.
다음 예제 스니펫에서는 두 NIC에 걸친 bond10
이라는 본딩과 이 본딩에 연결되는 br1
이라는 Linux 브리지를 생성합니다.
... interfaces: - name: bond10 description: Bonding eth2 and eth3 for Linux bridge type: bond state: up link-aggregation: slaves: - eth2 - eth3 - name: br1 description: Linux bridge on bond type: linux-bridge state: up bridge: port: - name: bond10 ...
12.2.6. 예: IP 관리
다음 예제 구성 스니펫에서는 다양한 IP 관리 방법을 보여줍니다.
이 예제에서는 ethernet
인터페이스 유형을 사용하여 예제를 단순화하면서 정책 구성에 관련 컨텍스트를 표시합니다. 이러한 IP 관리 예제는 다른 인터페이스 유형과 함께 사용할 수 있습니다.
12.2.6.1. 고정
다음 스니펫은 이더넷 인터페이스에서 IP 주소를 정적으로 구성합니다.
...
interfaces:
- name: eth1
description: static IP on eth1
type: ethernet
state: up
ipv4:
dhcp: false
address:
- ip: 192.168.122.250 1
prefix-length: 24
enabled: true
...
- 1
- 이 값을 인터페이스의 고정 IP 주소로 교체합니다.
12.2.6.2. IP 주소 없음
다음 스니펫에서는 인터페이스에 IP 주소가 없습니다.
... interfaces: - name: eth1 description: No IP on eth1 type: ethernet state: up ipv4: enabled: false ...
12.2.6.3. 동적 호스트 구성
다음 스니펫에서는 동적 IP 주소, 게이트웨이 주소, DNS를 사용하는 이더넷 인터페이스를 구성합니다.
... interfaces: - name: eth1 description: DHCP on eth1 type: ethernet state: up ipv4: dhcp: true enabled: true ...
다음 스니펫에서는 동적 IP 주소를 사용하지만 동적 게이트웨이 주소 또는 DNS를 사용하지 않는 이더넷 인터페이스를 구성합니다.
... interfaces: - name: eth1 description: DHCP without gateway or DNS on eth1 type: ethernet state: up ipv4: dhcp: true auto-gateway: false auto-dns: false enabled: true ...
12.2.6.4. DNS
다음 스니펫에서는 호스트에 DNS 구성을 설정합니다.
... interfaces: ... dns-resolver: config: search: - example.com - example.org server: - 8.8.8.8 ...
12.2.6.5. 고정 라우팅
다음 스니펫에서는 eth1
인터페이스에 고정 경로와 고정 IP를 구성합니다.
... interfaces: - name: eth1 description: Static routing on eth1 type: ethernet state: up ipv4: dhcp: false address: - ip: 192.0.2.251 1 prefix-length: 24 enabled: true routes: config: - destination: 198.51.100.0/24 metric: 150 next-hop-address: 192.0.2.1 2 next-hop-interface: eth1 table-id: 254 ...