이 페이지 개선에 도움 주기
이 사용자 가이드에 기여하려면 모든 페이지의 오른쪽 창에 있는 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-name 및 region을 작업자가 선택한 값으로 바꿉니다.
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 리소스를 생성한 후 이를 클러스터에 적용합니다.
-
트래픽을 캡처할 노드를 식별합니다.
kubectl get nodes -
노드 모니터링 에이전트 리포지토리의 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스크립트에는
boto3및pyyaml이 설치되고 클러스터에 맞게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 사양 참조, 구성 옵션, 동작 세부 정보는 노드 모니터링 에이전트 리포지토리의 패킷 캡처 설명서