Connettersi ai nodi del cluster del servizio Azure Kubernetes per la risoluzione dei problemi e le attività di manutenzione
Durante tutto il ciclo di vita del cluster del servizio Azure Kubernetes, alla fine è necessario accedere direttamente a un nodo del servizio Azure Kubernetes. 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 sistema operativo node e del metodo di connessione. È possibile eseguire l'autenticazione in modo sicuro nei nodi Linux e Windows del servizio Azure Kubernetes tramite due opzioni descritte in questo articolo. Uno richiede l'accesso all'API Kubernetes e l'altro è tramite l'API ARM del servizio Azure Kubernetes, che fornisce informazioni IP private dirette. Per motivi di sicurezza, i nodi del servizio Azure Kubernetes non sono esposti a Internet. Per connettersi direttamente a qualsiasi nodo del servizio Azure Kubernetes, è invece necessario usare kubectl debug
o l'indirizzo IP privato dell'host.
Accedere ai nodi usando l'API Kubernetes
Questo metodo richiede l'utilizzo del comando kubectl debug
.
Operazioni preliminari
Questa guida illustra come creare una connessione a un nodo del servizio Azure Kubernetes e aggiornare la chiave SSH del cluster del servizio Azure Kubernetes. Per seguire i passaggi, è necessario usare l'interfaccia della riga di comando di Azure che supporta la versione 2.0.64 o successiva. Eseguire az --version
per controllare la versione. Se è necessario eseguire l'installazione o l'aggiornamento, vedere Installare l'interfaccia della riga di comando di Azure.
Completare questi passaggi se non si ha una chiave SSH. Creare una chiave SSH a seconda dell'immagine del sistema operativo del nodo, per macOS e Linuxo Windows. Assicurarsi di salvare la coppia di chiavi nel formato OpenSSH, evitare formati non supportati, ad esempio .ppk
. Fare quindi riferimento a Gestire la configurazione SSH per aggiungere la chiave al cluster.
Linux e macOS
Gli utenti Linux e macOS possono accedere al proprio nodo usando kubectl debug
o l'indirizzo IP privato. Gli utenti di Windows devono passare alla sezione Proxy di Windows Server per una soluzione alternativa a SSH tramite proxy.
Connettersi con kubectl debug
Per creare una connessione shell interattiva, usare il comando kubectl debug
per eseguire un contenitore con privilegi nel nodo.
Per elencare i nodi, usare il comando
kubectl get nodes
:kubectl get nodes -o wide
Output di esempio:
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
Usare il comando
kubectl debug
per avviare un contenitore con privilegi nel nodo e connettersi.kubectl debug node/aks-nodepool1-37663765-vmss000000 -it --image=mcr.microsoft.com/cbl-mariner/busybox:2.0
Output di esempio:
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:/#
È ora possibile accedere al nodo tramite un contenitore con privilegi come pod di debug.
Nota
È possibile interagire con la sessione del nodo eseguendo
chroot /host
dal contenitore con privilegi.
Uscire dalla modalità di debug kubectl
Al termine del nodo, immettere il comando exit
per terminare la sessione interattiva della shell. Al termine della sessione interattiva del contenitore, eliminare il pod di debug usato con kubectl delete pod
.
kubectl delete pod node-debugger-aks-nodepool1-37663765-vmss000000-bkmmx
Connessione proxy di Windows Server per SSH
Seguire questa procedura come soluzione alternativa per connettersi con SSH in un nodo di Windows Server.
Creare un server proxy
Al momento, non è possibile connettersi direttamente a un nodo di Windows Server usando kubectl debug
. È invece necessario connettersi prima a un altro nodo del cluster con kubectl
, quindi connettersi al nodo Windows Server da tale nodo usando SSH.
Per connettersi a un altro nodo nel cluster, usare il comando kubectl debug
. Per altre informazioni, seguire i passaggi precedenti nella sezione kubectl. Creare una connessione SSH al nodo Windows Server da un altro nodo usando le chiavi SSH fornite quando è stato creato il cluster servizio Azure Kubernetes e l'indirizzo IP interno del nodo Windows Server.
Importante
La procedura seguente per creare la connessione SSH al nodo Windows Server da un altro nodo può essere usata solo se è stato creato il cluster del servizio Azure Kubernetes usando l'interfaccia della riga di comando di Azure con il parametro --generate-ssh-keys
. Se invece si vogliono usare chiavi SSH personalizzate, è possibile usare az aks update
per gestire le chiavi SSH in un cluster del servizio Azure Kubernetes esistente. Per altre informazioni, vedere gestire l'accesso ai nodi SSH.
Nota
Se il nodo proxy Linux è inattivo o non risponde, usare il metodo azure Bastion per connettersi.
Usare il comando
kubectl debug
per avviare un contenitore con privilegi nel nodo proxy (Linux) e connettersi.kubectl debug node/aks-nodepool1-37663765-vmss000000 -it --image=mcr.microsoft.com/cbl-mariner/busybox:2.0
Output di esempio:
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:/#
Aprire una nuova finestra del terminale e usare il comando
kubectl get pods
per ottenere il nome del pod avviato dakubectl debug
.kubectl get pods
Output di esempio:
NAME READY STATUS RESTARTS AGE node-debugger-aks-nodepool1-37663765-vmss000000-bkmmx 1/1 Running 0 21s
Nell'output di esempio node-debugger-aks-nodepool1-37663765-vmss000000-bkmmx è il nome del pod avviato da
kubectl debug
.Usare il comando
kubectl port-forward
per aprire una connessione al pod distribuito:kubectl port-forward node-debugger-aks-nodepool1-37663765-vmss000000-bkmmx 2022:22
Output di esempio:
Forwarding from 127.0.0.1:2022 -> 22 Forwarding from [::1]:2022 -> 22
L'esempio precedente inizia a inoltrare il traffico di rete dalla porta
2022
nel computer di sviluppo alla porta22
nel pod distribuito. Quando si usakubectl port-forward
per aprire una connessione e inoltrare il traffico di rete, la connessione rimane aperta fino a quando non si arresta il comandokubectl port-forward
.Aprire un nuovo terminale ed eseguire il comando
kubectl get nodes
per visualizzare l'indirizzo IP interno del nodo Windows Server:kubectl get no -o custom-columns=NAME:metadata.name,'INTERNAL_IP:status.addresses[?(@.type == \"InternalIP\")].address'
Output di esempio:
NAME INTERNAL_IP aks-nodepool1-19409214-vmss000003 10.224.0.8
Nell'esempio precedente, 10.224.0.62 è l'indirizzo IP interno del nodo Windows Server.
Creare una connessione SSH al nodo Windows Server usando l'indirizzo IP interno e connettersi alla porta
22
tramite LA porta2022
nel computer di sviluppo. Il nome utente predefinito per i nodi del servizio Azure Kubernetes è azureuser. Accettare la richiesta di continuare con la connessione. Viene quindi fornito il prompt bash del nodo Windows Server:ssh -o 'ProxyCommand ssh -p 2022 -W %h:%p azureuser@127.0.0.1' azureuser@10.224.0.62
Output di esempio:
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 si preferisce usare l'autenticazione password, includere il parametro
-o PreferredAuthentications=password
. Ad esempio:ssh -o 'ProxyCommand ssh -p 2022 -W %h:%p azureuser@127.0.0.1' -o PreferredAuthentications=password azureuser@10.224.0.62
Usare il contenitore del processo host per accedere al nodo Windows
Creare
hostprocess.yaml
con il contenuto seguente e sostituendoAKSWINDOWSNODENAME
con il nome del nodo Windows del servizio Azure Kubernetes.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
Eseguire
kubectl apply -f hostprocess.yaml
per distribuire il contenitore HPC (Host Process Container) di Windows nel nodo Windows specificato.Usare
kubectl exec -it [HPC-POD-NAME] -- powershell
.È possibile eseguire qualsiasi comando di PowerShell all'interno del contenitore HPC per accedere al nodo Windows.
Nota
Per accedere ai file nel nodo Windows, è necessario passare la cartella radice a C:\
all'interno del contenitore HPC.
SSH con Azure Bastion per Windows
Se il nodo proxy Linux non è raggiungibile, l'uso di Azure Bastion come proxy è un'alternativa. Questo metodo richiede di configurare un host Azure Bastion per la rete virtuale in cui risiede il cluster. Per altri dettagli, vedere Connettersi con Azure Bastion.
SSH con indirizzi IP privati dall'API del servizio Azure Kubernetes (anteprima)
Se non si ha accesso all'API Kubernetes, è possibile accedere alle proprietà, ad esempio Node IP
e Node Name
tramite l'API del pool di agenti del servizio Azure Kubernetes (anteprima), (disponibile nelle versioni di anteprima 07-02-2023
o versioni successive) per connettersi ai nodi del servizio Azure Kubernetes.
Importante
Le funzionalità di anteprima del servizio Azure Kubernetes sono disponibili in modalità self-service e opzionale. Le anteprime vengono fornite "così come sono" e "come disponibili" e sono escluse dai contratti di servizio e dalla garanzia limitata. Le anteprime del servizio Azure Kubernetes sono parzialmente coperte dal supporto clienti con la massima diligenza possibile. Di conseguenza, queste funzionalità non sono destinate all'uso in produzione. Per altre informazioni, vedere gli articoli di supporto seguenti:
Creare una connessione shell interattiva a un nodo usando l'indirizzo IP
Per praticità, i nodi del servizio Azure Kubernetes vengono esposti nella rete virtuale del cluster tramite indirizzi IP privati. Tuttavia, è necessario trovarsi nella rete virtuale del cluster per connettersi tramite SSH al nodo. Se non è già configurato un ambiente, è possibile usare Azure Bastion per stabilire un proxy da cui è possibile connettersi tramite SSH ai nodi del cluster. Assicurarsi che Azure Bastion sia distribuito nella stessa rete virtuale del cluster.
Ottenere indirizzi IP privati usando il comando
az aks machine list
, destinato a tutte le macchine virtuali in un pool di nodi specifico con il flag--nodepool-name
.az aks machine list --resource-group myResourceGroup --cluster-name myAKSCluster --nodepool-name nodepool1 -o table
L'output di esempio seguente mostra gli indirizzi IP interni di tutti i nodi nel pool di nodi:
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
Per specificare come destinazione un nodo specifico all'interno del pool di nodi, usare il flag
--machine-name
:az aks machine show --cluster-name myAKScluster --nodepool-name nodepool1 -g myResourceGroup --machine-name aks-nodepool1-33555069-vmss000000 -o table
L'output di esempio seguente mostra l'indirizzo IP interno di tutto il nodo specificato:
Name Ip Family --------------------------------- ----------- ----------- aks-nodepool1-33555069-vmss000000 10.224.0.5 IPv4
Connettersi tramite SSH al nodo usando l'indirizzo IP privato ottenuto nel passaggio precedente. Questo passaggio è applicabile solo per i computer Linux. Per i computer Windows, vedere Connettersi con Azure Bastion.
ssh -i /path/to/private_key.pem azureuser@10.224.0.33
Passaggi successivi
Se sono necessari altri dati per la risoluzione dei problemi, è possibile visualizzare i log kubelet o visualizzare i log del piano di controllo Kubernetes.
Per informazioni sulla gestione delle chiavi SSH, vedere Gestire la configurazione SSH.
Azure Kubernetes Service