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

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

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

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

노드 네트워크 구성 정책을 적용하여 전체 클러스터에 노드 네트워크 구성 변경 사항을 적용할 수 있습니다. 잘못된 구성을 적용하는 경우 다음 예제를 사용하여 실패한 노드 네트워크 정책의 문제를 해결하고 수정할 수 있습니다.

이 예제에서는 마스터 노드와 작업자 노드가 각각 3개씩 있는 예제 클러스터에 Linux 브리지 정책을 적용합니다. 이 정책은 잘못된 인터페이스를 참조하므로 적용되지 않습니다. 오류를 찾기 위해 사용 가능한 nmstate 리소스를 조사합니다. 그런 다음 올바른 구성으로 정책을 업데이트할 수 있습니다.

절차

  1. 정책을 생성하여 클러스터에 적용합니다. 다음 예제에서는 ens01 인터페이스에서 간단한 브리지를 생성합니다.

    apiVersion: nmstate.io/v1alpha1
    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
    $ oc apply -f ens01-bridge-testfail.yaml

    출력 예

    nodenetworkconfigurationpolicy.nmstate.io/ens01-bridge-testfail created

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

    $ oc get nncp

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

    출력 예

    NAME                    STATUS
    ens01-bridge-testfail   FailedToConfigure

    그러나 정책 상태만으로는 모든 노드에서 실패했는지 노드 서브 세트에서 실패했는지 알 수 없습니다.

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

    $ oc get nnce

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

    출력 예

    NAME                                   STATUS
    master-1.ens01-bridge-testfail         FailedToConfigure
    master-2.ens01-bridge-testfail         FailedToConfigure
    master-3.ens01-bridge-testfail         FailedToConfigure
    worker-1.ens01-bridge-testfail         FailedToConfigure
    worker-2.ens01-bridge-testfail         FailedToConfigure
    worker-3.ens01-bridge-testfail         FailedToConfigure

  4. 실패한 시행 중 하나에서 역추적을 살펴봅니다. 다음 명령은 출력 툴 jsonpath를 사용하여 출력을 필터링합니다.

    $ oc get nnce worker-1.ens01-bridge-testfail -o jsonpath='{.status.conditions[?(@.type=="Failing")].message}'

    이 명령은 간결하게 편집된 대규모 역추적 정보를 반환합니다.

    출력 예

    error reconciling NodeNetworkConfigurationPolicy at desired state apply: , failed to execute nmstatectl set --no-commit --timeout 480: 'exit status 1' ''
    ...
    libnmstate.error.NmstateVerificationError:
    desired
    =======
    ---
    name: br1
    type: linux-bridge
    state: up
    bridge:
      options:
        group-forward-mask: 0
        mac-ageing-time: 300
        multicast-snooping: true
        stp:
          enabled: false
          forward-delay: 15
          hello-time: 2
          max-age: 20
          priority: 32768
      port:
      - name: ens01
    description: Linux bridge with the wrong port
    ipv4:
      address: []
      auto-dns: true
      auto-gateway: true
      auto-routes: true
      dhcp: true
      enabled: true
    ipv6:
      enabled: false
    mac-address: 01-23-45-67-89-AB
    mtu: 1500
    
    current
    =======
    ---
    name: br1
    type: linux-bridge
    state: up
    bridge:
      options:
        group-forward-mask: 0
        mac-ageing-time: 300
        multicast-snooping: true
        stp:
          enabled: false
          forward-delay: 15
          hello-time: 2
          max-age: 20
          priority: 32768
      port: []
    description: Linux bridge with the wrong port
    ipv4:
      address: []
      auto-dns: true
      auto-gateway: true
      auto-routes: true
      dhcp: true
      enabled: true
    ipv6:
      enabled: false
    mac-address: 01-23-45-67-89-AB
    mtu: 1500
    
    difference
    ==========
    --- desired
    +++ current
    @@ -13,8 +13,7 @@
           hello-time: 2
           max-age: 20
           priority: 32768
    -  port:
    -  - name: ens01
    +  port: []
     description: Linux bridge with the wrong port
     ipv4:
       address: []
      line 651, in _assert_interfaces_equal\n    current_state.interfaces[ifname],\nlibnmstate.error.NmstateVerificationError:

    NmstateVerificationErrordesired 정책 구성, 노드에 있는 정책의 current 구성, 일치하지 않는 매개변수를 강조하는 difference를 나열합니다. 이 예에서 portdifference에 포함되어 있으며, 이는 정책의 포트 구성이 문제임을 나타냅니다.

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

    $ oc get nns master-1 -o yaml

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

    출력 예

       - ipv4:
     ...
          name: ens1
          state: up
          type: ethernet

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

    $ oc edit nncp ens01-bridge-testfail
    ...
              port:
                - name: ens1

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

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

    $ oc get nncp

    출력 예

    NAME                    STATUS
    ens01-bridge-testfail   SuccessfullyConfigured

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