从 AKS 群集中的 Linux 节点捕获 TCP 转储
使用 Microsoft Azure Kubernetes 服务 (AKS) 群集时,可能会出现网络问题。 为了帮助调查这些问题,本文介绍如何从 AKS 群集中的 Linux 节点捕获 TCP 转储,然后将捕获下载到本地计算机。
先决条件
- Kubernetes kubectl 工具。 若要使用 Azure CLI 安装 kubectl,请运行 az aks install-cli 命令。
- AKS 群集。 如果没有 AKS 群集,请使用 Azure CLI 或通过 Azure 门户 创建一个。
- Linux 节点上安装的 tcpdump 命令行工具。
注意
可以通过 Helm 图表自动执行 TCP 捕获,该图表可以在后台作为 DaemonSet 运行。 有关详细信息,请参阅此 用于捕获 TCP 转储的自定义 GitHub 工具,或使用以下部分中的步骤。
步骤 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 节点的交互式 shell 连接。
步骤 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
运行跟踪时,多次复制问题。 此操作可确保已在 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
第三方信息免责声明
本文中提到的第三方产品由 Microsoft 以外的其他公司提供。 Microsoft 不对这些产品的性能或可靠性提供任何明示或暗示性担保。
联系我们寻求帮助
如果你有任何疑问或需要帮助,请创建支持请求或联系 Azure 社区支持。 还可以向 Azure 反馈社区提交产品反馈。
反馈
https://aka.ms/ContentUserFeedback。
即将发布:在整个 2024 年,我们将逐步淘汰作为内容反馈机制的“GitHub 问题”,并将其取代为新的反馈系统。 有关详细信息,请参阅:提交和查看相关反馈