29.3. 노드 네트워크 구성 문제 해결
노드 네트워크 구성에 문제가 발생하면 정책이 자동으로 롤백되고 시행이 실패로 보고됩니다. 여기에는 다음과 같은 문제가 포함됩니다.
- 호스트에 구성을 적용하지 못했습니다.
- 호스트와 기본 게이트웨이의 연결이 끊어졌습니다.
- 호스트와 API 서버의 연결이 끊어졌습니다.
29.3.1. 잘못된 노드 네트워크 구성 정책의 구성 문제 해결
노드 네트워크 구성 정책을 적용하여 전체 클러스터에 노드 네트워크 구성 변경 사항을 적용할 수 있습니다.
잘못된 구성을 적용한 경우 다음 예제를 사용하여 실패한 노드 네트워크 정책의 문제를 해결하고 수정할 수 있습니다. 이 예제에서는 컨트롤 플레인 노드와 컴퓨팅 노드 3개가 있는 클러스터에 Linux 브리지 정책을 적용하려고 합니다. 정책이 잘못된 인터페이스를 참조하므로 정책이 적용되지 않습니다.
오류를 찾으려면 사용 가능한 NMState 리소스를 조사해야 합니다. 그런 다음 올바른 구성으로 정책을 업데이트할 수 있습니다.
사전 요구 사항
-
Linux 시스템에
ens01
인터페이스가 없는지 확인합니다.
절차
클러스터에 정책을 생성합니다. 다음 예제에서는 멤버로
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 # ...
네트워크 인터페이스에 정책을 적용합니다.
$ 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}'
출력 예
[2024-10-10T08:40:46Z INFO nmstatectl] Nmstate version: 2.2.37 NmstateError: InvalidArgument: Controller interface br1 is holding unknown port ens01
이전 예제에서는
ens01
이 알 수 없는 포트임을 나타내는InvalidArgument
오류의 출력을 보여줍니다. 이 예에서는 정책 구성 파일에서 포트 구성을 변경해야 할 수 있습니다.정책이 제대로 구성되었는지 확인하기 위해
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
업데이트된 정책이 클러스터의 모든 노드에 성공적으로 구성되었습니다.
29.3.2. 연결이 끊긴 환경에서 DNS 연결 문제 해결
연결이 끊긴 환경에서 nmstate
를 구성할 때 DNS 연결 문제가 발생하는 경우 DNS 서버를 구성하여 도메인 root-servers.net
의 이름 서버 목록을 확인할 수 있습니다.
DNS 서버에 root-servers.net
영역의 이름 서버(NS) 항목이 포함되어 있는지 확인합니다. DNS 서버는 쿼리를 업스트림 리졸버에 전달할 필요가 없지만 서버는 NS 쿼리에 대한 올바른 응답을 반환해야합니다.
29.3.2.1. server라는 bind9 DNS 구성
bind9
DNS 서버를 쿼리하도록 구성된 클러스터의 경우 root-servers.net
영역을 하나 이상의 NS 레코드가 포함된 구성 파일에 추가할 수 있습니다. 예를 들어 /var/named/named.localhost
를 이 기준과 일치하는 영역 파일로 사용할 수 있습니다.
절차
다음 명령을 실행하여
/etc/named.conf
구성 파일 끝에root-servers.net
영역을 추가합니다.$ cat >> /etc/named.conf <<EOF zone "root-servers.net" IN { type master; file "named.localhost"; }; EOF
다음 명령을 실행하여
named
서비스를 다시 시작합니다.$ systemctl restart named
다음 명령을 실행하여
root-servers.net
영역이 있는지 확인합니다.$ journalctl -u named|grep root-servers.net
출력 예
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
다음 명령을 실행하여 DNS 서버에서
root-servers.net
도메인의 NS 레코드를 확인할 수 있는지 확인합니다.$ host -t NS root-servers.net. 127.0.0.1
출력 예
Using domain server: Name: 127.0.0.1 Address: 127.0.0.53 Aliases: root-servers.net name server root-servers.net.
29.3.2.2. dnsmasq DNS 서버 구성
dnsmasq
를 DNS 서버로 사용하는 경우, 사용자가 지정하는 DNS 서버를 사용하여 root-servers.net
을 확인하는 새 구성 파일을 생성하여 root-servers.net
도메인의 확인을 다른 DNS 서버에 위임할 수 있습니다.
다음 명령을 실행하여 도메인
root-servers.net
을 다른 DNS 서버에 위임하는 구성 파일을 생성합니다.$ echo 'server=/root-servers.net/<DNS_server_IP>'> /etc/dnsmasq.d/delegate-root-servers.net.conf
다음 명령을 실행하여
dnsmasq
서비스를 다시 시작합니다.$ systemctl restart dnsmasq
다음 명령을 실행하여
root-servers.net
도메인이 다른 DNS 서버에 위임되었는지 확인합니다.$ journalctl -u dnsmasq|grep root-servers.net
출력 예
Jul 03 15:31:25 rhel-8-10 dnsmasq[1342]: using nameserver 192.168.1.1#53 for domain root-servers.net
다음 명령을 실행하여 DNS 서버에서
root-servers.net
도메인의 NS 레코드를 확인할 수 있는지 확인합니다.$ host -t NS root-servers.net. 127.0.0.1
출력 예
Using domain server: Name: 127.0.0.1 Address: 127.0.0.1#53 Aliases: root-servers.net name server root-servers.net.