25.4. 노드 네트워크 구성 문제 해결
노드 네트워크 구성에 문제가 발생하면 정책이 자동으로 롤백되고 시행이 실패로 보고됩니다. 여기에는 다음과 같은 문제가 포함됩니다.
- 호스트에 구성을 적용하지 못했습니다.
- 호스트와 기본 게이트웨이의 연결이 끊어졌습니다.
- 호스트와 API 서버의 연결이 끊어졌습니다.
25.4.1. 잘못된 노드 네트워크 구성 정책의 구성 문제 해결
노드 네트워크 구성 정책을 적용하여 전체 클러스터에 노드 네트워크 구성 변경 사항을 적용할 수 있습니다. 잘못된 구성을 적용하는 경우 다음 예제를 사용하여 실패한 노드 네트워크 정책의 문제를 해결하고 수정할 수 있습니다.
이 예에서는 컨트롤 플레인 노드와 세 개의 컴퓨팅 노드가 있는 예제 클러스터에 Linux 브리지 정책을 적용합니다. 이 정책은 잘못된 인터페이스를 참조하므로 적용되지 않습니다. 오류를 찾기 위해 사용 가능한 NMState 리소스를 조사합니다. 그런 다음 올바른 구성으로 정책을 업데이트할 수 있습니다.
절차
정책을 생성하여 클러스터에 적용합니다. 다음 예제에서는
ens01
인터페이스에서 간단한 브리지를 생성합니다.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
$ oc apply -f ens01-bridge-testfail.yaml
출력 예
nodenetworkconfigurationpolicy.nmstate.io/ens01-bridge-testfail created
다음 명령을 실행하여 정책의 상태를 확인합니다.
$ oc get nncp
출력에 정책이 실패했다는 내용이 표시됩니다.
출력 예
NAME STATUS ens01-bridge-testfail FailedToConfigure
그러나 정책 상태만으로는 모든 노드에서 실패했는지 노드 서브 세트에서 실패했는지 알 수 없습니다.
노드 네트워크 구성 시행을 나열하여 정책이 모든 노드에서 성공적인지 확인합니다. 정책이 노드 서브 세트에서만 실패한 경우 특정 노드 구성에 문제가 있음을 나타냅니다. 정책이 모든 노드에서 실패하면 정책에 문제가 있음을 나타냅니다.
$ oc get nnce
출력에 정책이 모든 노드에서 실패했다는 내용이 표시됩니다.
출력 예
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
실패한 시행 중 하나에서 역추적을 살펴봅니다. 다음 명령은 출력 툴
jsonpath
를 사용하여 출력을 필터링합니다.$ oc get nnce compute-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:
NmstateVerificationError
는desired
정책 구성, 노드에 있는 정책의current
구성, 일치하지 않는 매개변수를 강조하는difference
를 나열합니다. 이 예에서port
는difference
에 포함되어 있으며, 이는 정책의 포트 구성이 문제임을 나타냅니다.정책이 제대로 구성되었는지 확인하기 위해
NodeNetworkState
오브젝트를 요청하여 하나 또는 모든 노드의 네트워크 구성을 확인합니다. 다음 명령에서는control-plane-1
노드의 네트워크 구성을 반환합니다.$ oc get nns control-plane-1 -o yaml
출력에 노드의 인터페이스 이름이
ens1
인데 실패한 정책에서ens01
로 잘못 사용하고 있다는 내용이 표시됩니다.출력 예
- ipv4: ... name: ens1 state: up type: ethernet
기존 정책을 편집하여 오류를 수정합니다.
$ oc edit nncp ens01-bridge-testfail
... port: - name: ens1
정책을 저장하여 수정 사항을 적용합니다.
정책 상태를 확인하여 업데이트가 완료되었는지 확인합니다.
$ oc get nncp
출력 예
NAME STATUS ens01-bridge-testfail SuccessfullyConfigured
업데이트된 정책이 클러스터의 모든 노드에 성공적으로 구성되었습니다.