Partilhar via


Conectar-se ao cluster Kubernetes do Azure Operator Nexus

Durante todo o ciclo de vida do cluster Kubernetes do Azure Operator Nexus, irás eventualmente precisar de aceder diretamente a um nó do cluster. Esse acesso pode ser para manutenção, coleta de logs ou operações de solução de problemas. Você acessa um nó por meio de autenticação, cujos métodos variam dependendo do seu método de conexão. Você autentica-se de forma segura nos nós do cluster através de duas opções discutidas neste artigo. Por motivos de segurança, os nós de cluster não são expostos à Internet. Em vez disso, para se conectar diretamente aos nós do cluster, você precisa usar ou kubectl debug ou o endereço IP do host a partir de um jumpbox (servidor de salto).

Pré-requisitos

  • Um cluster Kubernetes do Nexus do Operador do Azure implantado em um grupo de recursos em sua assinatura do Azure.
  • Chave privada SSH para os nós do cluster.
  • Para SSH usando o endereço IP do nó, você deve implantar uma VM jumpbox na mesma rede CNI (Container Network Interface) que os nós do cluster.

Acesso aos nós do cluster através do Azure Arc para servidores

O az ssh arc comando permite que os usuários acessem remotamente uma VM de cluster que foi conectada ao Azure Arc. Esse método é uma maneira segura de SSH no nó do cluster diretamente da linha de comando, tornando-o um método rápido e eficiente para gerenciamento remoto.

Observação

Os nós de cluster do Operador Nexus Kubernetes são servidores conectados Arc por padrão.

  1. Defina as variáveis necessárias. Substitua os espaços reservados pelos valores reais relevantes para seu ambiente do Azure e cluster Nexus Kubernetes.

    RESOURCE_GROUP="myResourceGroup" # Resource group where the Nexus Kubernetes cluster is deployed
    CLUSTER_NAME="myNexusK8sCluster" # Name of the Nexus Kubernetes cluster
    SUBSCRIPTION_ID="<Subscription ID>" # Azure subscription ID
    ADMIN_USERNAME="azureuser" # Username for the cluster administrator (--admin-username parameter value used during cluster creation)
    SSH_PRIVATE_KEY_FILE="<vm_ssh_id_rsa>" # Path to the SSH private key file
    MANAGED_RESOURCE_GROUP=$(az networkcloud kubernetescluster show -n $CLUSTER_NAME -g $RESOURCE_GROUP --subscription $SUBSCRIPTION_ID --output tsv --query managedResourceGroupConfiguration.name)
    
  2. Obtenha os nomes dos nós de cluster disponíveis.

    az networkcloud kubernetescluster show --name $CLUSTER_NAME --resource-group $RESOURCE_GROUP --subscription $SUBSCRIPTION_ID -o json | jq '.nodes[].name'
    
  3. Saída de exemplo:

    "mynexusk8scluster-0b32128d-agentpool1-md-7h9t4"
    "mynexusk8scluster-0b32128d-agentpool1-md-c6xbs"
    "mynexusk8scluster-0b32128d-control-plane-qq5jm"
    
  4. Defina a variável VM_NAME como o nome do nó do cluster.

    VM_NAME="mynexusk8scluster-0b32128d-agentpool1-md-7h9t4"
    
  5. Execute o seguinte comando para aceder ao nó do cluster através de SSH.

    az ssh arc --subscription $SUBSCRIPTION_ID \
        --resource-group $MANAGED_RESOURCE_GROUP \
        --name $VM_NAME \
        --local-user $ADMIN_USERNAME \
        --private-key-file $SSH_PRIVATE_KEY_FILE
    

Acessar nós usando a API do Kubernetes

Este método requer o uso de kubectl debug comando. Ao contrário do SSH (usando 'az ssh arc' ou IP direto), este método é limitado a contentores e pode não identificar problemas mais amplos do sistema, oferecendo acesso e controle total do servidor.

Acesso à API do Kubernetes via Azure Arc for Kubernetes

Observação

Quando você cria um cluster Nexus Kubernetes, o Nexus cria automaticamente um grupo de recursos gerenciado dedicado a armazenar os recursos do cluster, dentro desse grupo, o recurso de cluster conectado ao Arc é estabelecido.

Para aceder ao cluster, necessita configurar a ligação kubeconfig do cluster. Depois de iniciar sessão na CLI do Azure com a entidade Microsoft Entra relevante, pode obter o kubeconfig necessário para comunicar com o cluster a partir de qualquer lugar, mesmo fora da firewall que o rodeia.

  1. Definir CLUSTER_NAME, RESOURCE_GROUP e SUBSCRIPTION_ID variáveis.

    CLUSTER_NAME="myNexusK8sCluster"
    RESOURCE_GROUP="myResourceGroup"
    SUBSCRIPTION_ID=<set the correct subscription_id>
    
  2. Consultar grupo de recursos gerenciados com az e armazenar em MANAGED_RESOURCE_GROUP

     az account set -s $SUBSCRIPTION_ID
     MANAGED_RESOURCE_GROUP=$(az networkcloud kubernetescluster show -n $CLUSTER_NAME -g $RESOURCE_GROUP --output tsv --query managedResourceGroupConfiguration.name)
    
  3. O comando a seguir inicia um proxy connectedk8s que permite que você se conecte ao servidor de API do Kubernetes para o cluster Nexus Kubernetes especificado.

    az connectedk8s proxy -n $CLUSTER_NAME  -g $MANAGED_RESOURCE_GROUP &
    
  4. Use kubectl para enviar solicitações para o cluster:

    kubectl get pods -A
    

    Agora você deve ver uma resposta do cluster contendo a lista de todos os nós.

Observação

Se vir a mensagem de erro "Falha ao postar token de acesso ao proxy do cliente Falha ao se conectar ao MSI", talvez seja necessário executar um az login para reautenticar com o Azure.

Acesso a nós de cluster por meio do Azure Arc for Kubernetes

Depois de se conectar a um cluster via Arc for Kubernetes, pode ligar-se a um nó individual de Kubernetes usando o comando kubectl debug para executar um contêiner privilegiado no seu nó.

  1. Liste os nós em seu cluster Nexus Kubernetes:

    $> kubectl get nodes
    NAME                                             STATUS   ROLES           AGE    VERSION
    mynexusk8scluster-0b32128d-agentpool1-md-7h9t4   Ready    <none>          125m   v1.24.9
    mynexusk8scluster-0b32128d-agentpool1-md-c6xbs   Ready    <none>          125m   v1.24.9
    mynexusk8scluster-0b32128d-control-plane-qq5jm   Ready    <none>          124m   v1.24.9
    
  2. Inicie um contêiner privilegiado em seu nó e conecte-se a ele:

    $> kubectl debug node/mynexusk8scluster-0b32128d-agentpool1-md-7h9t4 -it --image=mcr.microsoft.com/cbl-mariner/base/core:2.0
    Creating debugging pod node-debugger-mynexusk8scluster-0b32128d-agentpool1-md-7h9t4-694gg with container debugger on node mynexusk8scluster-0b32128d-agentpool1-md-7h9t4.
    If you don't see a command prompt, try pressing enter.
    root [ / ]#
    

    Esse contêiner privilegiado dá acesso ao nó. Execute comandos no nó do cluster ao executar chroot /host na linha de comando.

  3. Quando terminar de depurar um pod, insira o comando exit para encerrar a sessão interativa do shell. Depois de sair do shell, certifique-se de eliminar a cápsula:

    kubectl delete pod node-debugger-mynexusk8scluster-0b32128d-agentpool1-md-7h9t4-694gg 
    

Crie uma ligação de shell interativa com um nó usando o endereço IP

Conectar-se ao nó do cluster a partir do jumpbox do Azure

Outra opção para se conectar de forma segura a um nó do cluster Nexus Kubernetes do Operador Azure é configurar acesso direto à rede CNI do cluster a partir da VM jumpbox do Azure. Usando esta abordagem, pode aceder aos nós do cluster por SSH e também executar kubectl comandos contra o cluster usando o kubeconfig ficheiro.

Entre em contato com o administrador da rede para configurar uma conexão direta da VM jumpbox do Azure com a rede CNI do cluster.

Conectar-se ao nó do cluster a partir da máquina de salto nas instalações locais

Estabeleça acesso direto à CNI (Container Network Interface) do cluster a partir de sua jumpbox local. Esse acesso direto permite aceder via SSH aos nós do cluster e executar os comandos kubectl utilizando o ficheiro kubeconfig.

Entre em contato com o administrador da rede para configurar essa conexão direta com a rede CNI do cluster.

Endereço IP dos nós do cluster

Antes de se conectar aos nós do cluster, você precisa encontrar o endereço IP dos nós. O endereço IP dos nós pode ser encontrado usando o portal do Azure ou a CLI do Azure.

Utilizar a CLI do Azure

  1. Defina as variáveis RESOURCE_GROUP, CLUSTER_NAME e SUBSCRIPTION_ID para corresponder ao seu ambiente.

    RESOURCE_GROUP="myResourceGroup"
    CLUSTER_NAME="myNexusK8sCluster"
    SUBSCRIPTION_ID="<Subscription ID>"
    
  2. Execute o seguinte comando para obter o endereço IP dos nós.

    az networkcloud kubernetescluster show --name $CLUSTER_NAME --resource-group $RESOURCE_GROUP --subscription $SUBSCRIPTION_ID -o json | jq '.nodes[] | select(any(.networkAttachments[]; .networkAttachmentName == "defaultcni")) | {name: .name, ipv4Address: (.networkAttachments[] | select(.networkAttachmentName == "defaultcni").ipv4Address)}'
    
  3. Aqui está a saída de exemplo do comando.

    {
      "name": "mynexusk8scluster-0b32128d-agentpool1-md-7h9t4",
      "ipv4Address": "10.5.54.47"
    }
    {
      "name": "mynexusk8scluster-0b32128d-agentpool1-md-c6xbs",
      "ipv4Address": "10.5.54.48"
    }
    {
      "name": "mynexusk8scluster-0b32128d-control-plane-qq5jm",
      "ipv4Address": "10.5.54.46"
    }
    

Utilizar o portal do Azure

Para localizar o endereço IP da VM para SSH, siga estes passos:

  1. Aceda ao portal do Azure e inicie sessão com o seu nome de utilizador e palavra-passe.
  2. Digite 'Kubernetes Cluster (Operator Nexus)' na caixa de pesquisa e selecione o serviço 'Kubernetes Cluster' na lista de resultados.

Screenshot da navegação no serviço Nexus Kubernetes.

  1. Procura o recurso específico 'Nexus Kubernetes cluster' de que precisas para usar a pesquisa.

Captura de tela da navegação no cluster Nexus Kubernetes.

  1. Depois de encontrar o recurso certo, combinando seu nome com o nome do cluster, selecione o recurso para ir para a página inicial 'Cluster Kubernetes'.

Captura de tela da página inicial do cluster Nexus Kubernetes.

  1. Depois de encontrar o recurso certo, combinando seu nome com o nome do cluster, vá para a seção 'Nós de cluster do Kubernetes' no menu à esquerda.

Captura de tela da navegação nos nós de cluster do Nexus Kubernetes.

  1. Selecione o nome do nó Kubernetes em que você está interessado para ver seus detalhes.
  2. Verifique a guia 'Redes Conectadas' para encontrar o endereço IP da 'Rede de Camada 3' do nó usado como rede CNI.

Captura de ecrã da navegação nas redes dos nós do cluster Nexus Kubernetes.

Recuperar o SAN (Nome Alternativo da Entidade) do cluster

Execute os comandos a seguir para recuperar a lista de nomes alternativos de entidade (SAN) aceitos pelo certificado do servidor de API do Kubernetes. Primeiro, aceda ao nó do plano de controlo através do Azure Arc para servidores ou utilizando o shell interativo com o endereço IP. Isso lhe dá acesso ao certificado usado pelo servidor de API. Você pode inspecionar o conteúdo do certificado usando o seguinte comando com privilégios sudo:

sudo openssl x509 -in /etc/kubernetes/pki/apiserver.crt -text -noout

Cada uma das SANs é identificada pelo prefixo "DNS:". Escolha apenas as SANs que seguem a convenção de nomenclatura especificada "<clusterName-resourceGroup><>", pois ela é exclusiva em comparação com outras SANs, como "kubernetes.default.svc.cluster.local".

Próximos passos

Experimente os seguintes artigos para saber mais sobre o cluster Kubernetes do Azure Operator Nexus.