Kubernetes NMState


OpenShift Container Platform 4.17

OpenShift Container Platform에서 Kubernetes NMState를 사용하여 노드 네트워크 상태 및 구성 관찰 및 업데이트

Red Hat OpenShift Documentation Team

초록

이 문서에서는 Kubernetes NMState를 사용하여 OpenShift Container Platform에서 노드 네트워크 구성을 관찰, 업데이트 및 문제를 해결합니다.

1장. 노드 네트워크 상태 및 구성 모니터링 및 업데이트

Kubernetes NMState Operator를 설치한 후 Operator를 사용하여 클러스터의 노드 네트워크 상태 및 네트워크 구성을 관찰하고 업데이트할 수 있습니다.

NMState Operator 설치 방법에 대한 자세한 내용은 Kubernetes NMState Operator 를 참조하십시오.

중요

OVN-Kubernetes 관리 Open vSwitch 브리지인 br-ex 브리지를 수정하는 구성은 지정할 수 없습니다. 그러나 사용자 지정 br-ex 브리지를 구성할 수 있습니다.

자세한 내용은 베어 메탈 문서에 설치 관리자 프로비저닝 클러스터 배포 또는 베어 메탈 문서에 사용자 프로비저닝 클러스터 설치의 " 사용자 지정 br- ex 브리지가 포함된 매니페스트 오브젝트 생성"을 참조하십시오.

1.1. CLI를 사용하여 노드의 네트워크 상태 보기

노드 네트워크 상태는 클러스터의 모든 노드에 대한 네트워크 구성입니다. NodeNetworkState 오브젝트는 클러스터의 모든 노드에 존재합니다. 이 오브젝트는 주기적으로 업데이트되며 해당 노드의 네트워크 상태를 캡처합니다.

절차

  1. 클러스터의 모든 NodeNetworkState 오브젝트를 나열합니다.

    $ oc get nns
    Copy to Clipboard Toggle word wrap
  2. NodeNetworkState 오브젝트를 검사하여 해당 노드의 네트워크를 확인합니다. 이 예제의 출력은 명확성을 위해 수정되었습니다.

    $ oc get nns node01 -o yaml
    Copy to Clipboard Toggle word wrap

    출력 예

    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
    Copy to Clipboard Toggle word wrap

    1
    NodeNetworkState 오브젝트의 이름은 노드에서 가져옵니다.
    2
    currentState에는 DNS, 인터페이스, 경로를 포함하여 노드에 대한 전체 네트워크 구성이 포함됩니다.
    3
    마지막으로 성공한 업데이트의 타임 스탬프 노드에 연결할 수 있는 동안 주기적으로 업데이트되고 보고서의 최신 상태를 평가하는 데 사용됩니다.

1.2. 웹 콘솔에서 노드의 네트워크 상태 보기

관리자는 OpenShift Container Platform 웹 콘솔을 사용하여 NodeNetworkState 리소스 및 네트워크 인터페이스를 관찰하고 네트워크 세부 정보에 액세스할 수 있습니다.

절차

  1. 네트워킹NodeNetworkState 로 이동합니다.

    NodeNetworkState 페이지에서 NodeNetworkState 리소스 목록과 노드에서 생성된 해당 인터페이스를 볼 수 있습니다. 인터페이스 상태 ,인터페이스 유형IP 또는 조건 이름 또는 라벨 을 기반으로 검색 막대를 기반으로 필터링 을 사용하여 표시된 NodeNetworkState 리소스를 좁힐 수 있습니다.

  2. NodeNetworkState 리소스에 대한 자세한 정보에 액세스하려면 Name 열에 나열된 NodeNetworkState 리소스 이름을 클릭합니다.
  3. NodeNetworkState 리소스에 대한 네트워크 세부 정보 섹션을 확장하고 보려면 > 아이콘을 클릭합니다. 또는 네트워크 인터페이스 열에서 각 인터페이스 유형을 클릭하여 네트워크 세부 정보를 볼 수 있습니다.

1.3. NodeNetworkConfigurationPolicy 매니페스트 파일

NodeNetworkConfigurationPolicy (NNCP) 매니페스트 파일은 Kubernetes NMState Operator가 OpenShift Container Platform 클러스터에 있는 노드의 네트워킹을 구성하는 데 사용하는 정책을 정의합니다.

노드에 노드 네트워크 정책을 적용한 후 Kubernetes NMState Operator는 노드 네트워크 정책 세부 정보에 따라 노드의 네트워킹 구성을 구성합니다.

OpenShift CLI(oc) 또는 OpenShift Container Platform 웹 콘솔을 사용하여 NNCP를 생성할 수 있습니다. 설치 후 작업으로 NNCP를 생성하거나 기존 NNCP를 편집할 수 있습니다.

참고

NNCP를 생성하기 전에 "다른 인터페이스의 예 정책 구성" 문서를 읽으십시오.

NNCP를 삭제하려면 oc delete nncp 명령을 사용하여 이 작업을 완료할 수 있습니다. 그러나 이 명령은 브리지 인터페이스와 같은 오브젝트를 삭제하지 않습니다.

노드에 인터페이스를 추가한 노드 네트워크 정책을 삭제해도 노드의 정책 구성은 변경되지 않습니다. 마찬가지로 Kubernetes NMState Operator는 Pod 또는 노드가 재시작될 때마다 제거된 인터페이스를 다시 추가하므로 인터페이스를 제거해도 정책은 삭제되지 않습니다.

NNCP, 노드 네트워크 정책 및 인터페이스를 효과적으로 삭제하려면 일반적으로 다음 작업이 필요합니다.

  1. NNCP를 편집하고 파일에서 인터페이스 세부 정보를 제거합니다. 파일에서 이름,상태유형 매개 변수를 제거하지 않는지 확인합니다.
  2. NNCP의 interfaces.state 섹션에 state: absent 를 추가합니다.
  3. oc apply -f <nncp_file_name> 을 실행합니다. Kubernetes NMState Operator가 클러스터의 각 노드에 노드 네트워크 정책을 적용한 후 각 노드에 존재하는 모든 인터페이스가 absent 로 표시됩니다.
  4. oc delete nncp 를 실행하여 NNCP를 삭제합니다.

추가 리소스

1.4. 웹 콘솔에서 정책 관리

NodeNetworkConfigurationPolicy 매니페스트를 클러스터에 적용하여 노드 네트워크 구성을 업데이트(예: 노드에서 인터페이스 추가 또는 제거)할 수 있습니다. Networking 메뉴의 NodeNetworkConfigurationPolicy 페이지에서 생성된 정책 목록에 액세스하여 웹 콘솔에서 정책을 관리합니다. 이 페이지에서는 정책을 생성, 업데이트, 모니터링 및 삭제할 수 있습니다.

1.4.1. 정책 상태 모니터링

NodeNetworkConfigurationPolicy 페이지에서 정책 상태를 모니터링할 수 있습니다. 이 페이지에는 다음 열이 포함된 테이블 형식으로 클러스터에서 생성된 모든 정책이 표시됩니다.

이름
생성된 정책의 이름입니다.
일치하는 노드
정책이 적용되는 노드의 수입니다. 노드 선택기를 기반으로 하는 노드의 하위 집합 또는 클러스터의 모든 노드일 수 있습니다.
노드 네트워크 상태
일치하는 노드의 시행 상태입니다. 시행 상태를 클릭하고 상태에 대한 자세한 정보를 볼 수 있습니다.

원하는 정책을 찾으려면 Filter 옵션을 사용하여 강제 상태를 기반으로 목록을 필터링하거나 검색 옵션을 사용하여 목록을 필터링할 수 있습니다.

1.4.2. 정책 생성

웹 콘솔에서 양식 또는 YAML을 사용하여 정책을 생성할 수 있습니다.

절차

  1. 네트워킹NodeNetworkConfigurationPolicy 로 이동합니다.
  2. NodeNetworkConfigurationPolicy 페이지에서 생성 을 클릭하고 양식에서 옵션을 선택합니다.

    기존 정책이 없는 경우 다른 방법으로 NodeNetworkConfigurationPolicy 생성 을 클릭하여 양식을 사용하여 정책을 생성할 수 있습니다.

    참고

    YAML을 사용하여 정책을 생성하려면 생성 을 클릭하고 YAML 함께 옵션을 선택합니다. 다음 단계는 양식을 사용하여 정책을 생성하는 데만 적용할 수 있습니다.

  3. 선택 사항: 노드 선택기 확인란을 사용하여 노드의 특정 하위 집합에만 이 NodeNetworkConfigurationPolicy를 적용하여 정책을 적용해야 하는 노드를 지정합니다.
  4. 정책 이름 필드에 정책 이름을 입력합니다.
  5. 선택 사항: 설명 필드에 정책에 대한 설명을 입력합니다.
  6. 선택 사항: 정책 인터페이스 섹션에서 브리지 인터페이스가 기본적으로 편집 가능한 필드에 사전 설정된 값으로 추가됩니다. 다음 단계를 실행하여 값을 편집합니다.

    1. 인터페이스 이름 필드에 인터페이스 이름을 입력합니다.
    2. 네트워크 상태 드롭다운에서 네트워크 상태를 선택합니다. 선택한 기본값은 Up 입니다.
    3. 유형 드롭다운에서 인터페이스 유형을 선택합니다. 사용 가능한 값은 Bridge,Bonding, 이더넷 입니다. 선택한 기본값은 Bridge 입니다.

      참고

      양식을 사용하여 VLAN 인터페이스 추가는 지원되지 않습니다. VLAN 인터페이스를 추가하려면 YAML을 사용하여 정책을 생성해야 합니다. 추가되면 양식을 사용하여 정책을 편집할 수 없습니다.

    4. 선택 사항: IP 구성 섹션에서 IPv4 주소를 선택하여 인터페이스에 IPv4 주소를 할당하고 IP 주소 할당 세부 정보를 구성합니다.

      1. IP 주소를 클릭하여 고정 IP 주소로 인터페이스를 구성하거나 DHCP 를 사용하여 IP 주소를 자동으로 할당합니다.
      2. IP 주소 옵션을 선택한 경우 IPV4 주소 필드에 IPv4 주소를 입력하고 접두사 길이 필드에 접두사 길이 입력합니다.

        DHCP 옵션을 선택한 경우 비활성화할 옵션을 선택 취소합니다. 사용 가능한 옵션은 Auto-DNS,Auto-routes, Auto-gateway 입니다. 모든 옵션은 기본적으로 선택됩니다.

    5. 선택 사항: 포트 필드에 포트 번호를 입력합니다.
    6. 선택 사항: Enable STP to enable STP를 선택합니다.
    7. 선택 사항: 정책에 인터페이스를 추가하려면 정책에 다른 인터페이스 추가를 클릭합니다.
    8. 선택 사항: 정책에서 인터페이스를 제거하려면 인터페이스 옆에 있는 아이콘을 클릭합니다.
    참고

    또는 페이지 상단에 있는 YAML 편집을 클릭하여 YAML을 사용하여 양식을 계속 편집할 수 있습니다.

  7. 생성 을 클릭하여 정책 생성을 완료합니다.

1.5. 정책 업데이트

1.5.1. 양식을 사용하여 정책 업데이트

절차

  1. 네트워킹NodeNetworkConfigurationPolicy 로 이동합니다.
  2. NodeNetworkConfigurationPolicy 페이지에서 편집할 정책 옆에 있는 kebab 아이콘을 클릭하고 편집을 클릭합니다.
  3. 업데이트할 필드를 편집합니다.
  4. 저장을 클릭합니다.
참고

양식을 사용한 VLAN 인터페이스 추가는 지원되지 않습니다. VLAN 인터페이스를 추가하려면 YAML을 사용하여 정책을 생성해야 합니다. 추가되면 양식을 사용하여 정책을 편집할 수 없습니다.

1.5.2. YAML을 사용하여 정책 업데이트

절차

  1. 네트워킹NodeNetworkConfigurationPolicy 로 이동합니다.
  2. NodeNetworkConfigurationPolicy 페이지에서 편집할 정책의 이름 열에서 정책 이름을 클릭합니다.
  3. YAML 탭을 클릭하고 YAML을 편집합니다.
  4. 저장을 클릭합니다.

1.5.3. 정책 삭제

절차

  1. 네트워킹NodeNetworkConfigurationPolicy 로 이동합니다.
  2. NodeNetworkConfigurationPolicy 페이지에서 삭제할 정책 옆에 있는 kebab 아이콘을 클릭하고 삭제 를 클릭합니다.
  3. 팝업 창에서 정책 이름을 입력하여 삭제를 확인하고 삭제를 클릭합니다.

1.6. CLI를 사용하여 정책 관리

1.6.1. 노드에서 인터페이스 만들기

NodeNetworkConfigurationPolicy (NNCP) 매니페스트를 클러스터에 적용하여 클러스터의 노드에서 인터페이스를 만듭니다. 매니페스트는 요청된 인터페이스 구성을 자세히 설명합니다.

기본적으로 매니페스트는 클러스터의 모든 노드에 적용됩니다. 특정 노드에 인터페이스를 추가하려면 spec: nodeSelector 매개변수와 노드 선택기에 적합한 <key>:<value>를 추가합니다.

nmstate 지원 노드를 동시에 여러 개 구성할 수 있습니다. 구성은 병렬로 노드의 50%에 적용됩니다. 이 전략을 사용하면 네트워크 연결에 실패하면 전체 클러스터를 사용할 수 없습니다. 클러스터의 특정 부분에 병렬로 정책 구성을 적용하려면 NodeNetworkConfigurationPolicy 매니페스트 구성 파일에서 maxUnavailable 매개변수를 사용합니다.

참고

두 개의 노드가 있고 maxUnavailable 매개변수가 50% 로 설정된 NNCP 매니페스트를 이러한 노드로 설정하면 한 번에 하나의 노드가 NNCP 구성을 수신합니다. 그런 다음 maxUnavailable 매개변수가 50% 로 설정된 추가 NNCP 매니페스트 파일을 도입하면 이CP는 초기 NNCP와 독립적입니다. 즉, 두 NNCP 매니페스트가 노드에 잘못된 구성을 적용하면 클러스터의 절반이 작동하는지 더 이상 보장할 수 없습니다.

프로세스

  1. 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
    Copy to Clipboard Toggle word wrap
    1
    정책 이름입니다.
    2
    선택 사항: nodeSelector 매개변수를 포함하지 않으면 정책이 클러스터의 모든 노드에 적용됩니다.
    3
    이 예제에서는 node-role.kubernetes.io/worker: "" 노드 선택기를 사용하여 클러스터의 모든 작업자 노드를 선택합니다.
    4
    선택 사항: 정책 구성을 동시에 적용할 수 있는 최대 nmstate 사용 노드 수를 지정합니다. 이 매개변수는 백분율 값(문자열), 예를 들어 "10%" 또는 절대 값(예: 3 )으로 설정할 수 있습니다.
    5
    선택 사항: 사람이 읽을 수 있는 인터페이스 설명입니다.
    6
    선택 사항: DNS 서버의 검색 및 서버 설정을 지정합니다.
  2. 노드 네트워크 정책을 생성합니다.

    $ oc apply -f br1-eth1-policy.yaml 
    1
    Copy to Clipboard Toggle word wrap
    1
    노드 네트워크 구성 정책 매니페스트의 파일 이름입니다.

추가 리소스

1.6.2. 노드에 노드 네트워크 정책 업데이트 확인

노드 네트워크 정책을 적용하면 클러스터의 모든 노드에 대해 NodeNetworkConfigurationEnactment 오브젝트가 생성됩니다. 노드 네트워크 구성 시행은 해당 노드에서 정책의 실행 상태를 나타내는 읽기 전용 오브젝트입니다. 정책이 노드에 적용되지 않으면 문제 해결을 위해 해당 노드에 대한 시행에 역추적이 포함됩니다.

절차

  1. 정책이 클러스터에 적용되었는지 확인하려면 정책과 해당 상태를 나열합니다.

    $ oc get nncp
    Copy to Clipboard Toggle word wrap
  2. 선택 사항: 정책을 구성하는 데 예상보다 오래 걸리는 경우 특정 정책의 요청된 상태 및 상태 조건을 검사할 수 있습니다.

    $ oc get nncp <policy> -o yaml
    Copy to Clipboard Toggle word wrap
  3. 선택 사항: 모든 노드에서 정책을 구성하는 데 예상보다 오래 걸리는 경우 클러스터의 시행 상태를 나열할 수 있습니다.

    $ oc get nnce
    Copy to Clipboard Toggle word wrap
  4. 선택 사항: 구성 실패에 대한 오류 보고를 포함하여 특정 시행의 구성을 확인하려면 다음 명령을 실행하십시오.

    $ oc get nnce <node>.<policy> -o yaml
    Copy to Clipboard Toggle word wrap

1.6.3. 노드에서 인터페이스 제거

NodeNetworkConfigurationPolicy 오브젝트를 편집하고 인터페이스의 state없음으로 설정하여 클러스터의 1개 이상의 노드에서 인터페이스를 제거할 수 있습니다.

노드에서 인터페이스를 제거해도 노드 네트워크 구성이 이전 상태로 자동 복원되지 않습니다. 이전 상태를 복원하려면 정책에서 노드 네트워크 구성을 정의해야 합니다.

브리지 또는 본딩 인터페이스를 제거하면 이전에 해당 브릿지 또는 본딩 인터페이스에 연결되었거나 종속되었던 클러스터의 모든 노드 NIC가 down 상태가 되어 연결할 수 없습니다. 연결 손실을 방지하기 위해, 노드 NIC를 동일한 정책으로 구성하여 DHCP 또는 고정 IP 주소의 상태를 up으로 구성합니다.

참고

인터페이스를 추가한 노드 네트워크 정책을 삭제해도 노드의 정책 구성은 변경되지 않습니다. NodeNetworkConfigurationPolicy 는 클러스터의 오브젝트이지만 오브젝트는 요청된 구성만 나타냅니다. 마찬가지로 인터페이스를 제거해도 정책은 삭제되지 않습니다.

절차

  1. 인터페이스를 생성하는 데 사용되는 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
    Copy to Clipboard Toggle word wrap
    1
    정책 이름입니다.
    2
    선택 사항: nodeSelector 매개변수를 포함하지 않으면 정책이 클러스터의 모든 노드에 적용됩니다.
    3
    이 예제에서는 node-role.kubernetes.io/worker: "" 노드 선택기를 사용하여 클러스터의 모든 작업자 노드를 선택합니다.
    4
    absent 상태로 변경하면 인터페이스가 제거됩니다.
    5
    브리지 인터페이스에서 연결을 해제할 인터페이스의 이름입니다.
    6
    인터페이스 유형입니다. 이 예제에서는 이더넷 네트워킹 인터페이스를 생성합니다.
    7
    인터페이스에 요청되는 상태입니다.
    8
    선택 사항: dhcp를 사용하지 않는 경우 고정 IP를 설정하거나 IP 주소 없이 인터페이스를 종료할 수 있습니다.
    9
    이 예제에서 ipv4를 활성화합니다.
  2. 노드에서 정책을 업데이트하고 인터페이스를 제거합니다.

    $ oc apply -f <br1-eth1-policy.yaml> 
    1
    Copy to Clipboard Toggle word wrap
    1
    정책 매니페스트의 파일 이름입니다.

1.7. 다양한 인터페이스에 대한 예제 정책 구성

다른 예제 NodeNetworkConfigurationPolicy (NNCP) 매니페스트 구성을 읽기 전에 노드에 정책을 적용할 때 최상의 성능 조건에서 클러스터가 실행되도록 다음 요인을 고려하십시오.

  • 둘 이상의 노드에 정책을 적용해야 하는 경우 각 대상 노드에 대한 NodeNetworkConfigurationPolicy 매니페스트를 생성합니다. Kubernetes NMState Operator는 정의된 NNCP를 사용하여 지정된 순서로 정책을 각 노드에 적용합니다. 이 방법을 사용하여 정책 범위를 지정하면 정책 애플리케이션의 기간이 단축되지만 클러스터 구성에 오류가 있는 경우 클러스터 전체에서 중단될 위험이 있습니다. 이러한 유형의 오류를 방지하려면 처음에 NNCP를 일부 노드에 적용하고 이러한 노드에 대해 NNCP가 올바르게 구성되었는지 확인한 다음 나머지 노드에 정책을 적용합니다.
  • 여러 노드에 정책을 적용해야 하지만 모든 노드에 대해 단일 NNCP만 생성하려는 경우 Kubernetes NMState Operator는 정책을 각 노드에 순서대로 적용합니다. 클러스터의 구성 파일에서 maxUnavailable 매개변수를 사용하여 대상 노드의 정책 애플리케이션 속도 및 범위를 설정할 수 있습니다. 매개변수의 백분율 낮은 값을 설정하면 중단이 정책 애플리케이션을 수신하는 노드의 소수에 영향을 미치는 경우 클러스터 전체 중단 위험을 줄일 수 있습니다.
  • NNCP 매니페스트에서 maxUnavailable 매개변수를 50% 로 설정하면 클러스터의 노드의 100%에 정책 구성 적용이 적용됩니다.
  • 노드가 다시 시작되면 Kubernetes NMState Operator는 노드에 정책을 적용하는 순서를 제어할 수 없습니다. Kubernetes NMState Operator는 성능이 저하된 네트워크 오브젝트를 생성하는 순서대로 상호 종속적인 정책을 적용할 수 있습니다.
  • 단일 정책에서 관련 네트워크 구성을 모두 지정하는 것이 좋습니다.

1.7.1. 예제: 이더넷 인터페이스 노드 네트워크 구성 정책

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
Copy to Clipboard Toggle word wrap
1
정책 이름입니다.
2
선택 사항: nodeSelector 매개변수를 포함하지 않으면 정책이 클러스터의 모든 노드에 적용됩니다.
3
이 예제에서는 hostname 노드 선택기를 사용합니다.
4
인터페이스 이름입니다.
5
선택 사항: 사람이 읽을 수 있는 인터페이스 설명입니다.
6
인터페이스 유형입니다. 이 예제에서는 이더넷 네트워킹 인터페이스를 생성합니다.
7
생성 후 인터페이스에 요청되는 상태입니다.
8
선택 사항: dhcp를 사용하지 않는 경우 고정 IP를 설정하거나 IP 주소 없이 인터페이스를 종료할 수 있습니다.
9
이 예제에서 ipv4를 활성화합니다.

1.7.2. 예: 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
Copy to Clipboard Toggle word wrap
1
정책 이름입니다.
2
선택 사항: nodeSelector 매개변수를 포함하지 않으면 정책이 클러스터의 모든 노드에 적용됩니다.
3
이 예제에서는 hostname 노드 선택기를 사용합니다.
4
인터페이스 이름입니다.
5
선택 사항: 사람이 읽을 수 있는 인터페이스 설명입니다.
6
인터페이스 유형입니다. 이 예제에서는 브리지를 만듭니다.
7
생성 후 인터페이스에 요청되는 상태입니다.
8
선택 사항: dhcp를 사용하지 않는 경우 고정 IP를 설정하거나 IP 주소 없이 인터페이스를 종료할 수 있습니다.
9
이 예제에서 ipv4를 활성화합니다.
10
이 예제에서 stp를 비활성화합니다.
11
브리지가 연결되는 노드 NIC입니다.

1.7.3. 예제: 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
Copy to Clipboard Toggle word wrap
1
정책 이름입니다.
2
선택 사항: nodeSelector 매개변수를 포함하지 않으면 정책이 클러스터의 모든 노드에 적용됩니다.
3
이 예제에서는 hostname 노드 선택기를 사용합니다.
4
인터페이스 이름입니다. 베어 메탈에 배포하는 경우 < interface_name>.<vlan_number > VLAN 형식만 지원됩니다.
5
선택 사항: 사람이 읽을 수 있는 인터페이스 설명입니다.
6
인터페이스 유형입니다. 이 예제에서는 VLAN을 만듭니다.
7
생성 후 인터페이스에 요청되는 상태입니다.
8
VLAN이 연결되는 노드 NIC입니다.
9
VLAN 태그입니다.

1.7.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
Copy to Clipboard Toggle word wrap
1
정책 이름입니다.
2
선택 사항: nodeSelector 매개변수를 포함하지 않으면 정책이 클러스터의 모든 노드에 적용됩니다.
3
이 예제에서는 hostname 노드 선택기를 사용합니다.
4
인터페이스 이름입니다.
5
선택 사항: 사람이 읽을 수 있는 인터페이스 설명입니다.
6
인터페이스 유형입니다. 이 예제에서는 본딩을 생성합니다.
7
생성 후 인터페이스에 요청되는 상태입니다.
8
선택 사항: dhcp를 사용하지 않는 경우 고정 IP를 설정하거나 IP 주소 없이 인터페이스를 종료할 수 있습니다.
9
이 예제에서 ipv4를 활성화합니다.
10
본딩의 드라이버 모드입니다. 이 예제에서는 활성 백업 모드를 사용합니다.
11
선택 사항: 이 예제에서는 miimon을 사용하여 140ms마다 본딩 링크를 검사합니다.
12
본딩의 하위 노드 NIC입니다.
13
선택 사항: 본딩의 MTU(최대 전송 단위)입니다. 지정하지 않는 경우 이 값은 기본적으로 1500으로 설정됩니다.

1.7.5. 예제: 노드 네트워크 구성 정책이 동일한 여러 인터페이스

동일한 노드 네트워크 구성 정책으로 여러 개의 인터페이스를 생성할 수 있습니다. 이러한 인터페이스는 서로를 참조할 수 있으므로 단일 정책 매니페스트를 사용하여 네트워크 구성을 빌드하고 배포할 수 있습니다.

다음 예제 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
Copy to Clipboard Toggle word wrap
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를 활성화합니다.

1.7.6. 예: 가상 기능을 위한 노드 네트워크 구성 정책

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
Copy to Clipboard Toggle word wrap
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
Copy to Clipboard Toggle word wrap
1
정책 이름입니다.
2
선택 사항: nodeSelector 매개변수를 포함하지 않으면 정책이 클러스터의 모든 노드에 적용됩니다.
3
이 예제에서는 작업자 역할이 있는 모든 노드에 적용됩니다.
4
VF 네트워크 인터페이스의 이름입니다.
5
생성할 VF 수입니다.
6
활성 및 백업 VF 간의 장애 조치 본딩을 허용하도록 설정
7
VLAN의 ID입니다. 이 예제에서는 하드 오프로드를 사용하여 VF에서 직접 VLAN을 정의합니다.
8
본딩 네트워크 인터페이스의 이름입니다.
9
선택 사항: 사람이 읽을 수 있는 인터페이스 설명입니다.
10
인터페이스 유형입니다.
11
구성 후 인터페이스에 요청된 상태입니다.
12
본딩에 대한 본딩 정책입니다.
13
연결된 기본 본딩 포트입니다.
14
본딩된 네트워크 인터페이스의 포트입니다.
15
이 예에서는 VLAN 네트워크 인터페이스가 본딩된 네트워크 인터페이스에 추가 인터페이스로 추가됩니다.

NodeNetworkConfigurationPolicy CR(사용자 정의 리소스)을 적용하여 VRF(Virtual Routing and Forwarding) 인스턴스를 네트워크 인터페이스와 연결합니다.

중요

VRF 인스턴스를 네트워크 인터페이스와 연결하는 것은 기술 프리뷰 기능 전용입니다. 기술 프리뷰 기능은 Red Hat 프로덕션 서비스 수준 계약(SLA)에서 지원되지 않으며 기능적으로 완전하지 않을 수 있습니다. 따라서 프로덕션 환경에서 사용하는 것은 권장하지 않습니다. 이러한 기능을 사용하면 향후 제품 기능을 조기에 이용할 수 있어 개발 과정에서 고객이 기능을 테스트하고 피드백을 제공할 수 있습니다.

Red Hat 기술 프리뷰 기능의 지원 범위에 대한 자세한 내용은 기술 프리뷰 기능 지원 범위를 참조하십시오.

VRF 인스턴스를 네트워크 인터페이스와 연결하면 트래픽 격리, 독립적인 라우팅 결정 및 네트워크 리소스의 논리적 분리를 지원할 수 있습니다.

주의

VRF(Virtual Route Forwarding)를 구성할 때 값이 OpenShift Container Platform용으로 예약되므로 VRF 값을 1000 보다 낮은 테이블 ID로 변경해야 합니다.

베어 메탈 환경에서는 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
Copy to Clipboard Toggle word wrap
1
정책의 이름입니다.
2
이 예제에서는 vrf:true 레이블이 있는 모든 노드에 정책을 적용합니다.
3
인터페이스의 이름입니다.
4
인터페이스 유형입니다. 이 예에서는 VRF 인스턴스를 생성합니다.
5
VRF가 연결하는 노드 인터페이스입니다.
6
VRF의 경로 테이블 ID의 이름입니다.

1.8. 노드에서 InfiniBand 인터페이스를 통해 IP 생성

OpenShift Container Platform 웹 콘솔에서는 InfiniBand (IPoIB) 모드를 지원하는 NVIDIA Network Operator와 같은 Red Hat 인증 타사 Operator를 설치할 수 있습니다. 일반적으로 타사 Operator를 다른 벤더 인프라와 함께 사용하여 OpenShift Container Platform 클러스터에서 리소스를 관리합니다. 클러스터의 노드에 IPoIB 인터페이스를 생성하려면 NodeNetworkConfigurationPolicy (NNCP) 매니페스트 파일에 InfiniBand(IPoIB) 인터페이스를 정의해야 합니다.

중요

OpenShift Container Platform 문서에서는NNCP( NodeNetworkConfigurationPolicy ) 매니페스트 파일에서 IPoIB 인터페이스 구성만 정의합니다. 대부분의 구성 단계는 NVIDIA 및 기타 타사 공급 업체 설명서를 참조해야 합니다. Red Hat 지원은 NNCP 구성 외부로 확장되지 않습니다.

NVIDIA Operator에 대한 자세한 내용은 Red Hat OpenShift 시작하기 (NVIDIA Docs Hub)를 참조하십시오.

사전 요구 사항

  • IPoIB 인터페이스를 지원하는 Red Hat 인증 타사 Operator를 설치했습니다.

프로세스

  1. NodeNetworkConfigurationPolicy (NNCP) 매니페스트 파일을 생성하거나 편집한 다음 파일에 IPoIB 인터페이스를 지정합니다.

    apiVersion: nmstate.io/v1
    kind: NodeNetworkConfigurationPolicy
    metadata:
      name: worker-0-ipoib
    spec:
    # ...
        interfaces:
        - description: ""
          infiniband:
            mode: datagram 
    1
    
            pkey: "0xffff" 
    2
    
          ipv4:
            address:
            - ip: 100.125.3.4
              prefix-length: 16
            dhcp: false
            enabled: true
          ipv6:
            enabled: false
          name: ibp27s0
          state: up
          identifier: mac-address 
    3
    
          mac-address: 20:00:55:04:01:FE:80:00:00:00:00:00:00:00:02:C9:02:00:23:13:92 
    4
    
          type: infiniband 
    5
    
    # ...
    Copy to Clipboard Toggle word wrap
    1
    데이터그램은 IPoIB 인터페이스의 기본 모드이며, 이 모드에서는 성능과 대기 시간을 최적화합니다. 연결 모드는 지원되는 모드이지만 주변 네트워크 장치와의 노드 연결을 개선하기 위해 최대 전송 단위(MTU) 값을 조정해야 하는 경우에만 이 모드를 사용하는 것이 좋습니다.
    2
    문자열 또는 정수 값을 지원합니다. 매개 변수는 인증 및 NVIDIA와 같은 타사 공급 업체와의 암호화된 통신을 위해 인터페이스에 대해 보호 키 또는 P-키를 정의합니다. 값 None0xffff 는 InfiniBand 시스템의 기본 인터페이스에 대한 보호 키를 나타냅니다.
    3
    지원되는 값에는 이름, 기본값, mac-address 가 포함됩니다. name 값은 지정된 인터페이스 이름을 포함하는 인터페이스에 구성을 적용합니다.
    4
    인터페이스의 MAC 주소를 보유합니다. IP-over-InfiniBand(IPoIB) 인터페이스의 경우 주소는 20바이트 문자열입니다.
    5
    인터페이스 유형을 infiniband 로 설정합니다.
  2. 다음 명령을 실행하여 클러스터의 각 노드에 NNCP 구성을 적용합니다. 그러면 Kubernetes NMState Operator에서 각 노드에 IPoIB 인터페이스를 생성할 수 있습니다.

    $ oc apply -f <nncp_file_name> 
    1
    Copy to Clipboard Toggle word wrap
    1
    & lt;nncp_file_name& gt;을 NNCP 파일의 이름으로 바꿉니다.

1.9. 브리지에 연결된 NIC의 고정 IP 캡처

중요

NIC의 고정 IP 캡처는 기술 프리뷰 기능 전용입니다. 기술 프리뷰 기능은 Red Hat 프로덕션 서비스 수준 계약(SLA)에서 지원되지 않으며 기능적으로 완전하지 않을 수 있습니다. 따라서 프로덕션 환경에서 사용하는 것은 권장하지 않습니다. 이러한 기능을 사용하면 향후 제품 기능을 조기에 이용할 수 있어 개발 과정에서 고객이 기능을 테스트하고 피드백을 제공할 수 있습니다.

Red Hat 기술 프리뷰 기능의 지원 범위에 대한 자세한 내용은 기술 프리뷰 기능 지원 범위를 참조하십시오.

클러스터의 노드에서 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 }}"
Copy to Clipboard Toggle word wrap
1
정책의 이름입니다.
2
선택 사항: nodeSelector 매개변수를 포함하지 않으면 정책이 클러스터의 모든 노드에 적용됩니다. 이 예제에서는 node-role.kubernetes.io/worker: "" 노드 선택기를 사용하여 클러스터의 모든 작업자 노드를 선택합니다.
3
브리지가 연결되는 노드 NIC에 대한 참조입니다.
4
인터페이스 유형입니다. 이 예제에서는 브리지를 만듭니다.
5
브리지 인터페이스의 IP 주소입니다. 이 값은 spec.capture.eth1-nic 항목에서 참조하는 NIC의 IP 주소와 일치합니다.
6
브리지가 연결되는 노드 NIC입니다.

1.10. 예제: IP 관리

다음 예제 구성 스니펫에서는 다양한 IP 관리 방법을 보여줍니다.

이 예제에서는 ethernet 인터페이스 유형을 사용하여 예제를 단순화하면서 정책 구성에 관련 컨텍스트를 표시합니다. 이러한 IP 관리 예제는 다른 인터페이스 유형과 함께 사용할 수 있습니다.

1.10.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
# ...
Copy to Clipboard Toggle word wrap
1
이 값을 인터페이스의 고정 IP 주소로 교체합니다.

1.10.2. IP 주소 없음

다음 스니펫에서는 인터페이스에 IP 주소가 없습니다.

# ...
    interfaces:
    - name: eth1
      description: No IP on eth1
      type: ethernet
      state: up
      ipv4:
        enabled: false
# ...
Copy to Clipboard Toggle word wrap
중요

ipv4.enabledipv6.enabled 매개변수를 모두 false 로 설정하여 인터페이스를 비활성화할 때 항상 state 매개변수를 up 으로 설정합니다. 이 구성을 사용하여 state: down 을 설정하면 자동 DHCP 할당으로 인해 인터페이스에 DHCP IP 주소가 수신됩니다.

1.10.3. 동적 호스트 구성

다음 스니펫에서는 동적 IP 주소, 게이트웨이 주소, DNS를 사용하는 이더넷 인터페이스를 구성합니다.

# ...
    interfaces:
    - name: eth1
      description: DHCP on eth1
      type: ethernet
      state: up
      ipv4:
        dhcp: true
        enabled: true
# ...
Copy to Clipboard Toggle word wrap

다음 스니펫에서는 동적 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
# ...
Copy to Clipboard Toggle word wrap

1.10.4. MAC(Media Access Control) 주소

MAC 주소를 사용하여 네트워크 인터페이스 이름을 사용하는 대신 네트워크 인터페이스를 식별할 수 있습니다. 네트워크 인터페이스 이름은 운영 체제 구성 변경과 같은 다양한 이유로 변경될 수 있습니다. 그러나 모든 네트워크 인터페이스에는 변경되지 않는 고유한 MAC 주소가 있습니다. 즉, MAC 주소를 사용하는 것은 특정 네트워크 인터페이스를 식별하는 더 영구적인 방법입니다.

identifier 매개변수에 지원되는 값에는 기본 name 값과 mac-address 값이 포함됩니다. name 값은 지정된 인터페이스 이름을 포함하는 인터페이스에 구성을 적용합니다.

identifier 매개변수에 mac-address 값을 사용하면 MAC 주소가 네트워크 인터페이스의 식별자임을 나타냅니다. ID 값을 mac-address 로 설정하는 경우 다음 mac-address 매개변수 필드에 특정 MAC 주소를 입력해야 합니다.

참고

name 매개변수의 값을 계속 지정할 수 있지만 identifier: mac-address 값을 설정하면 MAC 주소가 네트워크 인터페이스의 기본 식별자로 사용됩니다. 잘못된 MAC 주소를 지정하면 nmstate 에서 잘못된 인수 오류를 보고합니다.

다음 스니펫은 MAC 주소가 8A:8C:92:1A:F6:98 인 이더넷 장치의 기본 식별자로 MAC 주소를 지정합니다.

# ...
interfaces:
- name: eth1
  profile-name: wan0
  type: ethernet
  state: up
  identifier: mac-address
  mac-address: 8A:8C:92:1A:F6:98
# ...
Copy to Clipboard Toggle word wrap

1.10.5. DNS

기본적으로 nmstate API는 네트워크 인터페이스에 저장하는 대신 전역적으로 DNS 값을 저장합니다. 특정 상황에서는 DNS 값을 저장하도록 네트워크 인터페이스를 구성해야 합니다.

작은 정보

DNS 구성을 설정하는 것은 /etc/resolv.conf 파일을 수정하는 것과 동일합니다.

네트워크 인터페이스에 대한 DNS 구성을 정의하려면 처음에 네트워크 인터페이스의 YAML 구성 파일에서 dns-resolver 섹션을 지정해야 합니다. 네트워크 인터페이스에 NNCP 구성을 적용하려면 oc apply -f <nncp_file_name> 명령을 실행해야 합니다.

다음 예제에서는 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
    # ...
    Copy to Clipboard Toggle word wrap

    중요

    다음 예에 설명된 대로 NNCP 파일의 dns-resolver.config 섹션에 DNS 옵션을 지정할 수 있습니다.

    # ...
    desiredState:
        dns-resolver:
          config:
            options:
             - timeout:2
             - attempts:3
    # ...
    Copy to Clipboard Toggle word wrap

    네트워크 인터페이스에서 DNS 옵션을 제거하려면 다음 구성을 NNCP에 적용한 다음 oc apply -f <nncp_file_name > 명령을 실행합니다.

    # ...
        dns-resolver:
          config: {}
        interfaces: []
    # ...
    Copy to Clipboard Toggle word wrap

다음 예제에서는 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
    # ...
    Copy to Clipboard Toggle word wrap

  • 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
    # ...
    Copy to Clipboard Toggle word wrap

  • 네트워크 인터페이스에 정적 DNS 검색 도메인 및 동적 DNS 이름 서버를 설정하려면 DHCP(Dynamic Host Configuration Protocol) 또는 네트워크 인터페이스 YAML 구성 파일에서 IPv6 자동 구성(autoconf) 메커니즘을 실행하는 동적 인터페이스를 정의합니다.

    동적 DNS 이름 서버 설정과 함께 example.comexample.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
    # ...
    Copy to Clipboard Toggle word wrap

1.10.6. 고정 라우팅

다음 스니펫에서는 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
# ...
Copy to Clipboard Toggle word wrap
1
이더넷 인터페이스의 고정 IP 주소입니다.
2
노드 트래픽의 다음 홉 주소입니다. 이더넷 인터페이스에 설정된 IP 주소와 동일한 서브넷에 있어야 합니다.
중요

사용자 지정 br-ex 브리지를 수동으로 구성하지 않으면 정적 경로를 구성할 때 OVN-Kubernetes br-ex 브리지를 다음 홉 인터페이스로 사용할 수 없습니다.

자세한 내용은 베어 메탈 문서에 설치 관리자 프로비저닝 클러스터 배포 또는 베어 메탈 문서에 사용자 프로비저닝 클러스터 설치의 " 사용자 지정 br- ex 브리지가 포함된 매니페스트 오브젝트 생성"을 참조하십시오.

2장. 노드 네트워크 구성 문제 해결

노드 네트워크 구성에 문제가 발생하면 정책이 자동으로 롤백되고 시행이 실패로 보고됩니다. 여기에는 다음과 같은 문제가 포함됩니다.

  • 호스트에 구성을 적용하지 못했습니다.
  • 호스트와 기본 게이트웨이의 연결이 끊어졌습니다.
  • 호스트와 API 서버의 연결이 끊어졌습니다.

2.1. 잘못된 노드 네트워크 구성 정책의 구성 문제 해결

노드 네트워크 구성 정책을 적용하여 전체 클러스터에 노드 네트워크 구성 변경 사항을 적용할 수 있습니다.

잘못된 구성을 적용한 경우 다음 예제를 사용하여 실패한 노드 네트워크 정책의 문제를 해결하고 수정할 수 있습니다. 이 예제에서는 컨트롤 플레인 노드와 컴퓨팅 노드 3개가 있는 클러스터에 Linux 브리지 정책을 적용하려고 합니다. 정책이 잘못된 인터페이스를 참조하므로 정책이 적용되지 않습니다.

오류를 찾으려면 사용 가능한 NMState 리소스를 조사해야 합니다. 그런 다음 올바른 구성으로 정책을 업데이트할 수 있습니다.

사전 요구 사항

  • Linux 시스템에 ens01 인터페이스가 없는지 확인합니다.

절차

  1. 클러스터에 정책을 생성합니다. 다음 예제에서는 멤버로 ens01 이 있는 간단한 브리지 br1 을 생성합니다.

    apiVersion: nmstate.io/v1
    kind: NodeNetworkConfigurationPolicy
    metadata:
      name: ens01-bridge-testfail
    spec:
      desiredState:
        interfaces:
          - name: br1
            description: Linux bridge with the wrong port
            type: linux-bridge
            state: up
            ipv4:
              dhcp: true
              enabled: true
            bridge:
              options:
                stp:
                  enabled: false
              port:
                - name: ens01
    # ...
    Copy to Clipboard Toggle word wrap
  2. 네트워크 인터페이스에 정책을 적용합니다.

    $ oc apply -f ens01-bridge-testfail.yaml
    Copy to Clipboard Toggle word wrap

    출력 예

    nodenetworkconfigurationpolicy.nmstate.io/ens01-bridge-testfail created
    Copy to Clipboard Toggle word wrap

  3. 다음 명령을 실행하여 정책의 상태를 확인합니다.

    $ oc get nncp
    Copy to Clipboard Toggle word wrap

    출력에 정책이 실패했다는 내용이 표시됩니다.

    출력 예

    NAME                    STATUS
    ens01-bridge-testfail   FailedToConfigure
    Copy to Clipboard Toggle word wrap

    정책 상태만으로는 모든 노드에서 실패했는지 또는 노드의 하위 집합에서 실패했는지를 나타내지 않습니다.

  4. 노드 네트워크 구성 시행을 나열하여 정책이 모든 노드에서 성공적인지 확인합니다. 정책이 노드 서브 세트에서만 실패한 경우 출력에 특정 노드 구성에 문제가 있음을 나타냅니다. 정책이 모든 노드에서 실패하면 출력에 문제가 정책에 있음을 나타냅니다.

    $ oc get nnce
    Copy to Clipboard Toggle word wrap

    출력에 정책이 모든 노드에서 실패했다는 내용이 표시됩니다.

    출력 예

    NAME                                         STATUS
    control-plane-1.ens01-bridge-testfail        FailedToConfigure
    control-plane-2.ens01-bridge-testfail        FailedToConfigure
    control-plane-3.ens01-bridge-testfail        FailedToConfigure
    compute-1.ens01-bridge-testfail              FailedToConfigure
    compute-2.ens01-bridge-testfail              FailedToConfigure
    compute-3.ens01-bridge-testfail              FailedToConfigure
    Copy to Clipboard Toggle word wrap

  5. 실패한 시행 중 하나를 봅니다. 다음 명령은 출력 툴 jsonpath를 사용하여 출력을 필터링합니다.

    $ oc get nnce compute-1.ens01-bridge-testfail -o jsonpath='{.status.conditions[?(@.type=="Failing")].message}'
    Copy to Clipboard Toggle word wrap

    출력 예

    [2024-10-10T08:40:46Z INFO  nmstatectl] Nmstate version: 2.2.37
    NmstateError: InvalidArgument: Controller interface br1 is holding unknown port ens01
    Copy to Clipboard Toggle word wrap

    이전 예제에서는 ens01 이 알 수 없는 포트임을 나타내는 InvalidArgument 오류의 출력을 보여줍니다. 이 예에서는 정책 구성 파일에서 포트 구성을 변경해야 할 수 있습니다.

  6. 정책이 제대로 구성되었는지 확인하기 위해 NodeNetworkState 오브젝트를 요청하여 하나 또는 모든 노드의 네트워크 구성을 확인합니다. 다음 명령에서는 control-plane-1 노드의 네트워크 구성을 반환합니다.

    $ oc get nns control-plane-1 -o yaml
    Copy to Clipboard Toggle word wrap

    출력에 노드의 인터페이스 이름이 ens1인데 실패한 정책에서 ens01로 잘못 사용하고 있다는 내용이 표시됩니다.

    출력 예

       - ipv4:
    # ...
          name: ens1
          state: up
          type: ethernet
    Copy to Clipboard Toggle word wrap

  7. 기존 정책을 편집하여 오류를 수정합니다.

    $ oc edit nncp ens01-bridge-testfail
    Copy to Clipboard Toggle word wrap
    # ...
              port:
                - name: ens1
    Copy to Clipboard Toggle word wrap

    정책을 저장하여 수정 사항을 적용합니다.

  8. 정책 상태를 확인하여 업데이트가 완료되었는지 확인합니다.

    $ oc get nncp
    Copy to Clipboard Toggle word wrap

    출력 예

    NAME                    STATUS
    ens01-bridge-testfail   SuccessfullyConfigured
    Copy to Clipboard Toggle word wrap

    업데이트된 정책이 클러스터의 모든 노드에 성공적으로 구성되었습니다.

2.2. 연결이 끊긴 환경에서 DNS 연결 문제 해결

연결이 끊긴 환경에서 nmstate 를 구성할 때 DNS 연결 문제가 발생하는 경우 DNS 서버를 구성하여 도메인 root-servers.net 의 이름 서버 목록을 확인할 수 있습니다.

중요

DNS 서버에 root-servers.net 영역의 이름 서버(NS) 항목이 포함되어 있는지 확인합니다. DNS 서버는 쿼리를 업스트림 리졸버에 전달할 필요가 없지만 서버는 NS 쿼리에 대한 올바른 응답을 반환해야합니다.

2.2.1. server라는 bind9 DNS 구성

bind9 DNS 서버를 쿼리하도록 구성된 클러스터의 경우 root-servers.net 영역을 하나 이상의 NS 레코드가 포함된 구성 파일에 추가할 수 있습니다. 예를 들어 /var/named/named.localhost 를 이 기준과 일치하는 영역 파일로 사용할 수 있습니다.

프로세스

  1. 다음 명령을 실행하여 /etc/named.conf 구성 파일 끝에 root-servers.net 영역을 추가합니다.

    $ cat >> /etc/named.conf <<EOF
    zone "root-servers.net" IN {
        	type master;
        	file "named.localhost";
    };
    EOF
    Copy to Clipboard Toggle word wrap
  2. 다음 명령을 실행하여 named 서비스를 다시 시작합니다.

    $ systemctl restart named
    Copy to Clipboard Toggle word wrap
  3. 다음 명령을 실행하여 root-servers.net 영역이 있는지 확인합니다.

    $ journalctl -u named|grep root-servers.net
    Copy to Clipboard Toggle word wrap

    출력 예

    Jul 03 15:16:26 rhel-8-10 bash[xxxx]: zone root-servers.net/IN: loaded serial 0
    Jul 03 15:16:26 rhel-8-10 named[xxxx]: zone root-servers.net/IN: loaded serial 0
    Copy to Clipboard Toggle word wrap

  4. 다음 명령을 실행하여 DNS 서버에서 root-servers.net 도메인의 NS 레코드를 확인할 수 있는지 확인합니다.

    $ host -t NS root-servers.net. 127.0.0.1
    Copy to Clipboard Toggle word wrap

    출력 예

    Using domain server:
    Name: 127.0.0.1
    Address: 127.0.0.53
    Aliases:
    root-servers.net name server root-servers.net.
    Copy to Clipboard Toggle word wrap

2.2.2. dnsmasq DNS 서버 구성

dnsmasq 를 DNS 서버로 사용하는 경우, 사용자가 지정하는 DNS 서버를 사용하여 root-servers.net 을 확인하는 새 구성 파일을 생성하여 root-servers.net 도메인의 확인을 다른 DNS 서버에 위임할 수 있습니다.

  1. 다음 명령을 실행하여 도메인 root-servers.net 을 다른 DNS 서버에 위임하는 구성 파일을 생성합니다.

    $ echo 'server=/root-servers.net/<DNS_server_IP>'> /etc/dnsmasq.d/delegate-root-servers.net.conf
    Copy to Clipboard Toggle word wrap
  2. 다음 명령을 실행하여 dnsmasq 서비스를 다시 시작합니다.

    $ systemctl restart dnsmasq
    Copy to Clipboard Toggle word wrap
  3. 다음 명령을 실행하여 root-servers.net 도메인이 다른 DNS 서버에 위임되었는지 확인합니다.

    $ journalctl -u dnsmasq|grep root-servers.net
    Copy to Clipboard Toggle word wrap

    출력 예

    Jul 03 15:31:25 rhel-8-10 dnsmasq[1342]: using nameserver 192.168.1.1#53 for domain root-servers.net
    Copy to Clipboard Toggle word wrap

  4. 다음 명령을 실행하여 DNS 서버에서 root-servers.net 도메인의 NS 레코드를 확인할 수 있는지 확인합니다.

    $ host -t NS root-servers.net. 127.0.0.1
    Copy to Clipboard Toggle word wrap

    출력 예

    Using domain server:
    Name: 127.0.0.1
    Address: 127.0.0.1#53
    Aliases:
    root-servers.net name server root-servers.net.
    Copy to Clipboard Toggle word wrap

Legal Notice

Copyright © 2025 Red Hat

OpenShift documentation is licensed under the Apache License 2.0 (https://www.apache.org/licenses/LICENSE-2.0).

Modified versions must remove all Red Hat trademarks.

Portions adapted from https://github.com/kubernetes-incubator/service-catalog/ with modifications by Red Hat.

Red Hat, Red Hat Enterprise Linux, the Red Hat logo, the Shadowman logo, JBoss, OpenShift, Fedora, the Infinity logo, and RHCE are trademarks of Red Hat, Inc., registered in the United States and other countries.

Linux® is the registered trademark of Linus Torvalds in the United States and other countries.

Java® is a registered trademark of Oracle and/or its affiliates.

XFS® is a trademark of Silicon Graphics International Corp. or its subsidiaries in the United States and/or other countries.

MySQL® is a registered trademark of MySQL AB in the United States, the European Union and other countries.

Node.js® is an official trademark of Joyent. Red Hat Software Collections is not formally related to or endorsed by the official Joyent Node.js open source or commercial project.

The OpenStack® Word Mark and OpenStack logo are either registered trademarks/service marks or trademarks/service marks of the OpenStack Foundation, in the United States and other countries and are used with the OpenStack Foundation’s permission. We are not affiliated with, endorsed or sponsored by the OpenStack Foundation, or the OpenStack community.

All other trademarks are the property of their respective owners.

맨 위로 이동
Red Hat logoGithubredditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 문서 정보

Red Hat을 사용하는 고객은 신뢰할 수 있는 콘텐츠가 포함된 제품과 서비스를 통해 혁신하고 목표를 달성할 수 있습니다. 최신 업데이트를 확인하세요.

보다 포괄적 수용을 위한 오픈 소스 용어 교체

Red Hat은 코드, 문서, 웹 속성에서 문제가 있는 언어를 교체하기 위해 최선을 다하고 있습니다. 자세한 내용은 다음을 참조하세요.Red Hat 블로그.

Red Hat 소개

Red Hat은 기업이 핵심 데이터 센터에서 네트워크 에지에 이르기까지 플랫폼과 환경 전반에서 더 쉽게 작업할 수 있도록 강화된 솔루션을 제공합니다.

Theme

© 2025 Red Hat