協助改進此頁面
本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
若要為本使用者指南貢獻內容,請點選每個頁面右側面板中的在 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-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和 的 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的原因。 -
CompletedFailure如果擷取發生錯誤,則為 原因。
若要查看完整狀態,包括 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規格參考、組態選項和行為詳細資訊,請參閱節點監控代理程式儲存庫中的封包擷取文件