7.5. 네트워크 문제 해결
7.5.1. 네트워크 인터페이스 선택 방법
베어 메탈 또는 둘 이상의 NIC(네트워크 인터페이스 컨트롤러)가 있는 가상 머신에 설치할 경우 OpenShift Container Platform이 Kubernetes API 서버와의 통신에 사용하는 NIC는 노드가 부팅될 때 systemd에서 실행하는 nodeip-configuration.service
서비스 유닛에 의해 결정됩니다. nodeip-configuration.service
는 기본 경로와 연결된 인터페이스에서 IP를 선택합니다.
nodeip-configuration.service
서비스에서 올바른 NIC를 확인한 후 서비스는 /etc/systemd/system/kubelet.service.d/20-nodenet.conf
파일을 만듭니다. 20-nodenet.conf
파일은 KUBELET_NODE_IP
환경 변수를 서비스가 선택한 IP 주소로 설정합니다.
kubelet 서비스가 시작되면 20-nodenet.conf
파일에서 환경 변수 값을 읽고 IP 주소를 --node-ip
kubelet 명령줄 인수 값으로 설정합니다. 결과적으로 kubelet 서비스는 선택한 IP 주소를 노드 IP 주소로 사용합니다.
설치 후 하드웨어 또는 네트워킹을 재구성하거나 노드 IP가 기본 라우팅 인터페이스에서 제공되지 않는 네트워킹 레이아웃이 있는 경우 재부팅 후 nodeip-configuration.service
서비스에서 다른 NIC를 선택할 수 있습니다. 경우에 따라 oc get nodes -o wide
명령의 출력에서 INTERNAL-IP
열을 검토하여 다른 NIC가 선택되었는지 감지할 수 있습니다.
다른 NIC가 선택되어 네트워크 통신이 중단되거나 잘못 구성된 경우 EtcdCertSignerControllerDegraded
오류가 표시될 수 있습니다. NODEIP_HINT
변수를 포함하는 힌트 파일을 생성하여 기본 IP 선택 논리를 덮어쓸 수 있습니다. 자세한 내용은 선택 사항: 기본 노드 IP 선택 논리를 참조하십시오.
7.5.1.1. 선택 사항: 기본 노드 IP 선택 논리를 덮어 쓰기
기본 IP 선택 논리를 재정의하려면 NODEIP_HINT
변수를 포함하는 힌트 파일을 생성하여 기본 IP 선택 논리를 재정의할 수 있습니다. 힌트 파일을 만들면 NODEIP_HINT
변수에 지정된 IP 주소 서브넷의 인터페이스에서 특정 노드 IP 주소를 선택할 수 있습니다.
예를 들어 노드에 주소가 10.0.0.10/24
인 eth0
과 주소가 192.0.2.5/24
인 eth1
이 있고 기본 경로는 eth0
(10.0.0.10
)을 가리킵니다. 노드 IP 주소는 일반적으로 10.0.0.10
IP 주소를 사용합니다.
사용자는 서브넷의 알려진 IP를 가리키도록 NODEIP_HINT
변수를 구성할 수 있습니다(예: 192.0.2.1
과 같은 서브넷 게이트웨이) 다른 서브넷 192.0.2.0/24
가 선택되도록 합니다. 따라서 eth1
의 192.0.2.5
IP 주소가 노드에 사용됩니다.
다음 절차에서는 기본 노드 IP 선택 논리를 재정의하는 방법을 보여줍니다.
절차
힌트 파일을
/etc/default/nodeip-configuration
파일에 추가합니다. 예를 들면 다음과 같습니다.NODEIP_HINT=192.0.2.1
중요-
노드의 정확한 IP 주소를 힌트로 사용하지 마십시오(예:
192.0.2.
5). 노드의 정확한 IP 주소를 사용하면 노드가 힌트 IP 주소를 사용하는 경우 올바르게 구성되지 않습니다. - 힌트 파일의 IP 주소는 올바른 서브넷을 결정하는 데만 사용됩니다. 힌트 파일에 나타나는 결과로 트래픽을 수신하지 않습니다.
-
노드의 정확한 IP 주소를 힌트로 사용하지 마십시오(예:
다음 명령을 실행하여
base-64
로 인코딩된 콘텐츠를 생성합니다.$ echo -n 'NODEIP_HINT=192.0.2.1' | base64 -w0
출력 예
Tk9ERUlQX0hJTlQ9MTkyLjAuMCxxxx==
클러스터를 배포하기 전에
마스터
및작업자
역할에 대한 머신 구성 매니페스트를 생성하여 힌트를 활성화합니다.99-nodeip-hint-master.yaml
apiVersion: machineconfiguration.openshift.io/v1 kind: MachineConfig metadata: labels: machineconfiguration.openshift.io/role: master name: 99-nodeip-hint-master spec: config: ignition: version: 3.2.0 storage: files: - contents: source: data:text/plain;charset=utf-8;base64,<encoded_content> 1 mode: 0644 overwrite: true path: /etc/default/nodeip-configuration
- 1
- <
encoded_contents
>를/etc/default/nodeip-configuration
파일의 base64 인코딩 콘텐츠(예:Tk9ERUlQX0hJTlQ9MTkyLjAuMC=== )
로 바꿉니다. 쉼표 이후와 인코딩된 콘텐츠 전에는 공백을 사용할 수 없습니다.
99-nodeip-hint-worker.yaml
apiVersion: machineconfiguration.openshift.io/v1 kind: MachineConfig metadata: labels: machineconfiguration.openshift.io/role: worker name: 99-nodeip-hint-worker spec: config: ignition: version: 3.2.0 storage: files: - contents: source: data:text/plain;charset=utf-8;base64,<encoded_content> 1 mode: 0644 overwrite: true path: /etc/default/nodeip-configuration
- 1
- <
encoded_contents
>를/etc/default/nodeip-configuration
파일의 base64 인코딩 콘텐츠(예:Tk9ERUlQX0hJTlQ9MTkyLjAuMC=== )
로 바꿉니다. 쉼표 이후와 인코딩된 콘텐츠 전에는 공백을 사용할 수 없습니다.
-
클러스터 구성을 저장하는 디렉터리에 매니페스트를 저장합니다(예:
~/clusterconfigs
). - 클러스터를 배포합니다.
7.5.2. Open vSwitch 문제 해결
일부 OVS(Open vSwitch) 문제를 해결하려면 자세한 정보를 포함하도록 로그 수준을 구성해야 할 수 있습니다.
노드에서 로그 수준을 일시적으로 수정하는 경우 다음 예와 같이 노드의 머신 구성 데몬에서 로그 메시지를 받을 수 있습니다.
E0514 12:47:17.998892 2281 daemon.go:1350] content mismatch for file /etc/systemd/system/ovs-vswitchd.service: [Unit]
불일치와 관련된 로그 메시지를 방지하려면 문제 해결을 완료한 후 로그 수준 변경 사항을 되돌립니다.
7.5.2.1. 일시적으로 Open vSwitch 로그 수준 구성
단기 문제 해결을 위해 OVS(Open vSwitch) 로그 수준을 일시적으로 구성할 수 있습니다. 다음 절차에 따라 노드를 재부팅할 필요가 없습니다. 또한 노드를 재부팅할 때 마다 구성 변경 사항이 유지되지 않습니다.
이 절차를 수행하여 로그 수준을 변경하면 ovs-vswitchd.service
에 대한 콘텐츠 불일치가 있음을 나타내는 머신 구성 데몬에서 로그 메시지를 수신할 수 있습니다. 로그 메시지를 방지하려면 이 절차를 반복하고 로그 수준을 원래 값으로 설정합니다.
사전 요구 사항
-
cluster-admin
역할의 사용자로 클러스터에 액세스할 수 있어야 합니다. -
OpenShift CLI(
oc
)가 설치되어 있습니다.
절차
노드의 디버그 Pod를 시작합니다.
$ oc debug node/<node_name>
디버그 쉘 내에서
/host
를 root 디렉터리로 설정합니다. 디버그 Pod는 Pod 내의/host
에 호스트의 root 파일 시스템을 마운트합니다. root 디렉토리를/host
로 변경하면 호스트 파일 시스템에서 바이너리를 실행할 수 있습니다.# chroot /host
OVS 모듈의 현재 syslog 수준을 확인합니다.
# ovs-appctl vlog/list
다음 예제 출력은
info
로 설정된 syslog의 로그 수준을 보여줍니다.출력 예
console syslog file ------- ------ ------ backtrace OFF INFO INFO bfd OFF INFO INFO bond OFF INFO INFO bridge OFF INFO INFO bundle OFF INFO INFO bundles OFF INFO INFO cfm OFF INFO INFO collectors OFF INFO INFO command_line OFF INFO INFO connmgr OFF INFO INFO conntrack OFF INFO INFO conntrack_tp OFF INFO INFO coverage OFF INFO INFO ct_dpif OFF INFO INFO daemon OFF INFO INFO daemon_unix OFF INFO INFO dns_resolve OFF INFO INFO dpdk OFF INFO INFO ...
/etc/systemd/system/ovs-vswitchd.service.d/10-ovs-vswitchd-restart.conf
파일에서 로그 수준을 지정합니다.Restart=always ExecStartPre=-/bin/sh -c '/usr/bin/chown -R :$${OVS_USER_ID##*:} /var/lib/openvswitch' ExecStartPre=-/bin/sh -c '/usr/bin/chown -R :$${OVS_USER_ID##*:} /etc/openvswitch' ExecStartPre=-/bin/sh -c '/usr/bin/chown -R :$${OVS_USER_ID##*:} /run/openvswitch' ExecStartPost=-/usr/bin/ovs-appctl vlog/set syslog:dbg ExecReload=-/usr/bin/ovs-appctl vlog/set syslog:dbg
이전 예에서 로그 수준은
dbg
로 설정됩니다.syslog:<log_level>
을off
,emer
,err
,warn
,info
또는dbg
로 설정하여 마지막 두 행을 변경합니다.off
로그 수준은 모든 로그 메시지를 필터링합니다.서비스를 다시 시작하십시오.
# systemctl daemon-reload
# systemctl restart ovs-vswitchd
7.5.2.2. 영구적으로 Open vSwitch 로그 수준 구성
OVS(Open vSwitch) 로그 수준을 장기적으로 변경할 경우 로그 수준을 영구적으로 변경할 수 있습니다.
사전 요구 사항
-
cluster-admin
역할의 사용자로 클러스터에 액세스할 수 있어야 합니다. -
OpenShift CLI(
oc
)가 설치되어 있습니다.
절차
다음 예제와 같은
MachineConfig
오브젝트를 사용하여99-change-ovs-loglevel.yaml
과 같은 파일을 생성합니다.apiVersion: machineconfiguration.openshift.io/v1 kind: MachineConfig metadata: labels: machineconfiguration.openshift.io/role: master 1 name: 99-change-ovs-loglevel spec: config: ignition: version: 3.2.0 systemd: units: - dropins: - contents: | [Service] ExecStartPost=-/usr/bin/ovs-appctl vlog/set syslog:dbg 2 ExecReload=-/usr/bin/ovs-appctl vlog/set syslog:dbg name: 20-ovs-vswitchd-restart.conf name: ovs-vswitchd.service
머신 구성을 적용합니다.
$ oc apply -f 99-change-ovs-loglevel.yaml
7.5.2.3. Open vSwitch 로그 표시
다음 절차에 따라 OVS(Open vSwitch) 로그를 표시합니다.
사전 요구 사항
-
cluster-admin
역할의 사용자로 클러스터에 액세스할 수 있어야 합니다. -
OpenShift CLI(
oc
)가 설치되어 있습니다.
절차
다음 명령 중 하나를 실행합니다.
클러스터 외부에서
oc
명령을 사용하여 로그를 표시합니다.$ oc adm node-logs <node_name> -u ovs-vswitchd
클러스터의 노드에 로그인한 후 로그를 표시합니다.
# journalctl -b -f -u ovs-vswitchd.service
노드에 로그인하는 한 가지 방법은
oc debug node/<node_name>
명령을 사용하는 것입니다.