5.5. 네트워크 추적 방법


패킷 캡처 레코드 형태로 네트워크 추적을 수집하면 네트워크 문제 해결과 관련하여 Red Hat 지원을 지원할 수 있습니다.

OpenShift Dedicated는 네트워크 추적을 수행하는 두 가지 방법을 지원합니다. 다음 표를 검토하고 요구 사항에 맞는 방법을 선택합니다.

표 5.3. 네트워크 추적을 수집하는 지원되는 방법
방법이점 및 기능

호스트 네트워크 추적 수집

하나 이상의 노드에 동시에 지정하는 기간에 대해 패킷 캡처를 수행합니다. 지정된 기간이 충족되면 패킷 캡처 파일이 노드에서 클라이언트 시스템으로 전송됩니다.

특정 작업에서 네트워크 통신 문제를 트리거하는 이유를 해결할 수 있습니다. 패킷 캡처를 실행하고 문제를 트리거하는 작업을 수행하고 로그를 사용하여 문제를 진단합니다.

OpenShift Dedicated 노드 또는 컨테이너에서 네트워크 추적 수집

하나의 노드 또는 하나의 컨테이너에서 패킷 캡처를 수행합니다. tcpdump 명령을 대화형으로 실행하여 패킷 캡처 기간을 제어할 수 있습니다.

패킷 캡처를 수동으로 시작하고 네트워크 통신 문제를 트리거한 다음 패킷 캡처를 수동으로 중지할 수 있습니다.

이 방법은 cat 명령과 쉘 리디렉션을 사용하여 노드 또는 컨테이너에서 클라이언트 시스템으로 패킷 캡처 데이터를 복사합니다.

5.5.1. 호스트 네트워크 추적 수집

네트워크 통신을 추적하고 동시에 여러 노드에서 패킷을 캡처하여 네트워크 관련 문제를 해결할 수 있습니다.

oc adm must-gather 명령과 registry.redhat.io/openshift4/network-tools-rhel8 컨테이너 이미지 조합을 사용하여 노드에서 패킷 캡처를 수집할 수 있습니다. 패킷 캡처를 분석하면 네트워크 통신 문제를 해결하는 데 도움이 될 수 있습니다.

oc adm must-gather 명령은 특정 노드의 Pod에서 tcpdump 명령을 실행하는 데 사용됩니다. tcpdump 명령은 Pod에 패킷 캡처를 기록합니다. tcpdump 명령이 종료되면 oc adm must-gather 명령은 Pod에서 패킷 캡처가 있는 파일을 클라이언트 머신으로 전송합니다.

작은 정보

다음 절차의 샘플 명령은 tcpdump 명령을 사용하여 패킷 캡처를 수행하는 방법을 보여줍니다. 그러나 --image 인수에 지정된 컨테이너 이미지에서 모든 명령을 실행하여 여러 노드에서 문제 해결 정보를 동시에 수집할 수 있습니다.

사전 요구 사항

  • cluster-admin 역할의 사용자로 OpenShift Dedicated에 로그인되어 있습니다.

    참고

    OpenShift Dedicated 배포에서 CCO(Customer Cloud Subscription) 모델을 사용하지 않는 고객은 oc adm must-gather 명령을 사용할 수 없습니다. cluster-admin 권한이 필요합니다.

  • OpenShift CLI(oc)가 설치되어 있습니다.

프로세스

  1. 다음 명령을 실행하여 일부 노드에서 호스트 네트워크에서 패킷 캡처를 실행합니다.

    $ oc adm must-gather \
        --dest-dir /tmp/captures \  <.>
        --source-dir '/tmp/tcpdump/' \  <.>
        --image registry.redhat.io/openshift4/network-tools-rhel8:latest \  <.>
        --node-selector 'node-role.kubernetes.io/worker' \  <.>
        --host-network=true \  <.>
        --timeout 30s \  <.>
        -- \
        tcpdump -i any \  <.>
        -w /tmp/tcpdump/%Y-%m-%dT%H:%M:%S.pcap -W 1 -G 300

    <.> --dest-dir 인수는 oc adm must-gather 가 클라이언트 머신의 /tmp/captures 와 관련된 디렉터리에 패킷 캡처를 저장하도록 지정합니다. 쓰기 가능한 디렉터리를 지정할 수 있습니다. <.> oc adm must-gather 가 시작되는 디버그 Pod에서 tcpdump 가 실행될 때 --source-dir 인수는 패킷 캡처가 Pod의 /tmp/tcpdump 디렉터리에 일시적으로 저장되도록 지정합니다. <.> --image 인수는 tcpdump 명령을 포함하는 컨테이너 이미지. <.> --node-selector 인수 및 예제 값은 작업자 노드에서 패킷 캡처를 수행하도록 지정합니다. 또는 단일 노드에서 패킷 캡처를 실행하도록 --node-name 인수를 지정할 수 있습니다. --node-selector--node-name 인수를 모두 생략하면 패킷 캡처가 모든 노드에서 수행됩니다. <.> 패킷 캡처가 노드의 네트워크 인터페이스에서 수행되도록 --host-network=true 인수가 필요합니다. <.> --timeout 인수 및 값은 디버그 Pod를 30 초 동안 실행하기 위해 지정합니다. --timeout 인수와 기간을 지정하지 않으면 디버그 Pod가 10분 동안 실행됩니다. <.> tcpdump 명령의 -i any 인수는 모든 네트워크 인터페이스에서 패킷을 캡처하도록 지정합니다. 또는 네트워크 인터페이스 이름을 지정할 수 있습니다.

  2. 네트워크 추적에서 패킷을 캡처하는 동안 네트워크 통신 문제를 트리거하는 웹 애플리케이션 액세스와 같은 작업을 수행합니다.
  3. oc adm must-gather 가 Pod에서 클라이언트 머신으로 전송된 패킷 캡처 파일을 확인합니다.

    tmp/captures
    ├── event-filter.html
    ├── ip-10-0-192-217-ec2-internal  1
    │   └── registry-redhat-io-openshift4-network-tools-rhel8-sha256-bca...
    │       └── 2022-01-13T19:31:31.pcap
    ├── ip-10-0-201-178-ec2-internal  2
    │   └── registry-redhat-io-openshift4-network-tools-rhel8-sha256-bca...
    │       └── 2022-01-13T19:31:30.pcap
    ├── ip-...
    └── timestamp
    1 2
    패킷 캡처는 호스트 이름, 컨테이너 및 파일 이름을 식별하는 디렉터리에 저장됩니다. --node-selector 인수를 지정하지 않은 경우 호스트 이름의 디렉터리 수준이 없습니다.

5.5.2. OpenShift Dedicated 노드 또는 컨테이너에서 네트워크 추적 수집

잠재적인 네트워크 관련 OpenShift Dedicated 문제를 조사할 때 Red Hat 지원은 특정 OpenShift Dedicated 클러스터 노드 또는 특정 컨테이너에서 네트워크 패킷 추적을 요청할 수 있습니다. OpenShift Dedicated에서 네트워크 추적을 캡처하는 데 권장되는 방법은 디버그 Pod를 사용하는 것입니다.

사전 요구 사항

  • cluster-admin 역할의 사용자로 클러스터에 액세스할 수 있어야 합니다.

    참고

    OpenShift Dedicated 배포에서 CCO(Customer Cloud Subscription) 모델을 사용하지 않는 고객은 oc debug 명령을 사용할 수 없습니다. cluster-admin 권한이 필요합니다.

  • OpenShift CLI(oc)가 설치되어 있습니다.
  • 기존 Red Hat 지원 케이스 ID가 있습니다.

프로세스

  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
  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 Dedicated 클러스터에서 직접 기존 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 디렉토리에서 절대 경로를 참조합니다.
      2. Red Hat 고객 포털 고객 지원 페이지에서 기존 지원 케이스로 이동합니다.
      3. Attach files를 선택하고 메시지에 따라 파일을 업로드합니다.

5.5.3. Red Hat 지원에 진단 데이터 제공

OpenShift Dedicated 문제를 조사할 때 Red Hat 지원팀에서 지원 케이스에 진단 데이터를 업로드하도록 요청할 수 있습니다. 파일은 Red Hat Customer Portal을 통해 지원 케이스에 업로드하거나 redhat-support-tool 명령을 사용하여 OpenShift Dedicated 클러스터에서 직접 업로드할 수 있습니다.

사전 요구 사항

  • cluster-admin 역할의 사용자로 클러스터에 액세스할 수 있어야 합니다.

    참고

    OpenShift Dedicated 배포에서 CCO(Customer Cloud Subscription) 모델을 사용하지 않는 고객은 oc debug 명령을 사용할 수 없습니다. cluster-admin 권한이 필요합니다.

  • OpenShift CLI(oc)가 설치되어 있습니다.
  • 기존 Red Hat 지원 케이스 ID가 있습니다.

프로세스

  • Red Hat 고객 포털을 통해 기존 Red Hat 지원 케이스에 진단 데이터를 업로드합니다.

    1. oc debug node/<node_name> 명령을 사용하여 OpenShift Dedicated 노드에 포함된 진단 파일을 연결하고 출력을 파일로 리디렉션합니다. 다음 예에서는 /host/var/tmp/my-diagnostic-data.tar.gz를 디버그 컨테이너에서 /var/tmp/my-diagnostic-data.tar.gz로 복사합니다.

      $ oc debug node/my-cluster-node -- bash -c 'cat /host/var/tmp/my-diagnostic-data.tar.gz' > /var/tmp/my-diagnostic-data.tar.gz 1
      1
      디버그 컨테이너는 /host에 호스트의 root 디렉토리를 마운트합니다. 연결할 대상 파일을 지정할 때 /host를 포함하여 디버그 컨테이너의 root 디렉토리에서 절대 경로를 참조합니다.
    2. Red Hat 고객 포털 고객 지원 페이지에서 기존 지원 케이스로 이동합니다.
    3. Attach files를 선택하고 메시지에 따라 파일을 업로드합니다.

5.5.4. toolbox정보

toolbox는 RHCOS(Red Hat Enterprise Linux CoreOS) 시스템에서 컨테이너를 시작하는 툴입니다. 이 툴은 주로 sosreportredhat-support-tool 과 같은 명령을 실행하는 데 필요한 필수 바이너리 및 플러그인이 포함된 컨테이너를 시작하는 데 사용됩니다.

toolbox 컨테이너의 주요 목적은 진단 정보를 수집하여 Red Hat 지원에 제공하는 것입니다. 그러나 추가 진단 도구가 필요한 경우 RPM 패키지를 추가하거나 표준 지원 도구 이미지의 대체 이미지를 실행할 수 있습니다.

toolbox 컨테이너에 패키지 설치

기본적으로 toolbox 명령을 실행하면 registry.redhat.io/rhel8/support-tools:latest 이미지로 컨테이너를 시작합니다. 이 이미지에는 가장 자주 사용되는 지원 도구가 포함되어 있습니다. 이미지에 포함되지 않은 지원 툴이 필요한 노드별 데이터를 수집해야 하는 경우 추가 패키지를 설치할 수 있습니다.

사전 요구 사항

  • oc debug node/<node_name> 명령이 있는 노드에 액세스하고 있습니다.

프로세스

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

    # chroot /host
  2. toolbox 컨테이너를 시작합니다.

    # toolbox
  3. wget과 같은 추가 패키지를 설치합니다.

    # dnf install -y <package_name>
toolbox를 사용하여 대체 이미지 시작

기본적으로 toolbox 명령을 실행하면 registry.redhat.io/rhel8/support-tools:latest 이미지로 컨테이너를 시작합니다. .toolboxrc 파일을 생성하고 실행할 이미지를 지정하여 대체 이미지를 시작할 수 있습니다.

사전 요구 사항

  • oc debug node/<node_name> 명령이 있는 노드에 액세스하고 있습니다.

프로세스

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

    # chroot /host
  2. root 사용자 ID에 대한 홈 디렉터리에 .toolboxrc 파일을 생성합니다.

    # vi ~/.toolboxrc
    REGISTRY=quay.io                1
    IMAGE=fedora/fedora:33-x86_64   2
    TOOLBOX_NAME=toolbox-fedora-33  3
    1
    선택 사항: 대체 컨테이너 레지스트리를 지정합니다.
    2
    시작할 대체 이미지를 지정합니다.
    3
    선택 사항: toolbox 컨테이너의 대체 이름을 지정합니다.
  3. 대체 이미지를 사용하여 toolbox 컨테이너를 시작합니다.

    # toolbox
    참고

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

Red Hat logoGithubRedditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 문서 정보

Red Hat을 사용하는 고객은 신뢰할 수 있는 콘텐츠가 포함된 제품과 서비스를 통해 혁신하고 목표를 달성할 수 있습니다.

보다 포괄적 수용을 위한 오픈 소스 용어 교체

Red Hat은 코드, 문서, 웹 속성에서 문제가 있는 언어를 교체하기 위해 최선을 다하고 있습니다. 자세한 내용은 다음을 참조하세요.Red Hat 블로그.

Red Hat 소개

Red Hat은 기업이 핵심 데이터 센터에서 네트워크 에지에 이르기까지 플랫폼과 환경 전반에서 더 쉽게 작업할 수 있도록 강화된 솔루션을 제공합니다.

© 2024 Red Hat, Inc.