23장. Kubernetes NMState
23.1. 노드 네트워크 상태 및 구성 모니터링 및 업데이트
Kubernetes NMState Operator를 설치한 후 Operator를 사용하여 클러스터의 노드 네트워크 상태 및 네트워크 구성을 관찰하고 업데이트할 수 있습니다.
NMState Operator 설치 방법에 대한 자세한 내용은 Kubernetes NMState Operator 를 참조하십시오.
23.1.1. CLI를 사용하여 노드의 네트워크 상태 보기
노드 네트워크 상태는 클러스터의 모든 노드에 대한 네트워크 구성입니다. NodeNetworkState
오브젝트는 클러스터의 모든 노드에 존재합니다. 이 오브젝트는 주기적으로 업데이트되며 해당 노드의 네트워크 상태를 캡처합니다.
프로세스
클러스터의 모든
NodeNetworkState
오브젝트를 나열합니다.$ oc get nns
NodeNetworkState
오브젝트를 검사하여 해당 노드의 네트워크를 확인합니다. 이 예제의 출력은 명확성을 위해 수정되었습니다.$ oc get nns node01 -o yaml
출력 예
apiVersion: nmstate.io/v1 kind: NodeNetworkState metadata: name: node01 1 status: currentState: 2 dns-resolver: # ... interfaces: # ... route-rules: # ... routes: # ... lastSuccessfulUpdateTime: "2020-01-31T12:14:00Z" 3
23.1.2. 웹 콘솔에서 노드의 네트워크 상태 보기
관리자는 OpenShift Container Platform 웹 콘솔을 사용하여 NodeNetworkState
리소스 및 네트워크 인터페이스를 관찰하고 네트워크 세부 정보에 액세스할 수 있습니다.
프로세스
네트워킹
NodeNetworkState 로 이동합니다. NodeNetworkState 페이지에서
NodeNetworkState
리소스 목록과 노드에서 생성된 해당 인터페이스를 볼 수 있습니다. 인터페이스 상태 ,인터페이스 유형 및 IP 또는 조건 이름 또는 라벨 을 기반으로 검색 막대를 기반으로 필터링 을 사용하여 표시된NodeNetworkState
리소스를 좁힐 수 있습니다.-
NodeNetworkState
리소스에 대한 자세한 정보에 액세스하려면 Name 열에 나열된NodeNetworkState
리소스 이름을 클릭합니다. -
NodeNetworkState
리소스에 대한 네트워크 세부 정보 섹션을 확장하고 보려면 > 아이콘을 클릭합니다. 또는 네트워크 인터페이스 열에서 각 인터페이스 유형을 클릭하여 네트워크 세부 정보를 볼 수 있습니다.
23.1.3. 웹 콘솔에서 정책 관리
NodeNetworkConfigurationPolicy
매니페스트를 클러스터에 적용하여 노드 네트워크 구성을 업데이트(예: 노드에서 인터페이스 추가 또는 제거)할 수 있습니다. Networking 메뉴의 NodeNetworkConfigurationPolicy 페이지에서 생성된 정책 목록에 액세스하여 웹 콘솔에서 정책을 관리합니다. 이 페이지에서는 정책을 생성, 업데이트, 모니터링 및 삭제할 수 있습니다.
23.1.3.1. 정책 상태 모니터링
NodeNetworkConfigurationPolicy 페이지에서 정책 상태를 모니터링할 수 있습니다. 이 페이지에는 다음 열이 포함된 테이블 형식으로 클러스터에서 생성된 모든 정책이 표시됩니다.
- 이름
- 생성된 정책의 이름입니다.
- 일치하는 노드
- 정책이 적용되는 노드의 수입니다. 노드 선택기를 기반으로 하는 노드의 하위 집합 또는 클러스터의 모든 노드일 수 있습니다.
- 노드 네트워크 상태
- 일치하는 노드의 시행 상태입니다. 시행 상태를 클릭하고 상태에 대한 자세한 정보를 볼 수 있습니다.
원하는 정책을 찾으려면 Filter 옵션을 사용하여 강제 상태를 기반으로 목록을 필터링하거나 검색 옵션을 사용하여 목록을 필터링할 수 있습니다.
23.1.3.2. 정책 생성
웹 콘솔에서 양식 또는 YAML을 사용하여 정책을 생성할 수 있습니다.
프로세스
-
네트워킹
NodeNetworkConfigurationPolicy 로 이동합니다. NodeNetworkConfigurationPolicy 페이지에서 생성 을 클릭하고 양식에서 옵션을 선택합니다.
기존 정책이 없는 경우 다른 방법으로 NodeNetworkConfigurationPolicy 생성 을 클릭하여 양식을 사용하여 정책을 생성할 수 있습니다.
참고YAML을 사용하여 정책을 생성하려면 생성 을 클릭하고 YAML 함께 옵션을 선택합니다. 다음 단계는 양식을 사용하여 정책을 생성하는 데만 적용할 수 있습니다.
- 선택 사항: 노드 선택기 확인란을 사용하여 노드의 특정 하위 집합에만 이 NodeNetworkConfigurationPolicy를 적용하여 정책을 적용해야 하는 노드를 지정합니다.
- 정책 이름 필드에 정책 이름을 입력합니다.
- 선택 사항: 설명 필드에 정책에 대한 설명을 입력합니다.
선택 사항: 정책 인터페이스 섹션에서 브리지 인터페이스가 기본적으로 편집 가능한 필드에 사전 설정된 값으로 추가됩니다. 다음 단계를 실행하여 값을 편집합니다.
- 인터페이스 이름 필드에 인터페이스 이름을 입력합니다.
- 네트워크 상태 드롭다운에서 네트워크 상태를 선택합니다. 선택한 기본값은 Up 입니다.
유형 드롭다운에서 인터페이스 유형을 선택합니다. 사용 가능한 값은 Bridge,Bonding, 이더넷 입니다. 선택한 기본값은 Bridge 입니다.
참고양식을 사용하여 VLAN 인터페이스 추가는 지원되지 않습니다. VLAN 인터페이스를 추가하려면 YAML을 사용하여 정책을 생성해야 합니다. 추가되면 양식을 사용하여 정책을 편집할 수 없습니다.
선택 사항: IP 구성 섹션에서 IPv4 주소를 선택하여 인터페이스에 IPv4 주소를 할당하고 IP 주소 할당 세부 정보를 구성합니다.
- IP 주소를 클릭하여 고정 IP 주소로 인터페이스를 구성하거나 DHCP 를 사용하여 IP 주소를 자동으로 할당합니다.
IP 주소 옵션을 선택한 경우 IPV4 주소 필드에 IPv4 주소를 입력하고 접두사 길이 필드에 접두사 길이 를 입력합니다.
DHCP 옵션을 선택한 경우 비활성화할 옵션을 선택 취소합니다. 사용 가능한 옵션은 Auto-DNS,Auto-routes, Auto-gateway 입니다. 모든 옵션은 기본적으로 선택됩니다.
- 선택 사항: 포트 필드에 포트 번호를 입력합니다.
- 선택 사항: Enable STP to enable STP를 선택합니다.
- 선택 사항: 정책에 인터페이스를 추가하려면 정책에 다른 인터페이스 추가를 클릭합니다.
- 선택 사항: 정책에서 인터페이스를 제거하려면 인터페이스 옆에 있는 아이콘을 클릭합니다.
참고또는 페이지 상단에 있는 YAML 편집을 클릭하여 YAML을 사용하여 양식을 계속 편집할 수 있습니다.
- 생성 을 클릭하여 정책 생성을 완료합니다.
23.1.3.3. 정책 업데이트
23.1.3.3.1. 양식을 사용하여 정책 업데이트
프로세스
-
네트워킹
NodeNetworkConfigurationPolicy 로 이동합니다. - NodeNetworkConfigurationPolicy 페이지에서 편집할 정책 옆에 있는 아이콘을 클릭하고 편집을 클릭합니다.
- 업데이트할 필드를 편집합니다.
- 저장을 클릭합니다.
양식을 사용한 VLAN 인터페이스 추가는 지원되지 않습니다. VLAN 인터페이스를 추가하려면 YAML을 사용하여 정책을 생성해야 합니다. 추가되면 양식을 사용하여 정책을 편집할 수 없습니다.
23.1.3.3.2. YAML을 사용하여 정책 업데이트
프로세스
-
네트워킹
NodeNetworkConfigurationPolicy 로 이동합니다. - NodeNetworkConfigurationPolicy 페이지에서 편집할 정책의 이름 열에서 정책 이름을 클릭합니다.
- YAML 탭을 클릭하고 YAML을 편집합니다.
- 저장을 클릭합니다.
23.1.3.4. 정책 삭제
프로세스
-
네트워킹
NodeNetworkConfigurationPolicy 로 이동합니다. - NodeNetworkConfigurationPolicy 페이지에서 삭제할 정책 옆에 있는 아이콘을 클릭하고 삭제 를 클릭합니다.
- 팝업 창에서 정책 이름을 입력하여 삭제를 확인하고 삭제를 클릭합니다.
23.1.4. CLI를 사용하여 정책 관리
23.1.4.1. 노드에서 인터페이스 만들기
NodeNetworkConfigurationPolicy
매니페스트를 클러스터에 적용하여 클러스터의 노드에서 인터페이스를 만듭니다. 매니페스트는 요청된 인터페이스 구성을 자세히 설명합니다.
기본적으로 매니페스트는 클러스터의 모든 노드에 적용됩니다. 특정 노드에 인터페이스를 추가하려면 spec: nodeSelector
매개변수와 노드 선택기에 적합한 <key>:<value>
를 추가합니다.
nmstate 지원 노드를 동시에 여러 개 구성할 수 있습니다. 구성은 병렬로 노드의 50%에 적용됩니다. 이 전략을 사용하면 네트워크 연결에 실패하면 전체 클러스터를 사용할 수 없습니다. 클러스터의 특정 부분에 병렬로 정책 구성을 적용하려면 maxUnavailable
필드를 사용합니다.
프로세스
NodeNetworkConfigurationPolicy
매니페스트를 생성합니다. 다음 예제는 모든 작업자 노드에서 Linux 브리지를 구성하고 DNS 확인자를 구성합니다.apiVersion: nmstate.io/v1 kind: NodeNetworkConfigurationPolicy metadata: name: br1-eth1-policy 1 spec: nodeSelector: 2 node-role.kubernetes.io/worker: "" 3 maxUnavailable: 3 4 desiredState: interfaces: - name: br1 description: Linux bridge with eth1 as a port 5 type: linux-bridge state: up ipv4: dhcp: true enabled: true auto-dns: false bridge: options: stp: enabled: false port: - name: eth1 dns-resolver: 6 config: search: - example.com - example.org server: - 8.8.8.8
- 1
- 정책 이름입니다.
- 2
- 선택 사항:
nodeSelector
매개변수를 포함하지 않으면 정책이 클러스터의 모든 노드에 적용됩니다. - 3
- 이 예제에서는
node-role.kubernetes.io/worker: ""
노드 선택기를 사용하여 클러스터의 모든 작업자 노드를 선택합니다. - 4
- 선택 사항: 정책 구성을 동시에 적용할 수 있는 최대 nmstate 사용 노드 수를 지정합니다. 이 매개변수는 백분율 값(문자열), 예를 들어
"10%"
또는 절대 값(예:3
)으로 설정할 수 있습니다. - 5
- 선택 사항: 사람이 읽을 수 있는 인터페이스 설명입니다.
- 6
- 선택 사항: DNS 서버의 검색 및 서버 설정을 지정합니다.
노드 네트워크 정책을 생성합니다.
$ oc apply -f br1-eth1-policy.yaml 1
- 1
- 노드 네트워크 구성 정책 매니페스트의 파일 이름입니다.
추가 리소스
23.1.4.2. 노드에 노드 네트워크 정책 업데이트 확인
NodeNetworkConfigurationPolicy
매니페스트는 클러스터의 노드에 대해 요청된 네트워크 구성을 설명합니다. 노드 네트워크 정책에는 요청된 네트워크 구성과 클러스터 전체에 대한 정책 실행 상태가 포함됩니다.
노드 네트워크 정책을 적용하면 클러스터의 모든 노드에 대해 NodeNetworkConfigurationEnactment
오브젝트가 생성됩니다. 노드 네트워크 구성 시행은 해당 노드에서 정책의 실행 상태를 나타내는 읽기 전용 오브젝트입니다. 정책이 노드에 적용되지 않으면 문제 해결을 위해 해당 노드에 대한 시행에 역추적이 포함됩니다.
절차
정책이 클러스터에 적용되었는지 확인하려면 정책과 해당 상태를 나열합니다.
$ oc get nncp
선택 사항: 정책을 구성하는 데 예상보다 오래 걸리는 경우 특정 정책의 요청된 상태 및 상태 조건을 검사할 수 있습니다.
$ oc get nncp <policy> -o yaml
선택 사항: 모든 노드에서 정책을 구성하는 데 예상보다 오래 걸리는 경우 클러스터의 시행 상태를 나열할 수 있습니다.
$ oc get nnce
선택 사항: 구성 실패에 대한 오류 보고를 포함하여 특정 시행의 구성을 확인하려면 다음 명령을 실행하십시오.
$ oc get nnce <node>.<policy> -o yaml
23.1.4.3. 노드에서 인터페이스 제거
NodeNetworkConfigurationPolicy
오브젝트를 편집하고 인터페이스의 state
를 없음
으로 설정하여 클러스터의 1개 이상의 노드에서 인터페이스를 제거할 수 있습니다.
노드에서 인터페이스를 제거해도 노드 네트워크 구성이 이전 상태로 자동 복원되지 않습니다. 이전 상태를 복원하려면 정책에서 노드 네트워크 구성을 정의해야 합니다.
브리지 또는 본딩 인터페이스를 제거하면 이전에 해당 브릿지 또는 본딩 인터페이스에 연결되었거나 종속되었던 클러스터의 모든 노드 NIC가 down
상태가 되어 연결할 수 없습니다. 연결 손실을 방지하기 위해, 노드 NIC를 동일한 정책으로 구성하여 DHCP 또는 고정 IP 주소의 상태를 up
으로 구성합니다.
인터페이스를 추가한 노드 네트워크 정책을 삭제해도 노드의 정책 구성은 변경되지 않습니다. NodeNetworkConfigurationPolicy
는 클러스터의 오브젝트이지만 요청된 구성만 나타냅니다.
마찬가지로 인터페이스를 제거해도 정책은 삭제되지 않습니다.
절차
인터페이스를 생성하는 데 사용되는
NodeNetworkConfigurationPolicy
매니페스트를 업데이트합니다. 다음 예에서는 Linux 브릿지를 제거한 후 연결이 손실되지 않도록 DHCP로eth1
NIC를 구성합니다.apiVersion: nmstate.io/v1 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
- 정책 매니페스트의 파일 이름입니다.
23.1.5. 다양한 인터페이스에 대한 예제 정책 구성
다른 예제 NodeNetworkConfigurationPolicy
(NNCP) 매니페스트 구성을 읽기 전에 클러스터가 최상의 성능 조건에서 실행되도록 정책을 적용할 때 다음 요인을 고려하십시오.
-
둘 이상의 노드에 정책을 적용해야 하는 경우 각 대상 노드에 대한
NodeNetworkConfigurationPolicy
매니페스트를 생성합니다. Kubernetes NMState Operator는 지정되지 않은 순서로 NNCP를 사용하여 각 노드에 정책을 적용합니다. 이 방법을 사용하여 정책 범위를 지정하면 정책 애플리케이션의 기간이 단축되지만 클러스터 구성에 오류가 있는 경우 클러스터 전체에서 중단될 위험이 있습니다. 이러한 유형의 오류를 방지하려면 처음에 NNCP를 일부 노드에 적용하고 올바르게 구성한 후 나머지 노드에 정책 적용을 진행합니다. -
여러 노드에 정책을 적용해야 하지만 모든 대상 노드에 대해 단일 NNCP만 생성하려는 경우 Kubernetes NMState Operator는 정책을 각 노드에 순서대로 적용합니다. 클러스터 구성에서
maxUnavailable
매개변수를 사용하여 대상 노드의 정책 애플리케이션 속도 및 범위를 설정할 수 있습니다. 매개변수의 백분율 낮은 값을 설정하면 중단이 정책 애플리케이션을 수신하는 노드의 소수에 영향을 미치는 경우 클러스터 전체 중단 위험을 줄일 수 있습니다. - 단일 정책에서 관련 네트워크 구성을 모두 지정하는 것이 좋습니다.
- 노드가 다시 시작되면 Kubernetes NMState Operator는 노드에 정책을 적용하는 순서를 제어할 수 없습니다. Kubernetes NMState Operator는 성능이 저하된 네트워크 오브젝트를 생성하는 순서대로 상호 종속적인 정책을 적용할 수 있습니다.
23.1.5.1. 예: Linux 브리지 인터페이스 노드 네트워크 구성 정책
NodeNetworkConfigurationPolicy
매니페스트를 클러스터에 적용하여 클러스터의 노드에서 Linux 브리지 인터페이스를 만듭니다.
다음 YAML 파일은 Linux 브리지 인터페이스의 매니페스트 예제입니다. 여기에는 해당 정보로 교체해야 하는 샘플 값이 포함되어 있습니다.
apiVersion: nmstate.io/v1 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입니다.
23.1.5.2. 예제: VLAN 인터페이스 노드 네트워크 구성 정책
NodeNetworkConfigurationPolicy
매니페스트를 클러스터에 적용하여 클러스터의 노드에서 VLAN 인터페이스를 만듭니다.
단일 NodeNetworkConfigurationPolicy
매니페스트에서 노드의 VLAN 인터페이스에 대한 모든 관련 구성을 정의합니다. 예를 들어 노드의 VLAN 인터페이스와 동일한 NodeNetworkConfigurationPolicy
매니페스트에서 VLAN 인터페이스에 대한 관련 경로를 정의합니다.
노드가 다시 시작되면 Kubernetes NMState Operator는 정책이 적용되는 순서를 제어할 수 없습니다. 따라서 관련 네트워크 구성에 별도의 정책을 사용하는 경우 Kubernetes NMState Operator에서 이러한 정책을 순서대로 적용하여 저하된 네트워크 오브젝트를 만들 수 있습니다.
다음 YAML 파일은 VLAN 인터페이스의 매니페스트 예제입니다. 여기에는 해당 정보로 교체해야 하는 샘플 값이 포함되어 있습니다.
apiVersion: nmstate.io/v1 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
- 1
- 정책 이름입니다.
- 2
- 선택 사항:
nodeSelector
매개변수를 포함하지 않으면 정책이 클러스터의 모든 노드에 적용됩니다. - 3
- 이 예제에서는
hostname
노드 선택기를 사용합니다. - 4
- 인터페이스 이름입니다. 베어 메탈에 배포하는 경우 <
interface_name>.<vlan_number
> VLAN 형식만 지원됩니다. - 5
- 선택 사항: 사람이 읽을 수 있는 인터페이스 설명입니다.
- 6
- 인터페이스 유형입니다. 이 예제에서는 VLAN을 만듭니다.
- 7
- 생성 후 인터페이스에 요청되는 상태입니다.
- 8
- VLAN이 연결되는 노드 NIC입니다.
- 9
- VLAN 태그입니다.
23.1.5.3. 예: 가상 기능을 위한 노드 네트워크 구성 정책
NodeNetworkConfigurationPolicy
매니페스트를 적용하여 기존 클러스터에서 SR-IOV(Single Root I/O Virtualization) 네트워크 가상 기능(VF)에 대한 호스트 네트워크 설정을 업데이트합니다.
NodeNetworkConfigurationPolicy
매니페스트를 기존 클러스터에 적용하여 다음 작업을 완료할 수 있습니다.
- VF의 QoS 호스트 네트워크 설정을 구성하여 성능을 최적화합니다.
- 네트워크 인터페이스의 VF를 추가, 제거 또는 업데이트합니다.
- VF 본딩 구성을 관리합니다.
SR-IOV Network Operator를 통해 관리되는 물리적 기능에 NMState를 사용하여 SR-IOV VF의 호스트 네트워크 설정을 업데이트하려면 관련 SriovNetworkNodePolicy
리소스의 external Managed
매개변수를 true
로 설정해야 합니다. 자세한 내용은 추가 리소스 섹션을 참조하십시오.
다음 YAML 파일은 VF에 대한 QoS 정책을 정의하는 매니페스트의 예입니다. 이 YAML에는 자체 정보로 교체해야 하는 샘플 값이 포함되어 있습니다.
apiVersion: nmstate.io/v1 kind: NodeNetworkConfigurationPolicy metadata: name: qos 1 spec: nodeSelector: 2 node-role.kubernetes.io/worker: "" 3 desiredState: interfaces: - name: ens1f0 4 description: Change QOS on VF0 5 type: ethernet 6 state: up 7 ethernet: sr-iov: total-vfs: 3 8 vfs: - id: 0 9 max-tx-rate: 200 10
- 1
- 정책 이름입니다.
- 2
- 선택 사항:
nodeSelector
매개변수를 포함하지 않으면 정책이 클러스터의 모든 노드에 적용됩니다. - 3
- 이 예제는
작업자
역할이 있는 모든 노드에 적용됩니다. - 4
- 물리적 기능(PF) 네트워크 인터페이스의 이름입니다.
- 5
- 선택 사항: 사람이 읽을 수 있는 인터페이스 설명입니다.
- 6
- 인터페이스 유형입니다.
- 7
- 구성 후 인터페이스에 요청된 상태입니다.
- 8
- 총 VF 수입니다.
- 9
- ID가
0
인 VF를 식별합니다. - 10
- VF에 대해 최대 전송 속도(Mbps)를 설정합니다. 이 샘플 값은 200Mbps의 속도를 설정합니다.
다음 YAML 파일은 네트워크 인터페이스에 대한 VF를 추가하는 매니페스트의 예입니다.
이 샘플 구성에서 ens1f1v0
VF는 ens1f1
물리적 인터페이스에서 생성되며 이 VF는 본딩된 네트워크 인터페이스 bond0
에 추가됩니다. 본딩은 중복성에 active-backup
모드를 사용합니다. 이 예에서 VF는 하드웨어 오프로드를 사용하여 물리적 인터페이스에서 직접 VLAN을 관리하도록 구성되어 있습니다.
apiVersion: nmstate.io/v1 kind: NodeNetworkConfigurationPolicy metadata: name: addvf 1 spec: nodeSelector: 2 node-role.kubernetes.io/worker: "" 3 maxUnavailable: 3 desiredState: interfaces: - name: ens1f1 4 type: ethernet state: up ethernet: sr-iov: total-vfs: 1 5 vfs: - id: 0 trust: true 6 vlan-id: 477 7 - name: bond0 8 description: Attach VFs to bond 9 type: bond 10 state: up 11 link-aggregation: mode: active-backup 12 options: primary: ens1f0v0 13 port: 14 - ens1f0v0 - ens1f1v0 15
- 1
- 정책 이름입니다.
- 2
- 선택 사항:
nodeSelector
매개변수를 포함하지 않으면 정책이 클러스터의 모든 노드에 적용됩니다. - 3
- 이 예제에서는
작업자
역할이 있는 모든 노드에 적용됩니다. - 4
- VF 네트워크 인터페이스의 이름입니다.
- 5
- 생성할 VF 수입니다.
- 6
- 활성 및 백업 VF 간의 장애 조치 본딩을 허용하도록 설정
- 7
- VLAN의 ID입니다. 이 예제에서는 하드 오프로드를 사용하여 VF에서 직접 VLAN을 정의합니다.
- 8
- 본딩 네트워크 인터페이스의 이름입니다.
- 9
- 선택 사항: 사람이 읽을 수 있는 인터페이스 설명입니다.
- 10
- 인터페이스 유형입니다.
- 11
- 구성 후 인터페이스에 요청된 상태입니다.
- 12
- 본딩에 대한 본딩 정책입니다.
- 13
- 연결된 기본 본딩 포트입니다.
- 14
- 본딩된 네트워크 인터페이스의 포트입니다.
- 15
- 이 예에서는 VLAN 네트워크 인터페이스가 본딩된 네트워크 인터페이스에 추가 인터페이스로 추가됩니다.
추가 리소스
23.1.5.4. 예제: 본딩 인터페이스 노드 네트워크 구성 정책
NodeNetworkConfigurationPolicy
매니페스트를 클러스터에 적용하여 클러스터의 노드에서 본딩 인터페이스를 만듭니다.
OpenShift Container Platform에서는 다음과 같은 본딩 모드만 지원합니다.
-
mode=1 active-backup
-
mode=2 balance-xor
-
mode=4 802.3ad
다른 본딩 모드는 지원되지 않습니다.
다음 YAML 파일은 본딩 인터페이스의 매니페스트 예제입니다. 여기에는 해당 정보로 교체해야 하는 샘플 값이 포함되어 있습니다.
apiVersion: nmstate.io/v1 kind: NodeNetworkConfigurationPolicy metadata: name: bond0-eth1-eth2-policy 1 spec: nodeSelector: 2 kubernetes.io/hostname: <node01> 3 desiredState: interfaces: - name: bond0 4 description: Bond with ports 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 port: 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
으로 설정됩니다.
23.1.5.5. 예제: 이더넷 인터페이스 노드 네트워크 구성 정책
NodeNetworkConfigurationPolicy
매니페스트를 클러스터에 적용하여 클러스터의 노드에서 이더넷 인터페이스를 구성합니다.
다음 YAML 파일은 이더넷 인터페이스의 매니페스트 예제입니다. 여기에는 해당 정보로 교체해야 하는 샘플 값이 포함되어 있습니다.
apiVersion: nmstate.io/v1 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
를 활성화합니다.
23.1.5.6. 예제: 노드 네트워크 구성 정책이 동일한 여러 인터페이스
동일한 노드 네트워크 구성 정책으로 여러 개의 인터페이스를 생성할 수 있습니다. 이러한 인터페이스는 서로를 참조할 수 있으므로 단일 정책 매니페스트를 사용하여 네트워크 구성을 빌드하고 배포할 수 있습니다.
다음 예제 YAML 파일은 본딩에 연결하는 bond10.103
이라는 두 NIC와 VLAN에서 이름이 bond10
인 본딩을 생성합니다.
apiVersion: nmstate.io/v1 kind: NodeNetworkConfigurationPolicy metadata: name: bond-vlan 1 spec: nodeSelector: 2 kubernetes.io/hostname: <node01> 3 desiredState: interfaces: - name: bond10 4 description: Bonding eth2 and eth3 5 type: bond 6 state: up 7 link-aggregation: mode: balance-xor 8 options: miimon: '140' 9 port: 10 - eth2 - eth3 - name: bond10.103 11 description: vlan using bond10 12 type: vlan 13 state: up 14 vlan: base-iface: bond10 15 id: 103 16 ipv4: dhcp: true 17 enabled: true 18
- 1
- 정책 이름입니다.
- 2
- 선택 사항:
nodeSelector
매개변수를 포함하지 않으면 정책이 클러스터의 모든 노드에 적용됩니다. - 3
- 이 예에서는
호스트 이름
노드 선택기를 사용합니다. - 4 11
- 인터페이스 이름입니다.
- 5 12
- 선택 사항: 사람이 읽을 수 있는 인터페이스 설명입니다.
- 6 13
- 인터페이스 유형입니다.
- 7 14
- 생성 후 인터페이스에 요청되는 상태입니다.
- 8
- 본딩의 드라이버 모드입니다.
- 9
- 선택 사항: 이 예제에서는 miimon을 사용하여 140ms마다 본딩 링크를 검사합니다.
- 10
- 본딩의 하위 노드 NIC입니다.
- 15
- VLAN이 연결되는 노드 NIC입니다.
- 16
- VLAN 태그입니다.
- 17
- 선택 사항: dhcp를 사용하지 않는 경우 고정 IP를 설정하거나 IP 주소 없이 인터페이스를 종료할 수 있습니다.
- 18
- 이 예제에서 ipv4를 활성화합니다.
23.1.5.7. 예: VRF 인스턴스 노드 네트워크 구성 정책과의 네트워크 인터페이스
NodeNetworkConfigurationPolicy
CR(사용자 정의 리소스)을 적용하여 VRF(Virtual Routing and Forwarding) 인스턴스를 네트워크 인터페이스와 연결합니다.
VRF 인스턴스를 네트워크 인터페이스와 연결하는 것은 기술 프리뷰 기능 전용입니다. 기술 프리뷰 기능은 Red Hat 프로덕션 서비스 수준 계약(SLA)에서 지원되지 않으며 기능적으로 완전하지 않을 수 있습니다. 따라서 프로덕션 환경에서 사용하는 것은 권장하지 않습니다. 이러한 기능을 사용하면 향후 제품 기능을 조기에 이용할 수 있어 개발 과정에서 고객이 기능을 테스트하고 피드백을 제공할 수 있습니다.
Red Hat 기술 프리뷰 기능의 지원 범위에 대한 자세한 내용은 기술 프리뷰 기능 지원 범위를 참조하십시오.
VRF 인스턴스를 네트워크 인터페이스와 연결하면 트래픽 격리, 독립적인 라우팅 결정 및 네트워크 리소스의 논리적 분리를 지원할 수 있습니다.
베어 메탈 환경에서는 MetalLB를 사용하여 VRF 인스턴스에 속하는 인터페이스를 통해 로드 밸런서 서비스를 알릴 수 있습니다. 자세한 내용은 추가 리소스 섹션을 참조하십시오.
다음 YAML 파일은 VRF 인스턴스를 네트워크 인터페이스에 연결하는 예입니다. 여기에는 해당 정보로 교체해야 하는 샘플 값이 포함되어 있습니다.
apiVersion: nmstate.io/v1 kind: NodeNetworkConfigurationPolicy metadata: name: vrfpolicy 1 spec: nodeSelector: vrf: "true" 2 maxUnavailable: 3 desiredState: interfaces: - name: ens4vrf 3 type: vrf 4 state: up vrf: port: - ens4 5 route-table-id: 2 6
23.1.6. 브리지에 연결된 NIC의 고정 IP 캡처
NIC의 고정 IP 캡처는 기술 프리뷰 기능 전용입니다. 기술 프리뷰 기능은 Red Hat 프로덕션 서비스 수준 계약(SLA)에서 지원되지 않으며 기능적으로 완전하지 않을 수 있습니다. 따라서 프로덕션 환경에서 사용하는 것은 권장하지 않습니다. 이러한 기능을 사용하면 향후 제품 기능을 조기에 이용할 수 있어 개발 과정에서 고객이 기능을 테스트하고 피드백을 제공할 수 있습니다.
Red Hat 기술 프리뷰 기능의 지원 범위에 대한 자세한 내용은 기술 프리뷰 기능 지원 범위를 참조하십시오.
23.1.6.1. 예: 브리지에 연결된 NIC에서 고정 IP 주소를 상속하는 Linux 브리지 인터페이스 노드 네트워크 구성 정책
클러스터의 노드에서 Linux 브리지 인터페이스를 생성하고 단일 NodeNetworkConfigurationPolicy
매니페스트를 클러스터에 적용하여 NIC의 고정 IP 구성을 브리지로 전송합니다.
다음 YAML 파일은 Linux 브리지 인터페이스의 매니페스트 예제입니다. 여기에는 해당 정보로 교체해야 하는 샘플 값이 포함되어 있습니다.
apiVersion: nmstate.io/v1 kind: NodeNetworkConfigurationPolicy metadata: name: br1-eth1-copy-ipv4-policy 1 spec: nodeSelector: 2 node-role.kubernetes.io/worker: "" capture: eth1-nic: interfaces.name=="eth1" 3 eth1-routes: routes.running.next-hop-interface=="eth1" br1-routes: capture.eth1-routes | routes.running.next-hop-interface := "br1" desiredState: interfaces: - name: br1 description: Linux bridge with eth1 as a port type: linux-bridge 4 state: up ipv4: "{{ capture.eth1-nic.interfaces.0.ipv4 }}" 5 bridge: options: stp: enabled: false port: - name: eth1 6 routes: config: "{{ capture.br1-routes.routes.running }}"
- 1
- 정책의 이름입니다.
- 2
- 선택 사항:
nodeSelector
매개변수를 포함하지 않으면 정책이 클러스터의 모든 노드에 적용됩니다. 이 예제에서는node-role.kubernetes.io/worker: ""
노드 선택기를 사용하여 클러스터의 모든 작업자 노드를 선택합니다. - 3
- 브리지가 연결되는 노드 NIC에 대한 참조입니다.
- 4
- 인터페이스 유형입니다. 이 예제에서는 브리지를 만듭니다.
- 5
- 브리지 인터페이스의 IP 주소입니다. 이 값은
spec.capture.eth1-nic
항목에서 참조하는 NIC의 IP 주소와 일치합니다. - 6
- 브리지가 연결되는 노드 NIC입니다.
추가 리소스
23.1.7. 예제: IP 관리
다음 예제 구성 스니펫에서는 다양한 IP 관리 방법을 보여줍니다.
이 예제에서는 ethernet
인터페이스 유형을 사용하여 예제를 단순화하면서 정책 구성에 관련 컨텍스트를 표시합니다. 이러한 IP 관리 예제는 다른 인터페이스 유형과 함께 사용할 수 있습니다.
23.1.7.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 주소로 교체합니다.
23.1.7.2. IP 주소 없음
다음 스니펫에서는 인터페이스에 IP 주소가 없습니다.
# ... interfaces: - name: eth1 description: No IP on eth1 type: ethernet state: up ipv4: enabled: false # ...
23.1.7.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 # ...
23.1.7.4. DNS
기본적으로 nmstate
API는 네트워크 인터페이스에 저장하는 대신 전역적으로 DNS 값을 저장합니다. 특정 상황에서는 DNS 값을 저장하도록 네트워크 인터페이스를 구성해야 합니다.
DNS 구성을 설정하는 것은 /etc/resolv.conf
파일을 수정하는 것과 동일합니다.
네트워크 인터페이스에 대한 DNS 구성을 정의하려면 처음에 네트워크 인터페이스의 YAML 구성 파일에서 dns-resolver
섹션을 지정해야 합니다.
사용자 지정 br-ex
브리지를 수동으로 구성하지 않는 한 DNS 해석기를 구성할 때 OVNKubernetes-managed Open vSwitch 브리지인 br-ex
브리지를 사용할 수 없습니다.
자세한 내용은 베어 메탈 문서에 설치 관리자 프로비저닝 클러스터 배포 또는 베어 메탈 문서에 사용자 프로비저닝 클러스터 설치의 " 사용자 지정 br- ex 브리지가 포함된 매니페스트 오브젝트 생성"을 참조하십시오.
다음 예제에서는 DNS 값을 전역적으로 저장하는 기본 상황을 보여줍니다.
네트워크 인터페이스 없이 정적 DNS를 구성합니다. 호스트 노드에서
/etc/resolv.conf
파일을 업데이트할 때NodeNetworkConfigurationPolicy
(NNCP) 매니페스트에 인터페이스 IPv4 또는 IPv6를 지정할 필요가 없습니다.전역적으로 DNS 값을 저장하는 네트워크 인터페이스의 DNS 구성 예
apiVersion: nmstate.io/v1 kind: NodeNetworkConfigurationPolicy metadata: name: worker-0-dns-testing spec: nodeSelector: kubernetes.io/hostname: <target_node> desiredState: dns-resolver: config: search: - example.com - example.org server: - 2001:db8:f::1 - 192.0.2.251 # ...
다음 예제에서는 DNS 값을 저장하기 위해 네트워크 인터페이스를 구성해야 하는 상황을 보여줍니다.
동적 DNS 이름 서버를 통해 정적 DNS 이름 서버의 순위를 지정하려면 네트워크 인터페이스 YAML 구성 파일에서 DHCP(Dynamic Host Configuration Protocol) 또는 IPv6 자동 구성(
autoconf
) 메커니즘을 실행하는 인터페이스를 정의합니다.DHCPv4 네트워크 프로토콜에서 검색된 DNS 이름 서버에
192.0.2.1
을 추가하는 구성 예# ... dns-resolver: config: server: - 192.0.2.1 interfaces: - name: eth1 type: ethernet state: up ipv4: enabled: true dhcp: true auto-dns: true # ...
nmstate
API를 사용하여 DNS 값을 전역적으로 저장하는 기본 방법을 채택하는 대신 네트워크 인터페이스를 구성해야 하는 경우 정적 DNS 값과 고정 IP 주소를 네트워크 인터페이스 YAML 파일에 설정할 수 있습니다.중요네트워크 인터페이스 수준에 DNS 값을 저장하면 인터페이스를 OVS(Open vSwitch) 브리지, Linux 브리지 또는 본딩과 같은 네트워크 구성 요소에 연결한 후 이름 확인 문제가 발생할 수 있습니다.
인터페이스 수준에서 DNS 값을 저장하는 구성 예
# ... dns-resolver: config: search: - example.com - example.org server: - 2001:db8:1::d1 - 2001:db8:1::d2 - 192.0.2.1 interfaces: - name: eth1 type: ethernet state: up ipv4: address: - ip: 192.0.2.251 prefix-length: 24 dhcp: false enabled: true ipv6: address: - ip: 2001:db8:1::1 prefix-length: 64 dhcp: false enabled: true autoconf: false # ...
네트워크 인터페이스에 정적 DNS 검색 도메인 및 동적 DNS 이름 서버를 설정하려면 DHCP(Dynamic Host Configuration Protocol) 또는 네트워크 인터페이스 YAML 구성 파일에서 IPv6 자동 구성(
autoconf
) 메커니즘을 실행하는 동적 인터페이스를 정의합니다.동적 DNS 이름 서버 설정과 함께
example.com
및example.org
정적 DNS 검색 도메인을 설정하는 구성의 예# ... dns-resolver: config: search: - example.com - example.org server: [] interfaces: - name: eth1 type: ethernet state: up ipv4: enabled: true dhcp: true auto-dns: true ipv6: enabled: true dhcp: true autoconf: true auto-dns: true # ...
23.1.7.5. 고정 라우팅
다음 스니펫에서는 eth1
인터페이스에 고정 경로와 고정 IP를 구성합니다.
dns-resolver: config: # ... interfaces: - name: eth1 description: Static routing on eth1 type: ethernet state: up ipv4: dhcp: false enabled: true address: - ip: 192.0.2.251 1 prefix-length: 24 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 # ...