

 **このページの改善にご協力ください** 

このユーザーガイドに貢献するには、すべてのページの右側のペインにある「**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` はキャプチャ処理中に動作します。
+  キャプチャが完了し、すべてのファイルがアップロードされた時点で、理由 `Success` を伴う `Completed`。
+  キャプチャ中にエラーが発生した場合は、理由 `Failure` とともに `Completed` と表示されます。

`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) を参照してください。