從 AKS 叢集中的 Linux 節點擷取 TCP 傾印
當您使用 Microsoft Azure Kubernetes Service (AKS) 叢集時,可能會發生網路問題。 為了協助調查這些問題,本文說明如何從 AKS 叢集中的 Linux 節點擷取 TCP 傾印,然後將擷取下載到本機電腦。
必要條件
- Kubernetes kubectl 工具。 若要使用 Azure CLI 安裝 kubectl,請執行 az aks install-cli 命令。
- AKS 叢集。 如果您沒有 AKS 叢集,請使用 Azure CLI 或透過 Azure 入口網站 建立一個叢集。
- 安裝在 Linux節點上的 tcpdump 命令行工具。
注意
您可以透過 Helm 圖表將 TCP 擷取自動化,其可在背景中以 DaemonSet 的形式執行。 如需詳細資訊,請參閱此 自定義 GitHub 工具來擷取 TCP 傾印,或使用下列各節中的步驟。
步驟 1:尋找要疑難解答的節點
如何判斷要從哪個節點提取 TCP 傾印? 您會先使用 Kubernetes 命令行用戶端 kubectl 取得 AKS 叢集中的節點清單。 依照指示連線到叢集,並使用 Azure 入口網站 或 Azure CLI 執行 kubectl get nodes --output wide
命令。 隨即會出現類似下列輸出的節點清單:
$ kubectl get nodes --output wide
NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME
aks-agentpool-34796016-vmss000000 Ready agent 45h v1.20.9 10.240.1.81 <none> Ubuntu 18.04.6 LTS 5.4.0-1062-azure containerd://1.4.9+azure
aks-agentpool-34796016-vmss000002 Ready agent 45h v1.20.9 10.240.2.47 <none> Ubuntu 18.04.6 LTS 5.4.0-1062-azure containerd://1.4.9+azure
步驟 2:連線到 Linux 節點
下一個步驟是建立您想要從中擷取網路追蹤的 AKS 叢集節點連線。 如需詳細資訊,請參閱 建立Linux節點的互動式殼層連線。
步驟 3:確定已安裝 tcpdump
建立與 AKS Linux 節點的連線之後,請執行 tcpdump --version
,確認 tcpdump 工具先前已安裝在節點上。 如果尚未安裝 tcpdump,會出現下列錯誤文字:
# tcpdump --version
bash: tcpdump: command not found
然後執行進階套件工具的套件處理公用程式 apt-get,在您的 Pod 上安裝 tcpdump:
apt-get update && apt-get install tcpdump
如果已安裝 tcpdump,會出現類似下列文字的內容:
# tcpdump --version
tcpdump version 4.9.3
libpcap version 1.8.1
OpenSSL 1.1.1 11 Sep 2018
步驟 4:建立封包擷取
若要擷取傾印,請 執行 tcpdump 命令 ,如下所示:
# tcpdump --snapshot-length=0 -vvv -w /capture.cap
tcpdump: listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes
Got 6
注意
在沒有使用篩選參數的情況下執行 tcpdump 可能會大幅增加封包擷取 (PCAP) 檔案的大小,特別是長時間執行。 因此,建議您新增篩選,例如來源、目的地和埠。 例如:
tcpdump dst 192.168.1.100
tcpdump dst host.mydomain.com
tcpdump port http or port ftp or port smtp or port imap or port pop3 or port telnet
執行追蹤時,請多次復寫您的問題。 此動作可確保在 TCP 傾印內擷取問題。 請記下複寫問題時的時間戳。 若要在完成時停止封包擷取,請按 Ctrl+C:
# tcpdump -s 0 -vvv -w /capture.cap
tcpdump: listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes
^C526 packets captured
526 packets received by filter
0 packets dropped by kernel
步驟 5:在本機傳輸擷取
完成封包擷取之後,請識別協助程式Pod,以便您可以在本機複製傾印。 開啟第二個控制台,然後執行 kubectl get pods
來取得 Pod 清單,如下所示。
$ kubectl get pods
NAME READY STATUS RESTARTS AGE
azure-vote-back-6c4dd64bdf-m4nk7 1/1 Running 0 3m29s
azure-vote-front-85b4df594d-jhpzw 1/1 Running 0 3m29s
node-debugger-aks-nodepool1-38878740-vmss000000-jfsq2 1/1 Running 0 60s
協助程式 Pod 的前置詞 node-debugger-aks
為 ,如第三個數據列所示。 取代 Pod 名稱,然後執行下列 kubectl 命令。 這些命令會擷取 Linux 節點的封包擷取。
kubectl cp node-debugger-aks-nodepool1-38878740-vmss000000-jfsq2:/capture.cap capture.cap
注意
chroot /host
如果輸入偵錯 Pod 時使用了 指令,請在來源檔案之前/capture.cap
新增 /host
。
協力廠商資訊免責聲明
本文提及的協力廠商產品是由與 Microsoft 無關的獨立廠商所製造。 Microsoft 不以默示或其他方式,提供與這些產品的效能或可靠性有關的擔保。
與我們連絡,以取得說明
如果您有問題或需要相關協助,請建立支援要求,或詢問 Azure community 支援。 您也可以向 Azure 意見反應社群提交產品意見反應。