

 **이 페이지 개선에 도움 주기** 

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

# kubectl 및 S3를 사용하여 관리형 노드에서 네트워크 트래픽 캡처
<a name="auto-get-tcpdump"></a>

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

## 사전 조건
<a name="_prerequisites"></a>

다음 항목이 준비되어 있는지 확인합니다.
+ 노드 모니터링 에이전트가 있는 기존 Amazon EKS 자율 모드 클러스터. 자세한 내용은 [노드 상태 문제 감지 및 노드 자동 복구 활성화](node-health.md) 섹션을 참조하세요.
+ 클러스터와의 통신을 위해 `kubectl` 명령줄 도구가 설치 및 구성되어 있습니다.
+ S3 버킷 및 객체를 생성할 수 있는 충분한 권한을 가지고 AWS CLI를 설치하고 로그인했습니다.
+ 최신 버전의 Python 3가 설치되어 있습니다.
+ AWS SDK for Python 3, Boto 3가 설치되어 있습니다.
+ PyYAML 라이브러리가 설치되어 있습니다(`pip install pyyaml`).

## 1단계: S3 버킷 대상 생성(선택 사항)
<a name="_step_1_create_s3_bucket_destination_optional"></a>

아직 캡처 파일을 저장할 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단계: 패킷 캡처 시작
<a name="_step_2_start_packet_capture"></a>

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

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

   ```
   kubectl get nodes
   ```

1. 노드 모니터링 에이전트 리포지토리의 [start-capture.py](https://github.com/aws/eks-node-monitoring-agent/blob/main/tools/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단계: 캡처 진행 상황 모니터링
<a name="_step_3_monitor_capture_progress"></a>

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

```
kubectl describe nodediagnostic {{<node-name>}}
```

상태가 다음과 같이 표시됩니다.
+  `Running` - 캡처가 진행 중입니다.
+  `Completed`(`Success` 사유 포함) - 캡처가 완료되고 모든 파일이 업로드된 경우입니다.
+  `Completed`(`Failure` 사유 포함) - 캡처에 오류가 발생한 경우입니다.

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

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

## 4단계: S3에서 캡처 파일 다운로드
<a name="_step_4_download_capture_files_from_s3"></a>

상태가 `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단계: 정리
<a name="_step_5_clean_up"></a>

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

```
kubectl delete nodediagnostic {{<node-name>}}
```

## 구성 옵션 및 동작
<a name="_configuration_options_and_behavior"></a>

전체 `packetCapture` 사양 참조, 구성 옵션, 동작 세부 정보는 노드 모니터링 에이전트 리포지토리의 [패킷 캡처 설명서](https://github.com/aws/eks-node-monitoring-agent/blob/main/docs/packet-capture.adoc)를 참조하세요.