Verwenden der Clusterverbindung zur Herstellung einer sicheren Verbindung mit Azure Arc-fähigen Kubernetes-Clustern

Mit Cluster Connect können Sie sicher eine Verbindung mit Kubernetes-Clustern mit Azure Arc-Unterstützung von überall aus herstellen, ohne dass ein Eingangsport in der Firewall aktiviert werden muss.

Der Zugriff auf den apiserver des Kubernetes-Clusters mit Azure Arc-Unterstützung ermöglicht die folgenden Szenarien:

  • Interaktives Debuggen und Problembehandlung
  • Clusterzugriff auf Azure-Dienste für benutzerdefinierte Speicherorte und andere auf dieser Basis erstellte Ressourcen

Bevor Sie beginnen, lesen Sie die konzeptionelle Übersicht über die Clusterverbindungsfunktion.

Voraussetzungen

  • Installieren Sie die Azure-Befehlszeilenschnittstelle, oder aktualisieren Sie sie auf die neueste Version.

  • Installieren Sie die neueste Version der Azure CLI-Erweiterung connectedk8s:

    az extension add --name connectedk8s
    

    Wenn Sie die Erweiterung connectedk8s bereits installiert haben, aktualisieren Sie die Erweiterung auf die neueste Version:

    az extension update --name connectedk8s
    
  • Ersetzen Sie die Platzhalter, und führen Sie den folgenden Befehl aus, um die in diesem Dokument verwendeten Umgebungsvariablen festzulegen:

    CLUSTER_NAME=<cluster-name>
    RESOURCE_GROUP=<resource-group-name>
    ARM_ID_CLUSTER=$(az connectedk8s show -n $CLUSTER_NAME -g $RESOURCE_GROUP --query id -o tsv)
    
  • Zusätzlich zur Erfüllung der Netzwerkanforderungen für Kubernetes mit Arc-Aktivierung müssen Sie diese Endpunkte für den ausgehenden Zugriff aktivieren:

    Endpunkt Port
    *.servicebus.windows.net 443
    guestnotificationservice.azure.com, *.guestnotificationservice.azure.com 443

    Hinweis

    Um den Platzhalter *.servicebus.windows.net in bestimmte Endpunkte zu übersetzen, verwenden Sie den Befehl \GET https://guestnotificationservice.azure.com/urls/allowlist?api-version=2020-01-01&location=<location>. In diesem Befehl muss die Region für den Platzhalter <location> angegeben werden.

Um das Regionssegment eines regionalen Endpunkts abzurufen, entfernen Sie alle Leerzeichen aus dem Namen der Azure-Region. Beispiel: Der Regionsname für die Region USA, Osten 2 lautet eastus2.

Beispiel: Bei der Region „USA, Osten 2“ sollte *.<region>.arcdataservices.com*.eastus2.arcdataservices.com sein.

Führen Sie den folgenden Befehl aus, um eine Liste aller Regionen anzuzeigen:

az account list-locations -o table
Get-AzLocation | Format-Table

Authentifizierung einrichten

Erstellen Sie auf dem vorhandenen Cluster mit Arc-Unterstützung die ClusterRoleBinding entweder mit Microsoft Entra-Authentifizierung oder mit einem Token für das Dienstkonto.

Microsoft Entra-Authentifizierungzoption

  1. Rufen Sie die objectId zugeordnete Microsoft Entra-Entität ab.

    • Für ein Microsoft Entra-Konto für Benutzer*innen:

      AAD_ENTITY_OBJECT_ID=$(az ad signed-in-user show --query id -o tsv)
      
    • Für eine Microsoft Entra-Anwendung:

      AAD_ENTITY_OBJECT_ID=$(az ad sp show --id <id> --query id -o tsv)
      
  2. Autorisieren Sie die Entität mit den entsprechenden Berechtigungen.

    • Wenn Sie native „ClusterRoleBinding“ oder „RoleBinding“ von Kubernetes für Autorisierungsprüfungen im Cluster verwenden, wobei die kubeconfig-Datei für den direkten Zugriff auf den apiserver Ihres Clusters verweist, können Sie eine Rollenzuweisung erstellen, die der Microsoft Entra-Entität (Dienstprinzipal oder Benutzer) zugeordnet ist, die auf diesen Cluster zugreifen muss. Beispiel:

      kubectl create clusterrolebinding demo-user-binding --clusterrole cluster-admin --user=$AAD_ENTITY_OBJECT_ID
      
    • Wenn Sie Azure RBAC für Autorisierungsprüfungen im Cluster verwenden, können Sie eine anwendbare Azure-Rollenzuweisung erstellen, die der Microsoft Entra-Entität zugeordnet ist. Beispiel:

      az role assignment create --role "Azure Arc Kubernetes Viewer" --assignee $AAD_ENTITY_OBJECT_ID --scope $ARM_ID_CLUSTER
      az role assignment create --role "Azure Arc Enabled Kubernetes Cluster User Role" --assignee $AAD_ENTITY_OBJECT_ID --scope $ARM_ID_CLUSTER
      

Authentifizierungsoption „Dienstkontotoken“

  1. Führen Sie diesen Befehl aus, wobei die Datei kubeconfig auf das apiserver Ihres Kubernetes-Clusters verweist, um ein Dienstkonto zu erstellen. In diesem Beispiel wird das Dienstkonto im Standard-Namensraum erstellt, aber Sie können jeden anderen Namensraum durch default ersetzen.

    kubectl create serviceaccount demo-user -n default
    
  2. Erstellen Sie ClusterRoleBinding, um diesem Dienstkonto die entsprechenden Berechtigungen für den Cluster zu erteilen. Wenn Sie im ersten Befehl einen anderen Namespace verwendet haben, ersetzen Sie ihn hier durch default.

    kubectl create clusterrolebinding demo-user-binding --clusterrole cluster-admin --serviceaccount default:demo-user
    
  3. Erstellen eines Dienstkontotokens:

    kubectl apply -f - <<EOF
    apiVersion: v1
    kind: Secret
    metadata:
      name: demo-user-secret
      annotations:
        kubernetes.io/service-account.name: demo-user
    type: kubernetes.io/service-account-token
    EOF
    
    TOKEN=$(kubectl get secret demo-user-secret -o jsonpath='{$.data.token}' | base64 -d | sed 's/$/\n/g')
    
  4. Abrufen des Token zur Ausgabe auf der Konsole

    echo $TOKEN
    

Zugriff auf Ihren Cluster von einem Clientgerät aus

Jetzt können Sie von einem anderen Client aus auf den Cluster zugreifen. Führen Sie die folgenden Schritte auf einem anderen Clientgerät aus.

  1. Melden Sie sich entweder mit der Microsoft Entra-Authentifizierung oder der Token-Authentifizierung für das Dienstkonto an.

  2. Rufen Sie die Cluster Connect-kubeconfig-Datei für die Kommunikation mit dem Cluster von einem beliebigen Standort (auch von außerhalb der Firewall, die den Cluster umgibt) je nach Authentifizierungsoption auf:

    • Bei Verwendung der Microsoft Entra-Authentifizierung:

      az connectedk8s proxy -n $CLUSTER_NAME -g $RESOURCE_GROUP
      
    • Be Authentifizierung über ein Dienstkontotoken:

      az connectedk8s proxy -n $CLUSTER_NAME -g $RESOURCE_GROUP --token $TOKEN
      

      Hinweis

      Mit diesem Befehl wird der Proxy geöffnet und die aktuelle Shell blockiert.

  3. Verwenden Sie kubectl in einer anderen Shell-Sitzung, um Anforderungen an den Cluster zu senden:

    kubectl get pods -A
    

Nun sollte eine Antwort aus dem Cluster mit der Liste aller Pods im default-Namespace angezeigt werden.

Bekannte Einschränkungen

Verwenden Sie az connectedk8s show, um die Version Ihres Kubernetes-Agenten mit Arc-Unterstützung zu überprüfen.

Wenn beim Senden von Anforderungen an den Kubernetes-Cluster die verwendete Microsoft Entra-Entität Teil von mehr als 200 Gruppen ist, wird u. U. der folgende Fehler angezeigt:

You must be logged in to the server (Error:Error while retrieving group info. Error:Overage claim (users with more than 200 group membership) is currently not supported.

Dies ist eine bekannte Einschränkung. So umgehen Sie diesen Fehler:

  1. Erstellen Sie einen Dienstprinzipal, der weniger wahrscheinlich Mitglied von mehr als 200 Gruppen ist.
  2. Melden Sie sich bei der Azure CLI mit dem Dienstprinzipal an, bevor Sie den az connectedk8s proxy-Befehl ausführen.

Nächste Schritte