5.10. 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 액세스 권한이 있어야 합니다.

프로세스

  1. 클러스터 노드 목록을 가져옵니다.

    $ oc get nodes
  2. 대상 노드에서 디버그 세션으로 들어갑니다. 이 단계는 <node_name>-debug라는 디버그 Pod를 인스턴스화합니다.

    $ oc debug node/my-cluster-node
  3. 디버그 쉘 내에서 /host를 root 디렉터리로 설정합니다. 디버그 Pod는 Pod 내의 /host에 호스트의 루트 파일 시스템을 마운트합니다. root 디렉토리를 /host로 변경하면 호스트의 실행 경로에 포함된 바이너리를 실행할 수 있습니다.

    # chroot /host
    참고

    Red Hat Enterprise Linux CoreOS (RHCOS)를 실행하는 OpenShift Container Platform 4.12 클러스터 노드는 변경할 수 없으며 Operator를 사용하여 클러스터 변경 사항을 적용합니다. SSH를 사용하여 클러스터 노드에 액세스하는 것은 권장되지 않습니다. 그러나 OpenShift Container Platform API를 사용할 수 없거나 kubelet이 대상 노드에서 제대로 작동하지 않는 경우 oc 작업이 영향을 받습니다. 이러한 상황에서 대신 ssh core @ <node>.<cluster_name>.<base_domain>을 사용하여 노드에 액세스할 수 있습니다.

  4. chroot 환경 콘솔에서 노드의 인터페이스 이름을 가져옵니다.

    # ip ad
  5. sosreport 를 실행하는 데 필요한 바이너리 및 플러그인이 포함된 toolbox 컨테이너를 시작합니다.

    # toolbox
    참고

    기존 toolbox Pod가 이미 실행 중인 경우 toolbox 명령은 'toolbox-' already exists를 출력합니다. Trying to start…​를 출력합니다. tcpdump 문제를 방지하려면 podman rm toolbox-에서 실행중인 toolbox 컨테이너를 제거하고 새 toolbox 컨테이너를 생성합니다.

  6. 클러스터 노드에서 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 환경 외부에 있습니다.
  7. 노드의 특정 컨테이너에 tcpdump 캡처가 필요한 경우 다음 단계를 따르십시오.

    1. 대상 컨테이너 ID를 확인합니다. toolbox 컨테이너가 호스트의 root 디렉토리를 /host에 마운트하기 때문에 chroot host 명령은 이 단계에서 crictl 명령 보다 우선합니다.

      # chroot /host crictl ps
    2. 컨테이너의 프로세스 ID를 확인합니다. 이 예에서 컨테이너 ID는 a7fe32346b120입니다.

      # chroot /host crictl inspect --output yaml a7fe32346b120 | grep 'pid' | awk '{print $2}'
    3. 컨테이너에서 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  1
      1
      toolbox 컨테이너가 호스트의 root 디렉토리를 /host에 마운트하기 때문에 tcpdump 캡처 파일의 경로는 chroot 환경 외부에 있습니다.
  8. 분석을 위해 다음 방법 중 하나를 사용하여 tcpdump 캡처 파일을 Red Hat 지원팀에 제공합니다.

    • OpenShift Container Platform 클러스터에서 직접 기존 Red Hat 지원 케이스에 파일을 업로드합니다.

      1. toolbox 컨테이너 내에서 redhat-support-tool을 실행하여 기존 Red Hat 지원 케이스에 직접 파일을 첨부합니다. 이 예에서는 지원 사례 ID 01234567을 사용합니다.

        # 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 지원 케이스에 파일을 업로드합니다.

      1. 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 디렉토리에서 절대 경로를 참조합니다.
        참고

        Red Hat Enterprise Linux CoreOS (RHCOS)를 실행하는 OpenShift Container Platform 4.12 클러스터 노드는 변경할 수 없으며 Operator를 사용하여 클러스터 변경 사항을 적용합니다. scp 를 사용하여 클러스터 노드에서 tcpdump 캡처 파일을 전송하는 것은 권장되지 않습니다. 그러나 OpenShift Container Platform API를 사용할 수 없거나 kubelet이 대상 노드에서 제대로 작동하지 않는 경우 oc 작업이 영향을 받습니다. 이러한 상황에서는 scp core@<node>.<cluster_name>.<base_domain>:<file_path> <local_path>를 실행하여 노드에서 tcpdump 캡처 파일을 복사할 수 있습니다.

      2. Red Hat 고객 포털 고객 지원 페이지에서 기존 지원 케이스로 이동합니다.
      3. Attach files를 선택하고 메시지에 따라 파일을 업로드합니다.