Connessione al cluster Nexus Kubernetes dell'operatore di Azure

Durante tutto il ciclo di vita del cluster Nexus Kubernetes dell'operatore di Azure, alla fine è necessario accedere direttamente a un nodo del cluster. Questo accesso potrebbe servire per la manutenzione, la raccolta dei registri o operazioni di risoluzione dei problemi. È possibile accedere a un nodo tramite l'autenticazione, che i metodi variano a seconda del metodo di connessione. L'autenticazione viene eseguita in modo sicuro nei nodi del cluster tramite due opzioni descritte in questo articolo. Per motivi di sicurezza, i nodi del cluster non sono esposti a Internet. Per connettersi direttamente ai nodi del cluster, è invece necessario usare o kubectl debug l'indirizzo IP dell'host da un jumpbox.

Prerequisiti

  • Un cluster Nexus Kubernetes dell'operatore di Azure distribuito in un gruppo di risorse nella sottoscrizione di Azure.
  • Chiave privata SSH per i nodi del cluster.
  • Per ssh usando l'indirizzo IP del nodo, è necessario distribuire una macchina virtuale jumpbox nella stessa rete CNI (Container Network Interface) dei nodi del cluster.

Accesso ai nodi del cluster tramite Azure Arc per i server

Il az ssh arc comando consente agli utenti di accedere in remoto a una macchina virtuale del cluster connessa ad Azure Arc. Questo metodo è un modo sicuro per connettersi tramite SSH al nodo del cluster direttamente dalla riga di comando, rendendolo un metodo rapido ed efficiente per la gestione remota.

Nota

Per impostazione predefinita, i nodi del cluster Nexus Kubernetes sono server connessi arc.

  1. Impostare le variabili necessarie. Sostituire i segnaposto con i valori effettivi rilevanti per l'ambiente di Azure e il 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. Ottenere i nomi dei nodi del cluster disponibili.

    az networkcloud kubernetescluster show --name $CLUSTER_NAME --resource-group $RESOURCE_GROUP --subscription $SUBSCRIPTION_ID -o json | jq '.nodes[].name'
    
  3. Output di esempio:

    "mynexusk8scluster-0b32128d-agentpool1-md-7h9t4"
    "mynexusk8scluster-0b32128d-agentpool1-md-c6xbs"
    "mynexusk8scluster-0b32128d-control-plane-qq5jm"
    
  4. Impostare il nome del nodo del cluster sulla variabile VM_NAME.

    VM_NAME="mynexusk8scluster-0b32128d-agentpool1-md-7h9t4"
    
  5. Eseguire il comando seguente per eseguire SSH nel nodo del cluster.

    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
    

Accedere ai nodi usando l'API Kubernetes

Questo metodo richiede l'utilizzo del comando kubectl debug. Questo metodo è limitato ai contenitori e può perdere problemi di sistema più ampi, a differenza di SSH (usando 'az ssh arc' o IP diretto), che offre accesso completo ai nodi e controllo.

Accesso all'API Kubernetes tramite Azure Arc per Kubernetes

Nota

Quando si crea un cluster Nexus Kubernetes, Nexus crea automaticamente un gruppo di risorse gestito dedicato all'archiviazione delle risorse del cluster, all'interno di questo gruppo, viene stabilita la risorsa cluster connessa Arc.

Per accedere al cluster, è necessario configurare il cluster connect kubeconfig. Dopo aver eseguito l'accesso all'interfaccia della riga di comando di Azure con l'entità Microsoft Entra pertinente, è possibile ottenere il kubeconfig necessario per comunicare con il cluster ovunque, anche all'esterno del firewall che lo circonda.

  1. Impostare CLUSTER_NAMEle variabili e RESOURCE_GROUPSUBSCRIPTION_ID .

    CLUSTER_NAME="myNexusK8sCluster"
    RESOURCE_GROUP="myResourceGroup"
    SUBSCRIPTION_ID=<set the correct subscription_id>
    
  2. Eseguire query sul gruppo di risorse gestite con az e archiviare in 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. Il comando seguente avvia un proxy connectedk8s che consente di connettersi al server API Kubernetes per il cluster Nexus Kubernetes specificato.

    az connectedk8s proxy -n $CLUSTER_NAME  -g $MANAGED_RESOURCE_GROUP &
    
  4. Usare kubectl per inviare richieste al cluster:

    kubectl get pods -A
    

    Verrà visualizzata una risposta dal cluster contenente l'elenco di tutti i nodi.

Nota

Se viene visualizzato il messaggio di errore "Failed to post access token to client proxyFailed to connect to MSI", potrebbe essere necessario eseguire un az login per eseguire di nuovo l'autenticazione con Azure.

Accesso ai nodi del cluster tramite Azure Arc per Kubernetes

Dopo aver eseguito la connessione a un cluster tramite Arc per Kubernetes, è possibile connettersi a un singolo nodo Kubernetes usando il kubectl debug comando per eseguire un contenitore con privilegi nel nodo.

  1. Elencare i nodi nel 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. Avviare un contenitore con privilegi nel nodo e connetterlo:

    $> 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 [ / ]#
    

    Questo contenitore con privilegi consente l'accesso al nodo. Eseguire i comandi nel nodo del cluster eseguendo chroot /host nella riga di comando.

  3. Al termine di un pod di debug, immettere il exit comando per terminare la sessione interattiva della shell. Dopo aver chiuso la shell, assicurarsi di eliminare il pod:

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

Creare una connessione shell interattiva a un nodo usando l'indirizzo IP

Connessione al nodo del cluster dal jumpbox di Azure

Un'altra opzione per la connessione sicura a un nodo del cluster Nexus Kubernetes dell'operatore di Azure consiste nel configurare un accesso diretto alla rete CNI del cluster dalla macchina virtuale jumpbox di Azure. Usando questo approccio, è possibile eseguire SSH nei nodi del cluster, nonché eseguire kubectl comandi sul cluster usando il kubeconfig file .

Contattare l'amministratore di rete per configurare una connessione diretta dalla macchina virtuale jumpbox di Azure alla rete CNI del cluster.

Connessione al nodo del cluster dal jumpbox locale

Stabilire l'accesso diretto all'interfaccia di rete del cluster dall'interno del jumpbox locale. Questo accesso diretto consente di accedere tramite SSH ai nodi del cluster e di eseguire kubectl comandi usando il kubeconfig file.

Contattare l'amministratore di rete per configurare questa connessione diretta alla rete CNI del cluster.

Indirizzo IP dei nodi del cluster

Prima di potersi connettere ai nodi del cluster, è necessario trovare l'indirizzo IP dei nodi. L'indirizzo IP dei nodi è reperibile usando il portale di Azure o l'interfaccia della riga di comando di Azure.

Usare l'interfaccia della riga di comando di Azure

  1. Impostare le variabili di RESOURCE_GROUP, CLUSTER_NAME e SUBSCRIPTION_ID in modo che corrispondano all'ambiente.

    RESOURCE_GROUP="myResourceGroup"
    CLUSTER_NAME="myNexusK8sCluster"
    SUBSCRIPTION_ID="<Subscription ID>"
    
  2. Eseguire il comando seguente per ottenere l'indirizzo IP dei nodi.

    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. Ecco l'output di esempio del 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"
    }
    

Usare il portale di Azure

Per trovare l'indirizzo IP della macchina virtuale per SSH, seguire questa procedura:

  1. Passare al portale di Azure e accedere con il nome utente e la password.
  2. Digitare "Cluster Kubernetes (Operator Nexus)" nella casella di ricerca e selezionare il servizio "Cluster Kubernetes" dall'elenco dei risultati.

Screenshot dell'esplorazione del servizio Nexus Kubernetes.

  1. Cercare la risorsa specifica "Cluster Nexus Kubernetes" necessaria per usare la ricerca.

Screenshot dell'esplorazione del cluster Nexus Kubernetes.

  1. Dopo aver trovato la risorsa corretta associandone il nome con il nome del cluster, selezionare la risorsa per passare alla home page "Cluster Kubernetes".

Screenshot della home page del cluster Nexus Kubernetes.

  1. Dopo aver trovato la risorsa corretta associandone il nome al nome del cluster, passare alla sezione "Nodi cluster Kubernetes" nel menu a sinistra.

Screenshot dell'esplorazione dei nodi del cluster Nexus Kubernetes.

  1. Selezionare il nome del nodo Kubernetes a cui si è interessati per visualizzarne i dettagli.
  2. Controllare la scheda "Reti collegate" per trovare l'indirizzo IP della "Rete di livello 3" del nodo usata come rete CNI.

Screenshot dell'esplorazione delle reti dei nodi del cluster Nexus Kubernetes.

Passaggi successivi

Per altre informazioni sul cluster Nexus Kubernetes, vedere gli articoli seguenti.