Connettersi 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 Nexus 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.
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)
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'
Output di esempio:
"mynexusk8scluster-0b32128d-agentpool1-md-7h9t4" "mynexusk8scluster-0b32128d-agentpool1-md-c6xbs" "mynexusk8scluster-0b32128d-control-plane-qq5jm"
Impostare il nome del nodo del cluster sulla variabile VM_NAME.
VM_NAME="mynexusk8scluster-0b32128d-agentpool1-md-7h9t4"
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 Kubernetes Nexus, 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 la connessione del cluster 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 da qualsiasi posizione, anche all'esterno del firewall che lo circonda.
Impostare le variabili
CLUSTER_NAME
,RESOURCE_GROUP
eSUBSCRIPTION_ID
.CLUSTER_NAME="myNexusK8sCluster" RESOURCE_GROUP="myResourceGroup" SUBSCRIPTION_ID=<set the correct subscription_id>
Eseguire query sul gruppo di risorse gestite con
az
e archiviare inMANAGED_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)
Il comando seguente avvia un proxy connectedk8s che consente di connettersi al server API Kubernetes per il cluster Kubernetes Nexus specificato.
az connectedk8s proxy -n $CLUSTER_NAME -g $MANAGED_RESOURCE_GROUP &
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.
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
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.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
Connettersi 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.
Connettersi 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
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>"
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)}'
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:
- Passare al portale di Azure e accedere con il nome utente e la password.
- Digitare "Cluster Kubernetes (Operator Nexus)" nella casella di ricerca e selezionare il servizio "Cluster Kubernetes" dall'elenco dei risultati.
- Cercare la risorsa specifica "Cluster Nexus Kubernetes" necessaria per usare la ricerca.
- Dopo aver trovato la risorsa corretta associandone il nome con il nome del cluster, selezionare la risorsa per passare alla home page "Cluster Kubernetes".
- Dopo aver trovato la risorsa corretta associandone il nome al nome del cluster, passare alla sezione "Nodi cluster Kubernetes" nel menu a sinistra.
- Selezionare il nome del nodo Kubernetes a cui si è interessati per visualizzarne i dettagli.
- Controllare la scheda "Reti collegate" per trovare l'indirizzo IP della "Rete di livello 3" del nodo usata come rete CNI.
Recuperare il nome alternativo del soggetto (SAN) per il cluster
Eseguire i comandi seguenti per recuperare l'elenco dei nomi alternativi del soggetto (SAN) accettati dal certificato del server API Kubernetes. Per prima cosa, accedere al nodo del piano di controllo usando Azure Arc per i server o usando la shell interattiva usando l'indirizzo IP. In questo modo è possibile accedere al certificato usato dal server API. È possibile esaminare il contenuto del certificato usando il comando seguente con privilegi sudo:
sudo openssl x509 -in /etc/kubernetes/pki/apiserver.crt -text -noout
Ognuna delle reti SAN è identificata dal prefisso "DNS:". Scegliere solo le reti SAN che seguono la convenzione di denominazione specificata "<clusterName-resourceGroup><>", perché è univoca rispetto ad altre reti SAN come "kubernetes.default.svc.cluster.local".
Passaggi successivi
Per altre informazioni sul cluster Nexus Kubernetes, vedere gli articoli seguenti.