从 AKS 群集中的 Windows 节点捕获 TCP 转储
使用 Microsoft Azure Kubernetes 服务 (AKS) 群集时,可能会出现网络问题。 为了帮助调查这些问题,本文介绍如何从 AKS 群集中的 Windows 节点捕获 TCP 转储,然后将捕获下载到本地计算机。
先决条件
- Azure CLI 版本 2.0.59 或更高版本。 可以在 Web 浏览器中打开 Azure Cloud Shell以输入 Azure CLI 命令。 或者在本地计算机上安装 或升级 Azure CLI 。 若要查找计算机上安装的版本,请运行
az --version
。 - AKS 群集。 如果没有 AKS 群集,请使用 Azure CLI 或通过 Azure 门户 创建一个。
步骤 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 反馈社区提交产品反馈。