Freigeben über


Herstellen einer Verbindung mit Azure Kubernetes Service (AKS)-Clusterknoten zur Wartung oder Problembehandlung

Während des gesamten Lebenszyklus Ihres Azure Kubernetes Service (AKS)-Clusters müssen Sie schließlich direkt auf einen AKS-Knoten zugreifen. Dieser Zugriff kann zur Wartung, Protokollsammlung oder für Vorgänge der Problembehandlung erforderlich sein.

In diesem Artikel werden zwei Optionen für die sichere Verbindung mit AKS Linux und Windows Knoten beschrieben. Die eine erfordert, dass Sie Zugriff auf die Kubernetes-API haben, und die andere erfolgt über die AKS-ARM-API, die direkte private IP-Informationen bereitstellt. Aus Sicherheitsgründen werden AKS-Knoten nicht im Internet verfügbar gemacht. Um stattdessen eine direkte Verbindung zu einem beliebigen AKS-Knoten herzustellen, müssen Sie entweder die private IP-Adresse des Hosts verwenden.

Zugriffsknoten mit der Kubernetes-API

Für diese Methode ist der Befehl erforderlich.

Bevor Sie beginnen

In diesem Leitfaden erfahren Sie, wie Sie eine Verbindung mit einem AKS-Knoten erstellen und den SSH-Schlüssel Ihres AKS-Clusters aktualisieren. Um diese Schritte auszuführen, benötigen Sie Azure CLI Version 2.0.64 oder höher. Führen Sie den Befehl aus, um die Version zu prüfen. Informationen zum Installieren oder Aktualisieren finden Sie unter Install Azure CLI.

Führen Sie diese Schritte aus, wenn Sie keinen SSH-Schlüssel haben. Erstellen Sie je nach Knotenbetriebssystemimage einen SSH-Schlüssel für macOS und Linux oder Windows. Speichern Sie das Schlüsselpaar im OpenSSH-Format, und vermeiden Sie nicht unterstützte Formate wie z. B. . Lesen Sie als Nächstes unter Verwalten der SSH-Konfiguration nach, wie der Schlüssel Ihrem Cluster hinzugefügt wird.

Linux und macOS

Linux- und macOS-Benutzer können über oder ihre private IP-Adresse auf ihren Knoten zugreifen. Windows-Benutzer sollten zum Abschnitt „Windows Server-Proxy“ wechseln, um eine Problemumgehung für SSH über einen Proxy zu finden.

Verbindung mit kubectl debug herstellen

Verwenden Sie den Befehl , um einen privilegierten Container in Ihrem Knoten auszuführen, um eine interaktive Shellverbindung herzustellen.

  1. Verwenden Sie den -Befehl, um Ihre Knoten aufzulisten:

    kubectl get nodes -o wide
    

    Beispielausgabe:

    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. Verwenden Sie den Befehl , um einen privilegierten Container auf Ihrem Knoten zu starten und eine Verbindung damit herzustellen.

    kubectl debug node/aks-nodepool1-37663765-vmss000000 -it --image=mcr.microsoft.com/azurelinux/busybox:1.36
    

    Beispielausgabe:

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

    Sie haben nun Zugriff auf den Knoten über einen privilegierten Container als Debugpod.

    Hinweis

    Sie können mit der Knotensitzung interagieren, indem Sie über den privilegierten Container ausführen.

Beenden des kubectl-Debugmodus

Wenn Sie mit Ihrem Knoten fertig sind, geben Sie den Befehl ein, um die interaktive Shellsitzung zu beenden. Nachdem die interaktive Containersitzung geschlossen wurde, löschen Sie den mit verwendeten Debugpod.

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

Windows Server Proxyverbindung für SSH

Führen Sie diese Schritte als Problemumgehung aus, um eine Verbindung mit SSH auf einem Windows Server-Knoten herzustellen.

Erstellen eines Proxyservers

Derzeit können Sie keine direkte Verbindung mit einem Windows Server Knoten herstellen, indem Sie kubectl debug verwenden. Stattdessen müssen Sie zuerst eine Verbindung mit einem anderen Knoten im Cluster mit kubectl herstellen und dann über SSH eine Verbindung mit dem Windows Server Knoten herstellen.

Verwenden Sie den -Befehl, um eine Verbindung mit einem anderen Knoten im Cluster herzustellen. Weitere Informationen finden Sie in den vorherigen Schritten im Kubectl-Abschnitt. Erstellen Sie eine SSH-Verbindung mit dem knoten Windows Server von einem anderen Knoten mithilfe der SSH-Schlüssel, die beim Erstellen des AKS-Clusters und der internen IP-Adresse des knotens Windows Server bereitgestellt werden.

Wichtig

Die folgenden Schritte zum Erstellen der SSH-Verbindung mit dem Windows Server Knoten aus einem anderen Knoten können nur verwendet werden, wenn Sie Ihren AKS-Cluster mit dem Azure CLI mit dem Parameter --generate-ssh-keys erstellt haben. Wenn Sie stattdessen Ihre eigenen SSH-Schlüssel verwenden möchten, können Sie das entsprechende Werkzeug verwenden, um SSH-Schlüssel in einem vorhandenen AKS-Cluster zu verwalten. Weitere Informationen finden Sie unter Verwalten Zugriffs auf SSH-Knoten.

Hinweis

Wenn Ihr Linux-Proxyknoten ausgefallen oder nicht mehr reagiert, verwenden Sie stattdessen die Methode Azure Bastion, um eine Verbindung herzustellen.

  1. Verwenden Sie den Befehl , um einen privilegierten Container auf Ihrem Proxyknoten (Linux) zu starten und eine Verbindung damit herzustellen.

    kubectl debug node/aks-nodepool1-37663765-vmss000000 -it --image=mcr.microsoft.com/azurelinux/busybox:1.36
    

    Beispielausgabe:

    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. Öffnen Sie ein neues Terminalfenster, und verwenden Sie den -Befehl, um den Namen des Pods zu erhalten, der von gestartet wurde.

    kubectl get pods
    

    Beispielausgabe:

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

    In der Beispielausgabe ist der Name des pod gestartet von .

  3. Verwenden Sie den -Befehl, um eine Verbindung mit dem bereitgestellten Pod zu öffnen:

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

    Beispielausgabe:

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

    Im vorherigen Beispiel wird der Netzwerkdatenverkehr von einem Port auf Ihrem Entwicklungscomputer zu einem Port auf dem bereitgestellten Pod weitergeleitet. Wenn Sie eine Verbindung öffnen und den Netzwerkverkehr weiterleiten, bleibt die Verbindung offen, bis Sie den Befehl stoppen.

  4. Öffnen Sie ein neues Terminal, und führen Sie den Befehl kubectl get nodes aus, um die interne IP-Adresse des Windows Server-Knotens anzuzeigen.

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

    Beispielausgabe:

    NAME                                INTERNAL_IP
    aks-nodepool1-19409214-vmss000003   10.224.0.8
    aksnpwin000000                      10.224.0.62
    

    Im vorherigen Beispiel ist 10.224.0.62 die interne IP-Adresse des Windows Server-Knotens.

  5. Erstellen Sie eine SSH-Verbindung mit dem Windows Server-Knoten mithilfe der internen IP-Adresse, und stellen Sie eine Verbindung mit dem Port 22 über port 2022 auf Ihrem Entwicklungscomputer her. Auch hier lautet der Standardbenutzername für AKS-Knoten azureuser. Bestätigen Sie die Aufforderung zum Fortsetzen der Verbindungsherstellung. Anschließend erhalten Sie die Bash-Eingabeaufforderung Ihres Windows Server Knotens:

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

    Beispielausgabe:

    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
    

    Hinweis

    Wenn Sie die Kennwortauthentifizierung bevorzugen, beziehen Sie den Parameter ein. Beispiel:

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

Verwenden Sie einen Host-Prozesscontainer, um auf Windows-Knotencomputer zuzugreifen.

  1. Führen Sie das folgende Skript aus, um zu erstellen. Ersetzen Sie im Skript AKSWINDOWSNODENAME durch den Namen des Knotens AKS Windows.

    Diese Spezifikation verwendet das Nanoserver-Basisimage. Das Basisimage verfügt nicht über PowerShell, aber da es als Hostprozesscontainer (HPC) ausgeführt wird, ist PowerShell in der zugrunde liegenden VM verfügbar.

    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/nanoserver:ltsc2022 # Use nanoserver: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. Führen Sie kubectl apply -f hostprocess.yaml aus, um den Windows HPC im angegebenen Windows Knoten bereitzustellen.

  3. Verwenden Sie .

  4. Sie können alle PowerShell-Befehle innerhalb des HPC-Containers ausführen, um auf den Windows-Knoten zuzugreifen.

Hinweis

Im HPC-Container müssen Sie den Stammordner zu C:\ wechseln, um auf die Dateien im Windows-Knoten zuzugreifen.

SSH mit Azure Bastion

Wenn Ihr Linux-Proxyknoten nicht erreichbar ist, ist die Verwendung von Azure Bastion als Proxy eine Alternative. Für diese Methode müssen Sie einen Azure Bastion Host für das virtuelle Netzwerk einrichten, in dem sich der Cluster befindet. Weitere Informationen finden Sie unter Verbinden mit Azure Bastion.

SSH mit privaten IPs aus dem virtuellen Netzwerk des Clusters

Aus Gründen der Einfachheit werden AKS-Knoten über private IP-Adressen im virtuellen Netzwerk des Clusters verfügbar gemacht. Sie müssen sich jedoch im virtuellen Netzwerk des Clusters befinden, um über SSH eine Verbindung mit dem Knoten herzustellen.

  1. Wenn Sie keinen Zugriff auf die Kubernetes-API haben, können Sie über die AKS agent pool API, (verfügbar in stabilen Versionen oder höher) Zugriff auf Eigenschaften wie und erhalten, um eine Verbindung mit AKS-Knoten herzustellen. Rufen Sie private IPs mithilfe des Befehls ab, wobei alle virtuellen Computer in einem bestimmten Knotenpool mit dem Flag das Ziel sind.

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

    Die folgende Beispielausgabe zeigt die internen IP-Adressen aller Knoten im Knotenpool:

    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
    

    Zum Festlegen eines bestimmten Knotens innerhalb des Knotenpools als Ziel verwenden Sie das Flag :

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

    Die folgende Beispielausgabe zeigt die interne IP-Adresse des angegebenen Knotens:

    Name                               Ip         Family
    ---------------------------------  -----------  -----------
    aks-nodepool1-33555069-vmss000000  10.224.0.5   IPv4
    
  2. Stellen Sie mithilfe der privaten IP-Adresse, die Sie im vorherigen Schritt abgerufen haben, über SSH eine Verbindung mit dem Knoten her. Dieser Schritt gilt nur für Linux-Knoten.

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

Nächste Schritte

Falls Sie weitere Daten für die Problembehandlung benötigen, können Sie die Kubelet-Protokolle anzeigen oder die Kubernetes-Steuerungsebenenprotokolle anzeigen.

Informationen zum Verwalten Ihrer SSH-Schlüssel finden Sie unter Verwalten der SSH-Konfiguration.