View a markdown version of this page

kubectl 및 S3를 사용하여 관리형 노드에서 네트워크 트래픽 캡처 - Amazon EKS

이 페이지 개선에 도움 주기

이 사용자 가이드에 기여하려면 모든 페이지의 오른쪽 창에 있는 GitHub에서 이 페이지 편집 링크를 선택합니다.

kubectl 및 S3를 사용하여 관리형 노드에서 네트워크 트래픽 캡처

노드 모니터링 에이전트가 있는 Amazon EKS 관리형 노드에서 네트워크 트래픽을 캡처하는 방법을 알아봅니다. 에이전트는 노드에서 tcpdump를 실행한 후 캡처 파일을 압축하여 S3 버킷에 업로드합니다.

사전 조건

다음 항목이 준비되어 있는지 확인합니다.

  • 노드 모니터링 에이전트가 있는 기존 Amazon EKS 자율 모드 클러스터. 자세한 내용은 노드 상태 문제 감지 및 노드 자동 복구 활성화 섹션을 참조하세요.

  • 클러스터와의 통신을 위해 kubectl 명령줄 도구가 설치 및 구성되어 있습니다.

  • S3 버킷 및 객체를 생성할 수 있는 충분한 권한을 가지고 AWS CLI를 설치하고 로그인했습니다.

  • 최신 버전의 Python 3가 설치되어 있습니다.

  • AWS SDK for Python 3, Boto 3가 설치되어 있습니다.

  • PyYAML 라이브러리가 설치되어 있습니다(pip install pyyaml).

1단계: S3 버킷 대상 생성(선택 사항)

아직 캡처 파일을 저장할 S3 버킷이 없는 경우 해당 버킷을 생성합니다. bucket-nameregion을 작업자가 선택한 값으로 바꿉니다.

aws s3api create-bucket --bucket <bucket-name> \ --region <region> \ --create-bucket-configuration LocationConstraint=<region>
참고

--create-bucket-configuration 파라미터는 us-east-1을 제외한 모든 리전에 필요합니다.

2단계: 패킷 캡처 시작

노드 모니터링 에이전트 리포지토리(tools/start-capture.py)의 start-capture.py 스크립트를 사용하여 미리 서명된 S3 자격 증명을 생성하고, NodeDiagnostic 리소스를 생성한 후 이를 클러스터에 적용합니다.

  1. 트래픽을 캡처할 노드를 식별합니다.

    kubectl get nodes
  2. 노드 모니터링 에이전트 리포지토리의 start-capture.py 스크립트를 로컬 시스템에 저장한 다음, 해당 스크립트를 실행합니다. <bucket-name><node-name>을 작업자가 선택한 값으로 바꿉니다.

    python3 start-capture.py --bucket <bucket-name> --node <node-name>

    일반 옵션:

    # Capture for 5 minutes on eth0 with a filter python3 start-capture.py --bucket <bucket-name> --node <node-name> \ --duration 5m --interface eth0 --filter "tcp port 443" # Preview the YAML without applying python3 start-capture.py --bucket <bucket-name> --node <node-name> --dry-run

    스크립트에는 boto3pyyaml이 설치되고 클러스터에 맞게 kubectl 구성된 Python 3이 필요합니다.

    스크립트는 다음과 같은 NodeDiagnostic 리소스를 생성합니다. 이 예제는 참조용으로 제공됩니다. upload 필드에는 스크립트를 통해 프로그래밍 방식으로 생성되는 미리 서명된 S3 POST 자격 증명이 필요합니다.

    apiVersion: eks.amazonaws.com/v1alpha1 kind: NodeDiagnostic metadata: name: <node-name> # Required: node instance ID spec: packetCapture: duration: "30s" # Required: capture duration (max 1h) # interface: "eth0" # Optional: default is primary ENI. Use "any" for all interfaces # filter: "tcp port 443" # Optional: tcpdump filter expression # chunkSizeMB: 10 # Optional: file rotation size in MB (1-100, default: 10) upload: # Required: pre-signed S3 POST credentials url: "https://<bucket>.s3.amazonaws.com/" fields: key: "captures/<node-name>/${filename}" # ... other pre-signed POST fields (generated by the script)

3단계: 캡처 진행 상황 모니터링

캡처의 상태를 확인합니다.

kubectl describe nodediagnostic <node-name>

상태가 다음과 같이 표시됩니다.

  • Running - 캡처가 진행 중입니다.

  • Completed(Success 사유 포함) - 캡처가 완료되고 모든 파일이 업로드된 경우입니다.

  • Completed(Failure 사유 포함) - 캡처에 오류가 발생한 경우입니다.

captureID(S3 경로 식별에 사용됨)를 포함한 전체 상태를 보려면:

kubectl get nodediagnostic <node-name> -o jsonpath='{.status.captureStatuses}'

4단계: S3에서 캡처 파일 다운로드

상태가 Success로 표시되면 S3에서 캡처 파일을 다운로드합니다.

aws s3 cp s3://<bucket-name>/captures/ ./captures/ --recursive

파일은 gzip으로 압축된 pcap 형식입니다. tcpdump 또는 Wireshark를 사용하여 압축을 풀고 분석합니다.

gunzip captures/*.gz tcpdump -r captures/capture.pcap0000 -n

5단계: 정리

NodeDiagnostic 리소스는 자동으로 삭제되지 않습니다. 캡처 파일을 가져온 후 정리합니다. 캡처가 실행되는 동안 리소스를 삭제하면 캡처가 즉시 중지됩니다.

kubectl delete nodediagnostic <node-name>

구성 옵션 및 동작

전체 packetCapture 사양 참조, 구성 옵션, 동작 세부 정보는 노드 모니터링 에이전트 리포지토리의 패킷 캡처 설명서를 참조하세요.