从 AKS 群集中的 Linux 节点捕获 TCP 转储

使用 Microsoft Azure Kubernetes 服务 (AKS) 群集时,可能会出现网络问题。 为了帮助调查这些问题,本文介绍如何从 AKS 群集中的 Linux 节点捕获 TCP 转储,然后将捕获下载到本地计算机。

先决条件

注意

可以通过 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 反馈社区提交产品反馈。