共用方式為


從 AKS 叢集中的 Linux 節點擷取 TCP 傾印

當您使用 Microsoft Azure Kubernetes Service (AKS) 叢集時,可能會發生網路問題。 為了協助調查這些問題,本文說明如何從 AKS 叢集中的 Linux 節點擷取 TCP 傾印,然後將擷取下載到本機電腦。

必要條件

注意

您可以透過 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 意見反應社群提交產品意見反應。