Verbinding maken met AKS-clusterknooppunten (Azure Kubernetes Service) voor onderhoud of probleemoplossing

Gedurende de levenscyclus van uw AKS-cluster (Azure Kubernetes Service) moet u uiteindelijk rechtstreeks toegang krijgen tot een AKS-knooppunt. Deze toegang kan betrekking hebben op onderhouds-, logboekverzamelings- of probleemoplossingsbewerkingen.

U opent een knooppunt via verificatie. Welke methoden variëren, afhankelijk van uw knooppuntbesturingssystemen en de verbindingsmethode. U verifieert veilig met AKS Linux- en Windows-knooppunten via twee opties die in dit artikel worden besproken. De ene vereist dat u Kubernetes-API-toegang hebt en de andere via de ARM-API van AKS, die directe privé-IP-gegevens biedt. Om veiligheidsredenen worden AKS-knooppunten niet blootgesteld aan internet. Als u in plaats daarvan rechtstreeks verbinding wilt maken met AKS-knooppunten, moet u het privé-IP-adres van de host gebruiken kubectl debug .

Toegang tot knooppunten met behulp van de Kubernetes-API

Voor deze methode is het gebruik van kubectl debug de opdracht vereist.

Voordat u begint

Deze handleiding laat zien hoe u een verbinding maakt met een AKS-knooppunt en hoe u de SSH-sleutel van uw AKS-cluster bijwerkt. Als u de stappen wilt volgen, moet u Azure CLI gebruiken die ondersteuning biedt voor versie 2.0.64 of hoger. Voer deze opdracht uit az --version om de versie te controleren. Als u Azure CLI 2.0 wilt installeren of upgraden, raadpleegt u Azure CLI 2.0 installeren.

Voer deze stappen uit als u geen SSH-sleutel hebt. Maak een SSH-sleutel, afhankelijk van de installatiekopieën van het knooppuntbesturingssystemen, voor macOS en Linux of Windows. Zorg ervoor dat u het sleutelpaar opslaat in de OpenSSH-indeling, zodat u niet-ondersteunde indelingen zoals .ppk. Raadpleeg vervolgens SSH-configuratie beheren om de sleutel aan uw cluster toe te voegen.

Linux en macOS

Linux- en macOS-gebruikers kunnen SSH gebruiken om toegang te krijgen tot hun knooppunt met behulp van kubectl debug of hun privé-IP-adres. Windows-gebruikers moeten doorgaan naar de sectie Windows Server-proxy voor een tijdelijke oplossing voor SSH via proxy.

SSH met kubectl-foutopsporing

Als u een interactieve shellverbinding wilt maken, gebruikt u de kubectl debug opdracht om een bevoegde container op uw knooppunt uit te voeren.

  1. Gebruik de kubectl get nodes opdracht om uw knooppunten weer te geven:

    kubectl get nodes -o wide
    

    Voorbeelduitvoer:

    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. Gebruik de kubectl debug opdracht om een bevoegde container op uw knooppunt te starten en er verbinding mee te maken.

    kubectl debug node/aks-nodepool1-37663765-vmss000000 -it --image=mcr.microsoft.com/cbl-mariner/busybox:2.0
    

    Voorbeelduitvoer:

    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:/#
    

    U hebt nu toegang tot het knooppunt via een bevoegde container als een foutopsporingspod.

    Notitie

    U kunt communiceren met de knooppuntsessie door deze uit te voeren chroot /host vanuit de bevoegde container.

Kubectl-foutopsporingsmodus afsluiten

Wanneer u klaar bent met uw knooppunt, voert u de opdracht in om de exit interactieve shell-sessie te beëindigen. Nadat de interactieve containersessie is gesloten, verwijdert u de foutopsporingspod waarmee kubectl delete podwordt gebruikt.

kubectl delete pod node-debugger-aks-nodepool1-37663765-vmss000000-bkmmx

Windows Server-proxyverbinding voor SSH

Volg deze stappen als tijdelijke oplossing om verbinding te maken met SSH op een Windows Server-knooppunt.

Een proxyserver maken

Op dit moment kunt u geen rechtstreeks verbinding maken met een Windows Server-knooppunt met behulp van kubectl debug. In plaats daarvan moet u eerst verbinding maken met een ander knooppunt in het cluster en kubectlvervolgens verbinding maken met het Windows Server-knooppunt vanaf dat knooppunt met behulp van SSH.

Gebruik de kubectl debug opdracht om verbinding te maken met een ander knooppunt in het cluster. Volg de bovenstaande stappen in de sectie kubectl voor meer informatie. Maak een SSH-verbinding met het Windows Server-knooppunt vanaf een ander knooppunt met behulp van de SSH-sleutels die zijn opgegeven bij het maken van het AKS-cluster en het interne IP-adres van het Windows Server-knooppunt.

Belangrijk

De volgende stappen voor het maken van de SSH-verbinding met het Windows Server-knooppunt vanaf een ander knooppunt kunnen alleen worden gebruikt als u uw AKS-cluster hebt gemaakt met behulp van de Azure CLI met de --generate-ssh-keys parameter. Als u in plaats daarvan uw eigen SSH-sleutels wilt gebruiken, kunt u de az aks update SSH-sleutels beheren op een bestaand AKS-cluster. Zie SSH-knooppunttoegang beheren voor meer informatie.

Notitie

Als uw Linux-proxyknooppunt niet reageert, gebruikt u de Azure Bastion-methode om verbinding te maken.

  1. Gebruik de kubectl debug opdracht om een bevoegde container op uw proxyknooppunt (Linux) te starten en er verbinding mee te maken.

    kubectl debug node/aks-nodepool1-37663765-vmss000000 -it --image=mcr.microsoft.com/cbl-mariner/busybox:2.0
    

    Voorbeelduitvoer:

    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. Open een nieuw terminalvenster en gebruik de kubectl get pods opdracht om de naam van de pod op kubectl debugte halen.

    kubectl get pods
    

    Voorbeelduitvoer:

    NAME                                                    READY   STATUS    RESTARTS   AGE
    node-debugger-aks-nodepool1-37663765-vmss000000-bkmmx   1/1     Running   0          21s
    

    In de voorbeelduitvoer is node-debugger-aks-nodepool1-37663765-vmss000000-bkmmx de naam van de pod die is gestart.kubectl debug

  3. Gebruik de kubectl port-forward opdracht om een verbinding met de geïmplementeerde pod te openen:

    kubectl port-forward node-debugger-aks-nodepool1-37663765-vmss000000-bkmmx 2022:22
    

    Voorbeelduitvoer:

    Forwarding from 127.0.0.1:2022 -> 22
    Forwarding from [::1]:2022 -> 22
    

    In het vorige voorbeeld begint het doorsturen van netwerkverkeer vanaf de poort 2022 op uw ontwikkelcomputer naar de poort 22 op de geïmplementeerde pod. Wanneer u kubectl port-forward een verbinding opent en netwerkverkeer doorstuurt, blijft de verbinding geopend totdat u de kubectl port-forward opdracht stopt.

  4. Open een nieuwe terminal en voer de opdracht kubectl get nodes uit om het interne IP-adres van het Windows Server-knooppunt weer te geven:

    kubectl get no -o custom-columns=NAME:metadata.name,'INTERNAL_IP:status.addresses[?(@.type == \"InternalIP\")].address'
    

    Voorbeelduitvoer:

    NAME                                INTERNAL_IP
    aks-nodepool1-19409214-vmss000003   10.224.0.8
    

    In het vorige voorbeeld is 10.224.0.62 het interne IP-adres van het Windows Server-knooppunt.

  5. Maak een SSH-verbinding met het Windows Server-knooppunt met behulp van het interne IP-adres en maak verbinding met de poort 22 via de poort 2022 op uw ontwikkelcomputer. De standaardgebruikersnaam voor AKS-knooppunten is azureuser. Accepteer de prompt om door te gaan met de verbinding. Vervolgens krijgt u de bash-prompt van uw Windows Server-knooppunt:

    ssh -o 'ProxyCommand ssh -p 2022 -W %h:%p azureuser@127.0.0.1' azureuser@10.224.0.62
    

    Voorbeelduitvoer:

    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
    

    Notitie

    Als u liever wachtwoordverificatie gebruikt, neemt u de parameter -o PreferredAuthentications=passwordop. Voorbeeld:

     ssh -o 'ProxyCommand ssh -p 2022 -W %h:%p azureuser@127.0.0.1' -o PreferredAuthentications=password azureuser@10.224.0.62
    

Hostprocescontainer gebruiken voor toegang tot Windows-knooppunt

  1. Maak hostprocess.yaml met de volgende inhoud en vervang deze AKSWINDOWSNODENAME door de naam van het AKS Windows-knooppunt.

    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. Voer deze opdracht uit kubectl apply -f hostprocess.yaml om de Windows-hostprocescontainer (HPC) in het opgegeven Windows-knooppunt te implementeren.

  3. Gebruik kubectl exec -it [HPC-POD-NAME] -- powershell.

  4. U kunt PowerShell-opdrachten uitvoeren in de HPC-container om toegang te krijgen tot het Windows-knooppunt.

Notitie

U moet overschakelen naar C:\ de hoofdmap in de HPC-container om toegang te krijgen tot de bestanden in het Windows-knooppunt.

SSH met Behulp van Azure Bastion voor Windows

Als uw Linux-proxyknooppunt niet bereikbaar is, is het gebruik van Azure Bastion als proxy een alternatief. Voor deze methode moet u een Azure Bastion-host instellen voor het virtuele netwerk waarin het cluster zich bevindt. Zie Verbinding maken met Azure Bastion voor meer informatie.

SSH met behulp van privé-IP's van de AKS-API (preview)

Als u geen toegang hebt tot de Kubernetes-API, kunt u toegang krijgen tot eigenschappen zoals Node IP en Node Name via de API van de AKS-agentgroep (preview), (beschikbaar in preview-versies 07-02-2023 of hoger) om verbinding te maken met AKS-knooppunten.

Belangrijk

AKS preview-functies zijn beschikbaar op selfservice, opt-in basis. Previews worden geleverd 'zoals is' en 'als beschikbaar' en ze worden uitgesloten van de serviceovereenkomsten en beperkte garantie. AKS-previews worden gedeeltelijk gedekt door klantondersteuning op basis van best effort. Daarom zijn deze functies niet bedoeld voor productiegebruik. Zie de volgende ondersteuningsartikelen voor meer informatie:

Een interactieve shellverbinding met een knooppunt maken met behulp van het IP-adres

Voor het gemak worden AKS-knooppunten weergegeven in het virtuele netwerk van het cluster via privé-IP-adressen. U moet zich echter in het virtuele netwerk van het cluster bevinden naar SSH in het knooppunt. Als u nog geen omgeving hebt geconfigureerd, kunt u Azure Bastion gebruiken om een proxy tot stand te brengen van waaruit u SSH naar clusterknooppunten kunt uitvoeren. Zorg ervoor dat Azure Bastion is geïmplementeerd in hetzelfde virtuele netwerk als het cluster.

  1. Verkrijg privé-IP-adressen met behulp van de az aks machine list opdracht, gericht op alle VM's in een specifieke knooppuntgroep met de --nodepool-name vlag.

    az aks machine list --resource-group myResourceGroup  --cluster-name myAKSCluster --nodepool-name nodepool1 -o table
    

    In de volgende voorbeelduitvoer ziet u de interne IP-adressen van alle knooppunten in de knooppuntgroep:

    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
    

    Als u een specifiek knooppunt in de knooppuntgroep wilt instellen, gebruikt u de --machine-name vlag:

    az aks machine show --cluster-name myAKScluster --nodepool-name nodepool1 -g myResourceGroup --machine-name aks-nodepool1-33555069-vmss000000 -o table
    

    In de volgende voorbeelduitvoer ziet u het interne IP-adres van alle opgegeven knooppunten:

    Name                               Ip         Family
    ---------------------------------  -----------  -----------
    aks-nodepool1-33555069-vmss000000  10.224.0.5   IPv4
    
  2. SSH naar het knooppunt met behulp van het privé-IP-adres dat u in de vorige stap hebt verkregen. Deze stap is alleen van toepassing op Linux-machines. Zie Verbinding maken voor Windows-computers met Azure Bastion.

    ssh -i /path/to/private_key.pem azureuser@10.224.0.33
    

Volgende stappen

Als u meer gegevens voor probleemoplossing nodig hebt, kunt u de kubelet-logboeken bekijken of de Logboeken van het Kubernetes-besturingsvlak bekijken.

Zie SSH-configuratie beheren voor meer informatie over het beheren van uw SSH-sleutels.