5.7. OpenShift Container Platform 노드 또는 컨테이너에서 네트워크 추적 수집
잠재적인 네트워크 관련 OpenShift Container Platform 문제를 조사할 때 Red Hat 지원은 특정 OpenShift Container Platform 클러스터 노드 또는 특정 컨테이너에서 네트워크 패킷 추적을 요청할 수 있습니다. OpenShift Container Platform에서 네트워크 추적을 캡처하는 데 권장되는 방법은 디버그 Pod를 사용하는 것입니다.
사전 요구 사항
-
cluster-admin
역할의 사용자로 클러스터에 액세스할 수 있어야 합니다. -
OpenShift CLI(
oc
)가 설치되어 있습니다. - Red Hat 표준 또는 프리미엄 서브스크립션이 있습니다.
- Red Hat 고객 포털 계정이 있어야 합니다.
- 기존 Red Hat 지원 케이스 ID가 있습니다.
- 호스트에 대한 SSH 액세스 권한이 있어야 합니다.
프로세스
클러스터 노드 목록을 가져옵니다.
$ oc get nodes
대상 노드에서 디버그 세션으로 들어갑니다. 이 단계는
<node_name>-debug
라는 디버그 Pod를 인스턴스화합니다.$ oc debug node/my-cluster-node
디버그 쉘 내에서
/host
를 root 디렉터리로 설정합니다. 디버그 Pod는 Pod 내의/host
에 호스트의 루트 파일 시스템을 마운트합니다. root 디렉토리를/host
로 변경하면 호스트의 실행 경로에 포함된 바이너리를 실행할 수 있습니다.# chroot /host
참고RHCOS(Red Hat Enterprise Linux CoreOS)를 실행하는 OpenShift Container Platform 4.9 클러스터 노드는 변경할 수 없으며 Operator를 사용하여 클러스터 변경 사항을 적용합니다. SSH를 사용하여 클러스터 노드에 액세스하는 것은 권장되지 않으며 노드는 accessed 테인트로 표시됩니다. 그러나 OpenShift Container Platform API를 사용할 수 없거나 kubelet이 대상 노드에서 제대로 작동하지 않는 경우
oc
작업이 영향을 받습니다. 이러한 상황에서 대신ssh core @ <node>.<cluster_name>.<base_domain>
을 사용하여 노드에 액세스할 수 있습니다.chroot
환경 콘솔에서 노드의 인터페이스 이름을 가져옵니다.# ip ad
sosreport
를 실행하는 데 필요한 바이너리 및 플러그인이 포함된toolbox
컨테이너를 시작합니다.# toolbox
참고기존
toolbox
Pod가 이미 실행 중인 경우toolbox
명령은'toolbox-' already exists를 출력합니다. Trying to start…
를 출력합니다.tcpdump
문제를 방지하려면podman rm toolbox-
에서 실행중인 toolbox 컨테이너를 제거하고 새 toolbox 컨테이너를 생성합니다.클러스터 노드에서
tcpdump
세션을 시작하고 출력을 캡처 파일로 리디렉션합니다. 이 예에서는ens5
를 인터페이스 이름으로 사용합니다.$ tcpdump -nn -s 0 -i ens5 -w /host/var/tmp/my-cluster-node_$(date +%d_%m_%Y-%H_%M_%S-%Z).pcap 1
- 1
- toolbox 컨테이너가 호스트의 root 디렉토리를
/host
에 마운트하기 때문에tcpdump
캡처 파일의 경로는chroot
환경 외부에 있습니다.
노드의 특정 컨테이너에
tcpdump
캡처가 필요한 경우 다음 단계를 따르십시오.대상 컨테이너 ID를 확인합니다. toolbox 컨테이너가 호스트의 root 디렉토리를
/host
에 마운트하기 때문에chroot host
명령은 이 단계에서crictl
명령 보다 우선합니다.# chroot /host crictl ps
컨테이너의 프로세스 ID를 확인합니다. 이 예에서 컨테이너 ID는
a7fe32346b120
입니다.# chroot /host crictl inspect --output yaml a7fe32346b120 | grep 'pid' | awk '{print $2}'
컨테이너에서
tcpdump
세션을 시작하고 출력을 캡처 파일로 리디렉션합니다. 이 예는 컨테이너의 프로세스 ID로49,628
을 사용하고 인터페이스 이름으로ens5
를 사용합니다.nsenter
명령은 대상 프로세스의 네임 스페이스를 입력하고 해당 네임 스페이스를 사용하여 명령을 실행합니다. 이 예에서 대상 프로세스는 컨테이너의 프로세스 ID이므로tcpdump
명령은 호스트에서 컨테이너 네임 스페이스를 사용하여 실행됩니다.# nsenter -n -t 49628 -- tcpdump -nn -i ens5 -w /host/var/tmp/my-cluster-node-my-container_$(date +%d_%m_%Y-%H_%M_%S-%Z).pcap.pcap 1
- 1
- toolbox 컨테이너가 호스트의 root 디렉토리를
/host
에 마운트하기 때문에tcpdump
캡처 파일의 경로는chroot
환경 외부에 있습니다.
분석을 위해 다음 방법 중 하나를 사용하여
tcpdump
캡처 파일을 Red Hat 지원팀에 제공합니다.OpenShift Container Platform 클러스터에서 직접 기존 Red Hat 지원 케이스에 파일을 업로드합니다.
toolbox 컨테이너 내에서
redhat-support-tool
을 실행하여 기존 Red Hat 지원 케이스에 직접 파일을 첨부합니다. 이 예에서는 지원 사례 ID01234567
을 사용합니다.# redhat-support-tool addattachment -c 01234567 /host/var/tmp/my-tcpdump-capture-file.pcap 1
- 1
- toolbox 컨테이너는
/host
에 호스트의 root 디렉토리를 마운트합니다.redhat-support-tool
명령에 업로드할 파일을 지정할 때/host/
를 포함하여 toolbox 컨테이너의 root 디렉토리에서 절대 경로를 참조합니다.
기존 Red Hat 지원 케이스에 파일을 업로드합니다.
oc debug node/<node_name>
명령을 실행하여sosreport
아카이브를 연결하고 출력을 파일로 리디렉션합니다. 이 명령은 이전oc debug
세션을 종료했다고 가정합니다.$ oc debug node/my-cluster-node -- bash -c 'cat /host/var/tmp/my-tcpdump-capture-file.pcap' > /tmp/my-tcpdump-capture-file.pcap 1
- 1
- 디버그 컨테이너는
/host
에 호스트의 root 디렉토리를 마운트합니다. 연결할 대상 파일을 지정할 때/host
를 포함하여 디버그 컨테이너의 root 디렉토리에서 절대 경로를 참조합니다.
참고RHCOS(Red Hat Enterprise Linux CoreOS)를 실행하는 OpenShift Container Platform 4.9 클러스터 노드는 변경할 수 없으며 Operator를 사용하여 클러스터 변경 사항을 적용합니다.
scp
를 사용하여 클러스터 노드에서tcpdump
캡처 파일을 전송하는 것은 권장되지 않으며 노드는 accessed 테인트로 표시됩니다. 그러나 OpenShift Container Platform API를 사용할 수 없거나 kubelet이 대상 노드에서 제대로 작동하지 않는 경우oc
작업이 영향을 받습니다. 이러한 상황에서는scp core@<node>.<cluster_name>.<base_domain>:<file_path> <local_path>
를 실행하여 노드에서tcpdump
캡처 파일을 복사할 수 있습니다.- https://access.redhat.com/support/cases/ 내에서 기존 지원 케이스로 이동합니다.
- Attach files를 선택하고 메시지에 따라 파일을 업로드합니다.