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

使用 Microsoft Azure Kubernetes 服务 (AKS) 群集时,可能会出现网络问题。 为了帮助调查这些问题,本文介绍如何从 AKS 群集中的 Windows 节点捕获 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
akswin000000                        Ready    agent   3m8s    v1.20.9   10.240.0.4     <none>        Windows Server 2019 Datacenter   10.0.17763.2237    docker://20.10.6
akswin000001                        Ready    agent   3m50s   v1.20.9   10.240.0.115   <none>        Windows Server 2019 Datacenter   10.0.17763.2237    docker://20.10.6
akswin000002                        Ready    agent   3m32s   v1.20.9   10.240.0.226   <none>        Windows Server 2019 Datacenter   10.0.17763.2237    docker://20.10.6

步骤 2:连接到 Windows 节点

下一步是建立与 AKS 群集节点的连接。 使用安全外壳 (SSH) 密钥,或者在远程桌面协议 (RDP) 连接中使用 Windows 管理员密码进行身份验证。 这两种方法都需要创建中间连接,因为你当前无法直接连接到 AKS Windows 节点。 无论是通过 SSH 还是 RDP 连接到节点,都需要指定 AKS 节点的用户名。 默认情况下,此用户名为 azureuser

如果你有 SSH 密钥, 请创建与 Windows 节点的 SSH 连接。 SSH 密钥不会保留在 AKS 节点上。 SSH 密钥将还原为在群集上最初安装的内容:

  • 重新 启动
  • 版本升级
  • 节点映像升级

步骤 3:创建数据包捕获

通过 SSH 或 RDP 连接到 Windows 节点时,将显示 Windows 命令提示符的一种形式:

azureuser@akswin000000 C:\Users\azureuser>

现在打开命令提示符并输入下面的 Network Shell (netsh) 命令,以捕获 (netsh 跟踪启动) 。 此命令启动数据包捕获过程。

netsh trace start capture=yes tracefile=C:\Users\azureuser\AKS_node_name.etl 

输出将显示,类似于以下文本:

Trace configuration:
-------------------------------------------------------------------
Status:             Running
Trace File:         AKS_node_name.etl
Append:             Off
Circular:           On
Max Size:           250 MB
Report:             Off

运行跟踪时,多次复制问题。 此操作可确保已在 TCP 转储中捕获问题。 复制问题时,请注意时间戳。 若要在完成后停止数据包捕获,请输入 netsh trace stop

azureuser@akswin000000 C:\Users\azureuser>netsh trace stop
Merging traces ... done
Generating data collection ... done
The trace file and additional troubleshooting information have been compiled as "C:\Users\azureuser\AKS_node_name.cab".
File location = C:\Users\azureuser\AKS_node_name.etl
Tracing session was successfully stopped.

步骤 4:在本地传输捕获

完成数据包捕获后,请确定帮助程序 Pod,以便在本地复制转储。 打开第二个控制台,然后通过运行 kubectl get pods获取 Pod 列表,如下所示。

kubectl get pods
NAME                                                    READY   STATUS    RESTARTS   AGE
azure-vote-back-6c4dd64bdf-m4nk7                        1/1     Running   2          3d21h
azure-vote-front-85b4df594d-jhpzw                       1/1     Running   2          3d21h
node-debugger-aks-nodepool1-38878740-vmss000000-6ztp6   1/1     Running   0          3m58s

帮助程序 Pod 的 node-debugger-aks前缀为 ,如第三行所示。 替换 pod 名称,然后运行以下安全复制 (scp) 命令。 这些命令检索事件跟踪日志 (.etl) ,并存档为数据包捕获生成的 (.cab) 文件。

scp -o 'ProxyCommand ssh -p 2022 -W %h:%p azureuser@127.0.0.1' azureuser@10.240.0.97:AKS_node_name.cab .
scp -o 'ProxyCommand ssh -p 2022 -W %h:%p azureuser@127.0.0.1' azureuser@10.240.0.97:AKS_node_name.etl .

将显示类似于以下文本的输出:

$ scp -o 'ProxyCommand ssh -p 2022 -W %h:%p azureuser@127.0.0.1' azureuser@10.240.0.97:AKS_node_name.cab .

Authorized uses only. All activity may be monitored and reported.
AKS_node_name.cab                                                                  100%  571KB 984.0KB/s   00:00

scp -o 'ProxyCommand ssh -p 2022 -W %h:%p azureuser@127.0.0.1' azureuser@10.240.0.97:AKS_node_name.etl .

Authorized uses only. All activity may be monitored and reported.
AKS_node_name.etl                                                                  100% 1536KB   1.3MB/s   00:01

联系我们寻求帮助

如果你有任何疑问或需要帮助,请创建支持请求联系 Azure 社区支持。 还可以向 Azure 反馈社区提交产品反馈。