Partilhar via


Conectar aos nós do cluster do Azure Kubernetes Service (AKS) para manutenção ou resolução de problemas

Ao longo do ciclo de vida do seu cluster do Azure Kubernetes Service (AKS), precisará eventualmente aceder diretamente a um nó AKS. Esse acesso pode ser para manutenção, coleta de logs ou operações de solução de problemas.

Este artigo descreve duas opções de ligação segura com nós AKS Linux e Windows. Um requer que você tenha acesso à API do Kubernetes e o outro é através da API AKS ARM, que fornece informações IP privadas diretas. Por razões de segurança, os nós AKS não estão expostos à internet. Em vez disso, para se conectar diretamente a qualquer nó AKS, você precisa usar ou o endereço IP privado do host.

Acesse os nós com a API Kubernetes

Este método requer o comando.

Antes de começar

Este guia mostra como criar uma conexão com um nó AKS e atualizar a chave SSH do seu cluster AKS. Para seguir estes passos, precisa da versão 2.0.64 ou posterior do CLI do Azure. Execute para verificar a versão. Se precisares de instalar ou atualizar, vê Install CLI do Azure.

Conclua estas etapas se você não tiver uma chave SSH. Crie uma chave SSH dependendo da imagem do seu sistema operativo, para macOS e Linux, ou Windows. Guarde o par de chaves no formato OpenSSH e evite formatos não suportados, como . Em seguida, consulte Gerenciar configuração SSH para adicionar a chave ao cluster.

Linux e macOS

Os utilizadores de Linux e macOS podem aceder ao seu nó usando ou ao seu endereço IP privado. Os utilizadores do Windows devem saltar para a secção de proxy do Windows Server para encontrar uma solução alternativa ao SSH via proxy.

Conectar-se com o debug kubectl

Para criar uma conexão de shell interativa, use o comando para executar um contentor privilegiado no seu nó.

  1. Para listar seus nós, use o comando:

    kubectl get nodes -o wide
    

    Saída de exemplo:

    NAME                                STATUS   ROLES   AGE    VERSION   INTERNAL-IP   EXTERNAL-IP   OS-IMAGE
    aks-nodepool1-37663765-vmss000000   Ready    agent   166m   v1.25.6   10.224.0.33   <none>        Ubuntu 22.04.2 LTS
    aks-nodepool1-37663765-vmss000001   Ready    agent   166m   v1.25.6   10.224.0.4    <none>        Ubuntu 22.04.2 LTS
    aksnpwin000000                      Ready    agent   160m   v1.25.6   10.224.0.62   <none>        Windows Server 2022 Datacenter
    
  2. Use o comando para iniciar um contêiner privilegiado no nó e conectar-se a ele.

    kubectl debug node/aks-nodepool1-37663765-vmss000000 -it --image=mcr.microsoft.com/azurelinux/busybox:1.36
    

    Saída de exemplo:

    Creating debugging pod node-debugger-aks-nodepool1-37663765-vmss000000-bkmmx with container debugger on node aks-nodepool1-37663765-vmss000000.
    If you don't see a command prompt, try pressing enter.
    root@aks-nodepool1-37663765-vmss000000:/#
    

    Agora você tem acesso ao nó por meio de um contêiner privilegiado como um pod de depuração.

    Nota

    Você pode interagir com a sessão do nó executando a partir do contêiner privilegiado.

Sair do modo de depuração kubectl

Quando terminar com o seu nó, insira o comando para encerrar a sessão interativa do shell. Depois de a sessão de contenedor interativo ser fechada, exclua o pod de depuração usado com .

kubectl delete pod node-debugger-aks-nodepool1-37663765-vmss000000-bkmmx

Ligação proxy do Windows Server para SSH

Siga estes passos como solução alternativa para se ligar ao SSH num nó do Windows Server.

Criar um servidor proxy

Neste momento, não é possível conectar-se diretamente a um nó do Windows Server usando kubectl debug. Em vez disso, primeiro tens de te ligar a outro nó no cluster com kubectl, depois ligar-te ao nó Windows Server desse nó usando SSH.

Para se conectar a outro nó no cluster, use o comando . Para mais informações, siga os passos anteriores na secção kubectl. Crie uma ligação SSH ao nó do Windows Server a partir de outro nó usando as chaves SSH fornecidas quando criou o cluster AKS e o endereço IP interno do nó do Windows Server.

Importante

Os passos seguintes para criar a ligação SSH ao nó Windows Server a partir de outro nó só podem ser usados se tiver criado o seu cluster AKS usando o CLI do Azure com o parâmetro --generate-ssh-keys. Se você quiser usar suas próprias chaves SSH, você pode usar o para gerenciar chaves SSH em um cluster AKS existente. Para obter mais informações, consulte gerenciar o acesso ao nó SSH.

Nota

Se o seu nó proxy Linux estiver fora de serviço ou não estiver a responder, use o método Azure Bastion para se conectar em vez disso.

  1. Use o comando para iniciar um contentor privilegiado no nó proxy (Linux) e conectar-se a ele.

    kubectl debug node/aks-nodepool1-37663765-vmss000000 -it --image=mcr.microsoft.com/azurelinux/busybox:1.36
    

    Saída de exemplo:

    Creating debugging pod node-debugger-aks-nodepool1-37663765-vmss000000-bkmmx with container debugger on node aks-nodepool1-37663765-vmss000000.
    If you don't see a command prompt, try pressing enter.
    root@aks-nodepool1-37663765-vmss000000:/#
    
  2. Abra uma nova janela do terminal e use o comando para obter o nome do pod iniciado por .

    kubectl get pods
    

    Saída de exemplo:

    NAME                                                    READY   STATUS    RESTARTS   AGE
    node-debugger-aks-nodepool1-37663765-vmss000000-bkmmx   1/1     Running   0          21s
    

    No exemplo de saída, é o nome do pod iniciado por .

  3. Use o comando para abrir uma conexão com o pod implantado:

    kubectl port-forward node-debugger-aks-nodepool1-37663765-vmss000000-bkmmx 2022:22
    

    Saída de exemplo:

    Forwarding from 127.0.0.1:2022 -> 22
    Forwarding from [::1]:2022 -> 22
    

    O exemplo anterior começa a encaminhar o tráfego de rede da porta no computador de desenvolvimento para a porta no pod implantado. Ao usar para abrir uma conexão e encaminhar o tráfego de rede, a conexão permanece aberta até que você pare o comando.

  4. Abra um novo terminal e execute o comando kubectl get nodes para mostrar o endereço IP privado da instância Windows Server:

    kubectl get nodes -o custom-columns='NAME:metadata.name,INTERNAL_IP:status.addresses[?(@.type == "InternalIP")].address'
    

    Saída de exemplo:

    NAME                                INTERNAL_IP
    aks-nodepool1-19409214-vmss000003   10.224.0.8
    aksnpwin000000                      10.224.0.62
    

    No exemplo anterior, 10.224.0.62 é o endereço IP interno do nó do Windows Server.

  5. Crie uma ligação SSH ao nó Windows Server usando o endereço IP interno e ligue-se à porta 22 através da porta 2022 do seu computador de desenvolvimento. O nome de usuário padrão para nós AKS é azureuser. Aceite o prompt para continuar com a conexão. Depois, é-lhe fornecido o prompt bash do nó do Windows Server:

    ssh -o 'ProxyCommand ssh -p 2022 -W %h:%p azureuser@127.0.0.1' azureuser@10.224.0.62
    

    Saída de exemplo:

    The authenticity of host '10.224.0.62 (10.224.0.62)' can't be established.
    ECDSA key fingerprint is SHA256:1234567890abcdefghijklmnopqrstuvwxyzABCDEFG.
    Are you sure you want to continue connecting (yes/no)? yes
    

    Nota

    Se preferir usar a autenticação por senha, inclua o parâmetro . Por exemplo:

     ssh -o 'ProxyCommand ssh -p 2022 -W %h:%p azureuser@127.0.0.1' -o PreferredAuthentications=password azureuser@10.224.0.62
    

Use um container de processo anfitrião para aceder ao nó Windows

  1. Execute o seguinte script para criar . No script, substitua AKSWINDOWSNODENAME pelo nome do nó AKS do Windows.

    Esta especificação usa a imagem base nanoserver. A imagem base não tem PowerShell, mas como é executada como um contêiner de processo de host (HPC), o PowerShell está disponível na VM subjacente.

    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/nanoserver:ltsc2022 # Use nanoserver: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 kubectl apply -f hostprocess.yaml para implementar o Windows HPC no nó Windows especificado.

  3. Utilize .

  4. Podes executar quaisquer comandos PowerShell dentro do contentor HPC para aceder ao nó Windows.

Nota

Precisas de mudar a pasta raiz para C:\ dentro do container HPC para aceder aos ficheiros no nó Windows.

SSH com Azure Bastion

Se o seu nó proxy Linux não for acessível, uma alternativa é utilizar o Azure Bastion como proxy. Este método requer que configure um host Azure Bastion para a rede virtual onde o cluster reside. Consulte Conecte com Azure Bastion para mais detalhes.

Utilize SSH com IPs privados da rede virtual do cluster

Por conveniência, os nós AKS são expostos na rede virtual do cluster através de endereços IP privados. No entanto, você precisa estar na rede virtual do cluster para aceder ao nó via SSH.

  1. Se você não tiver acesso à API do Kubernetes, poderá obter acesso a propriedades como e através da API do pool de agentes do AKS (disponível em versões estáveis ou superiores) para se conectar aos nós do AKS. Obtenha IPs privados usando o comando, direcionando todas as VMs em um pool de nós específico com o sinalizador.

    az aks machine list --resource-group myResourceGroup  --cluster-name myAKSCluster --nodepool-name nodepool1 -o table
    

    A seguinte saída de exemplo mostra os endereços IP internos de todos os nós do pool de nós:

    Name                               Ip           Family
    ---------------------------------  -----------  -----------
    aks-nodepool1-33555069-vmss000000  10.224.0.5   IPv4
    aks-nodepool1-33555069-vmss000001  10.224.0.6   IPv4
    aks-nodepool1-33555069-vmss000002  10.224.0.4   IPv4
    

    Para direcionar um nó específico dentro do pool de nós, use o flag:

    az aks machine show --cluster-name myAKScluster --nodepool-name nodepool1 -g myResourceGroup --machine-name aks-nodepool1-33555069-vmss000000 -o table
    

    O seguinte exemplo de saída mostra o endereço IP interno do nó especificado:

    Name                               Ip         Family
    ---------------------------------  -----------  -----------
    aks-nodepool1-33555069-vmss000000  10.224.0.5   IPv4
    
  2. SSH para o nó usando o endereço IP privado obtido na etapa anterior. Este passo aplica-se apenas aos nós Linux.

    ssh -i /path/to/private_key.pem azureuser@10.224.0.33
    

Próximos passos

Se precisar de mais dados de solução de problemas, você pode visualizar os logs do kubelet ou os logs do plano de controle do Kubernetes.

Para saber mais sobre como gerenciar suas chaves SSH, consulte Gerenciar configuração SSH.