Ansluta till AKS-klusternoder (Azure Kubernetes Service) vid underhåll eller felsökning
Under hela livscykeln för ditt AKS-kluster (Azure Kubernetes Service) måste du så småningom komma åt en AKS-nod direkt. Den här åtkomsten kan vara för underhåll, logginsamling eller felsökningsåtgärder.
Du får åtkomst till en nod via autentisering, vilka metoder som varierar beroende på nodoperativsystemet och anslutningsmetoden. Du autentiserar säkert mot AKS Linux- och Windows-noder via två alternativ som beskrivs i den här artikeln. Den ena kräver att du har Åtkomst till Kubernetes API och den andra via AKS ARM-API:et, som tillhandahåller direkt privat IP-information. Av säkerhetsskäl exponeras inte AKS-noder för Internet. Om du i stället vill ansluta direkt till alla AKS-noder måste du använda antingen kubectl debug
eller värdens privata IP-adress.
Komma åt noder med kubernetes-API:et
Den här metoden kräver användning av kubectl debug
kommando.
Innan du börjar
Den här guiden visar hur du skapar en anslutning till en AKS-nod och uppdaterar SSH-nyckeln för ditt AKS-kluster. Om du vill följa stegen måste du använda Azure CLI som stöder version 2.0.64 eller senare. Kör az --version
för att kontrollera versionen. Om du behöver installera eller uppgradera kan du läsa Installera Azure CLI.
Slutför de här stegen om du inte har någon SSH-nyckel. Skapa en SSH-nyckel beroende på din Node OS-avbildning, för macOS och Linux eller Windows. Se till att du sparar nyckelparet i OpenSSH-format, undvik format som inte stöds, .ppk
till exempel . Gå sedan till Hantera SSH-konfiguration för att lägga till nyckeln i klustret.
Linux och macOS
Linux- och macOS-användare kan komma åt sin nod med hjälp av kubectl debug
eller sin privata IP-adress. Windows-användare bör gå vidare till avsnittet Windows Server Proxy för en lösning till SSH via proxy.
Ansluta med kubectl-felsökning
Om du vill skapa en interaktiv gränssnittsanslutning använder du kubectl debug
kommandot för att köra en privilegierad container på noden.
Om du vill visa en lista över noderna använder du
kubectl get nodes
kommandot:kubectl get nodes -o wide
Exempel på utdata:
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
kubectl debug
Använd kommandot för att starta en privilegierad container på noden och ansluta till den.kubectl debug node/aks-nodepool1-37663765-vmss000000 -it --image=mcr.microsoft.com/cbl-mariner/busybox:2.0
Exempel på utdata:
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:/#
Nu har du åtkomst till noden via en privilegierad container som en felsökningspodd.
Kommentar
Du kan interagera med nodsessionen genom att köra
chroot /host
från den privilegierade containern.
Avsluta kubectl-felsökningsläge
När du är klar med noden anger du exit
kommandot för att avsluta den interaktiva shell-sessionen. När den interaktiva containersessionen har stängts tar du bort den felsökningspodd som används med kubectl delete pod
.
kubectl delete pod node-debugger-aks-nodepool1-37663765-vmss000000-bkmmx
Windows Server-proxyanslutning för SSH
Följ de här stegen som en lösning för att ansluta med SSH på en Windows Server-nod.
Skapa en proxyserver
För närvarande kan du inte ansluta till en Windows Server-nod direkt med hjälp kubectl debug
av . I stället måste du först ansluta till en annan nod i klustret med kubectl
och sedan ansluta till Windows Server-noden från noden med hjälp av SSH.
Om du vill ansluta till en annan nod i klustret använder du kubectl debug
kommandot . Mer information finns i avsnittet kubectl ovan. Skapa en SSH-anslutning till Windows Server-noden från en annan nod med hjälp av de SSH-nycklar som angavs när du skapade AKS-klustret och den interna IP-adressen för Windows Server-noden.
Viktigt!
Följande steg för att skapa SSH-anslutningen till Windows Server-noden från en annan nod kan bara användas om du har skapat AKS-klustret med hjälp av Azure CLI med parametern --generate-ssh-keys
. Om du vill använda dina egna SSH-nycklar i stället kan du använda az aks update
för att hantera SSH-nycklar i ett befintligt AKS-kluster. Mer information finns i Hantera SSH-nodåtkomst.
Kommentar
Om din Linux-proxynod är nere eller inte svarar använder du Azure Bastion-metoden för att ansluta i stället.
kubectl debug
Använd kommandot för att starta en privilegierad container på proxynoden (Linux) och ansluta till den.kubectl debug node/aks-nodepool1-37663765-vmss000000 -it --image=mcr.microsoft.com/cbl-mariner/busybox:2.0
Exempel på utdata:
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:/#
Öppna ett nytt terminalfönster och använd
kubectl get pods
kommandot för att få igång namnet på podden avkubectl debug
.kubectl get pods
Exempel på utdata:
NAME READY STATUS RESTARTS AGE node-debugger-aks-nodepool1-37663765-vmss000000-bkmmx 1/1 Running 0 21s
I exempelutdata är node-debugger-aks-nodepool1-37663765-vmss000000-bkmmx namnet på podden som startades av
kubectl debug
.kubectl port-forward
Använd kommandot för att öppna en anslutning till den distribuerade podden:kubectl port-forward node-debugger-aks-nodepool1-37663765-vmss000000-bkmmx 2022:22
Exempel på utdata:
Forwarding from 127.0.0.1:2022 -> 22 Forwarding from [::1]:2022 -> 22
Det föregående exemplet börjar vidarebefordra nätverkstrafik från porten
2022
på utvecklingsdatorn till porten22
i den distribuerade podden. När du använderkubectl port-forward
för att öppna en anslutning och vidarebefordra nätverkstrafik förblir anslutningen öppen tills du stopparkubectl port-forward
kommandot.Öppna en ny terminal och kör kommandot
kubectl get nodes
för att visa den interna IP-adressen för Windows Server-noden:kubectl get no -o custom-columns=NAME:metadata.name,'INTERNAL_IP:status.addresses[?(@.type == \"InternalIP\")].address'
Exempel på utdata:
NAME INTERNAL_IP aks-nodepool1-19409214-vmss000003 10.224.0.8
I föregående exempel är 10.224.0.62 den interna IP-adressen för Windows Server-noden.
Skapa en SSH-anslutning till Windows Server-noden med hjälp av den interna IP-adressen och anslut till porten
22
via porten2022
på utvecklingsdatorn. Standardanvändarnamnet för AKS-noder är azureuser. Acceptera uppmaningen om att fortsätta med anslutningen. Du får sedan bash-kommandotolken för din Windows Server-nod:ssh -o 'ProxyCommand ssh -p 2022 -W %h:%p azureuser@127.0.0.1' azureuser@10.224.0.62
Exempel på utdata:
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
Kommentar
Om du föredrar att använda lösenordsautentisering tar du med parametern
-o PreferredAuthentications=password
. Till exempel:ssh -o 'ProxyCommand ssh -p 2022 -W %h:%p azureuser@127.0.0.1' -o PreferredAuthentications=password azureuser@10.224.0.62
Använda värdprocesscontainern för att komma åt Windows-noden
Skapa
hostprocess.yaml
med följande innehåll och ersättAKSWINDOWSNODENAME
med AKS Windows-nodens namn.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
Kör
kubectl apply -f hostprocess.yaml
för att distribuera Windows-värdprocesscontainern (HPC) i den angivna Windows-noden.Använd
kubectl exec -it [HPC-POD-NAME] -- powershell
.Du kan köra alla PowerShell-kommandon i HPC-containern för att få åtkomst till Windows-noden.
Kommentar
Du måste växla rotmappen till C:\
i HPC-containern för att få åtkomst till filerna i Windows-noden.
SSH med Azure Bastion för Windows
Om din Linux-proxynod inte kan nås är det ett alternativ att använda Azure Bastion som proxy. Den här metoden kräver att du konfigurerar en Azure Bastion-värd för det virtuella nätverk där klustret finns. Mer information finns i Ansluta med Azure Bastion .
SSH med privata IP-adresser från AKS-API:et (förhandsversion)
Om du inte har åtkomst till Kubernetes-API:et kan du få åtkomst till egenskaper som Node IP
och Node Name
via API:et för AKS-agentpoolen (förhandsversion), (tillgängligt i förhandsversioner 07-02-2023
eller senare) för att ansluta till AKS-noder.
Viktigt!
AKS-förhandsversionsfunktioner är tillgängliga via självbetjäning och anmäl dig. Förhandsversioner tillhandahålls "som är" och "som tillgängliga", och de undantas från serviceavtalen och den begränsade garantin. AKS-förhandsversioner omfattas delvis av kundsupport på bästa sätt. Därför är dessa funktioner inte avsedda för produktionsanvändning. Mer information finns i följande supportartiklar:
Skapa en interaktiv gränssnittsanslutning till en nod med ip-adressen
För enkelhetens skull exponeras AKS-noder i klustrets virtuella nätverk via privata IP-adresser. Du måste dock vara i klustrets virtuella nätverk för att SSH till noden. Om du inte redan har konfigurerat en miljö kan du använda Azure Bastion för att upprätta en proxy från vilken du kan SSH till klusternoder. Kontrollera att Azure Bastion har distribuerats i samma virtuella nätverk som klustret.
Hämta privata IP-adresser med
az aks machine list
kommandot som riktar sig till alla virtuella datorer i en specifik nodpool med--nodepool-name
flaggan .az aks machine list --resource-group myResourceGroup --cluster-name myAKSCluster --nodepool-name nodepool1 -o table
Följande exempelutdata visar interna IP-adresser för alla noder i nodpoolen:
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
Om du vill rikta in dig på en specifik nod i nodpoolen
--machine-name
använder du flaggan:az aks machine show --cluster-name myAKScluster --nodepool-name nodepool1 -g myResourceGroup --machine-name aks-nodepool1-33555069-vmss000000 -o table
Följande exempelutdata visar den interna IP-adressen för alla angivna noder:
Name Ip Family --------------------------------- ----------- ----------- aks-nodepool1-33555069-vmss000000 10.224.0.5 IPv4
SSH till noden med den privata IP-adress som du fick i föregående steg. Det här steget gäller endast för Linux-datorer. Information om Windows-datorer finns i Ansluta med Azure Bastion.
ssh -i /path/to/private_key.pem azureuser@10.224.0.33
Nästa steg
Om du behöver mer felsökningsdata kan du visa kubelet-loggarna eller visa Kubernetes kontrollplansloggar.
Mer information om hur du hanterar dina SSH-nycklar finns i Hantera SSH-konfiguration.
Azure Kubernetes Service