Capturar um despejo TCP de um nó do Windows em um cluster do AKS
Problemas de rede podem ocorrer quando você estiver usando um cluster do AKS (Serviço de Kubernetes do Microsoft Azure). Para ajudar a investigar esses problemas, este artigo explica como capturar um despejo TCP de um nó do Windows em um cluster do AKS e, em seguida, baixar a captura para o computador local.
Pré-requisitos
- CLI do Azure, versão 2.0.59 ou posterior. Você pode abrir o Azure Cloud Shell no navegador da Web para inserir comandos da CLI do Azure. Ou instale ou atualize a CLI do Azure em seu computador local. Para localizar a versão instalada em sua máquina, execute
az --version
. - Uma cluster do AKS. Se você não tiver um cluster do AKS, crie um usando a CLI do Azure ou por meio do portal do Azure.
Etapa 1: Localizar os nós para solucionar problemas
Como você determina de qual nó extrair o despejo TCP? Primeiro, você obtém a lista de nós no cluster do AKS usando o cliente de linha de comando do Kubernetes, kubectl. Siga as instruções para se conectar ao cluster e executar o comando usando o portal do Azure ou a kubectl get nodes --output wide
CLI do Azure. Uma lista de nós semelhante à seguinte saída é exibida:
$ 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
Etapa 2: Conectar-se a um nó do Windows
A próxima etapa é estabelecer uma conexão com o nó de cluster do AKS. Você autentica usando uma chave Secure Shell (SSH) ou usando a senha de administrador do Windows em uma conexão RDP (Remote Desktop Protocol). Ambos os métodos exigem a criação de uma conexão intermediária, pois no momento você não pode se conectar diretamente ao nó do Windows do AKS. Se você se conectar a um nó por meio de SSH ou RDP, precisará especificar o nome de usuário para os nós do AKS. Por padrão, esse nome de usuário é azureuser. Além de usar uma conexão SSH ou RDP, você pode se conectar a um nó do Windows a partir do contêiner HostProcess.
Crie hostprocess.yaml com o conteúdo a seguir. Substitua
AKSWINDOWSNODENAME
pelo nome do nó do Windows do AKS.apiVersion: v1 kind: Pod metadata: labels: pod: hpc name: hpc spec: securityContext: windowsOptions: hostProcess: true runAsUserName: "NT AUTHORITY\\SYSTEM" hostNetwork: true containers: - name: hpc image: mcr.microsoft.com/windows/servercore:ltsc2022 # Use servercore:1809 for WS2019 command: - powershell.exe - -Command - "Start-Sleep 2147483" imagePullPolicy: IfNotPresent nodeSelector: kubernetes.io/os: windows kubernetes.io/hostname: AKSWINDOWSNODENAME tolerations: - effect: NoSchedule key: node.kubernetes.io/unschedulable operator: Exists - effect: NoSchedule key: node.kubernetes.io/network-unavailable operator: Exists - effect: NoExecute key: node.kubernetes.io/unreachable operator: Exists
Execute o
kubectl apply -f hostprocess.yaml
comando para implantar o contêiner HostProcess do Windows no nó do Windows especificado.Execute o comando
kubectl exec -it [HPC-POD-NAME] -- powershell
.Execute todos os comandos do PowerShell dentro do contêiner HostProcess para acessar o nó do Windows.
Observação
Para acessar os arquivos no nó do Windows, alterne a pasta raiz para
C:\
dentro do contêiner HostProcess.
Etapa 3: Criar uma captura de pacote
Quando você está conectado ao nó do Windows por meio de SSH ou RDP, ou do contêiner HostProcess, um formulário do prompt de comando do Windows é exibido:
azureuser@akswin000000 C:\Users\azureuser>
Agora abra um prompt de comando e insira o comando Network Shell (netsh) abaixo para capturar rastreamentos (netsh trace start). Esse comando inicia o processo de captura de pacotes.
netsh trace start capture=yes tracefile=C:\temp\AKS_node_name.etl
A saída é semelhante ao seguinte texto:
Trace configuration:
-------------------------------------------------------------------
Status: Running
Trace File: AKS_node_name.etl
Append: Off
Circular: On
Max Size: 250 MB
Report: Off
Enquanto o rastreamento estiver em execução, replique seu problema várias vezes. Essa ação garante que o problema tenha sido capturado no despejo TCP. Observe o carimbo de data/hora enquanto replica o problema. Para interromper a captura de pacotes quando terminar, digite 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:\temp\AKS_node_name.cab".
File location = C:\temp\AKS_node_name.etl
Tracing session was successfully stopped.
Etapa 4: transferir a captura localmente
Depois de concluir a captura de pacotes, identifique o pod HostProcess para que você possa copiar o despejo localmente.
Em sua máquina local, abra um segundo console e obtenha uma lista de pods executando o
kubectl get pods
comando: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 hpc 1/1 Running 0 3m58s
O nome padrão do pod HostProcess é hpc, conforme mostrado na terceira linha.
Copie os arquivos de despejo TCP localmente executando os comandos a seguir. Substitua o nome do pod por
hpc
.kubectl cp -n default hpc:/temp/AKS_node_name.etl ./AKS_node_name.etl tar: Removing leading '/' from member names kubectl cp -n default hpc:/temp/AKS_node_name.etl ./AKS_node_name.cab tar: Removing leading '/' from member names
Os arquivos .etl e .cab agora estarão presentes em seu diretório local.
Entre em contato conosco para obter ajuda
Se você tiver dúvidas ou precisar de ajuda, crie uma solicitação de suporte ou peça ajuda à comunidade de suporte do Azure. Você também pode enviar comentários sobre o produto para a comunidade de comentários do Azure.