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, .ppktill 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 SSH 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.

SSH 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.

  1. 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
    
  2. 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 debugav . I stället måste du först ansluta till en annan nod i klustret med kubectloch 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.

  1. 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:/#
    
  2. Öppna ett nytt terminalfönster och använd kubectl get pods kommandot för att få igång namnet på podden av kubectl 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.

  3. 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 porten 22 i den distribuerade podden. När du använder kubectl port-forward för att öppna en anslutning och vidarebefordra nätverkstrafik förblir anslutningen öppen tills du stoppar kubectl port-forward kommandot.

  4. Ö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.

  5. Skapa en SSH-anslutning till Windows Server-noden med hjälp av den interna IP-adressen och anslut till porten 22 via porten 2022 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

  1. Skapa hostprocess.yaml med följande innehåll och ersätt AKSWINDOWSNODENAME 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
    
  2. Kör kubectl apply -f hostprocess.yaml för att distribuera Windows-värdprocesscontainern (HPC) i den angivna Windows-noden.

  3. Använd kubectl exec -it [HPC-POD-NAME] -- powershell.

  4. 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 Anslut 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.

  1. 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
    
  2. 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 Anslut 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.