View a markdown version of this page

使用 kubectl 和 S3 擷取受管節點上的網路流量 - Amazon EKS

協助改進此頁面

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

若要為本使用者指南貢獻內容,請點選每個頁面右側面板中的在 GitHub 上編輯此頁面連結。

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

使用 kubectl 和 S3 擷取受管節點上的網路流量

了解如何在具有節點監控代理程式的 Amazon EKS 受管節點上擷取網路流量。代理程式會在節點上執行 tcpdump、壓縮擷取檔案,並將它們上傳到您的 S3 儲存貯體。

先決條件

請確認您已具備以項目:

  • 具有節點監控代理程式的現有 Amazon EKS Auto Mode 叢集。如需詳細資訊,請參閱偵測節點運作狀態問題並啟用自動節點修復

  • 已安裝並設定為可與您叢集通訊的 kubectl 命令列工具。

  • 安裝並登入 AWS 的 CLI 具有建立 S3 儲存貯體和物件的足夠許可。

  • 已安裝最新版本的 Python 3。

  • 已安裝適用於 Python 3、Boto 3 的 AWS SDK。

  • 已安裝 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

    指令碼需要使用已安裝 boto3和 的 Python 3pyyaml,並為您的叢集kubectl進行設定。

    指令碼會產生類似下列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規格參考、組態選項和行為詳細資訊,請參閱節點監控代理程式儲存庫中的封包擷取文件