Compartilhar via


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

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.

  1. 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
    
  2. Execute o kubectl apply -f hostprocess.yaml comando para implantar o contêiner HostProcess do Windows no nó do Windows especificado.

  3. Execute o comando kubectl exec -it [HPC-POD-NAME] -- powershell.

  4. 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.

  1. 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.

  2. 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.