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 API-Server des Azure Arc-fähigen Kubernetes-Clusters ermöglicht die folgenden Szenarien:

  • Interaktives Debuggen und Problembehandlung
  • Clusterzugriff auf Azure Dienste für custom locations und andere ressourcen, die auf dem Cluster erstellt wurden.

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.

  • Installation der neuesten 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 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)
    

Einrichten der Authentifizierung

Erstellen Sie im vorhandenen Arc-fähigen Cluster die ClusterRoleBinding entweder unter Verwendung der Microsoft Entra ID-Authentifizierung oder eines Dienstkonto-Tokens.

Microsoft Entra ID-Authentifizierung

  1. Rufen Sie die objectId ab, die Ihrer Microsoft Entra ID-Entität zugeordnet ist. Rufen Sie für einzelne Benutzerkonten den Benutzerprinzipalnamen (UPN) ab, der Ihrer Microsoft Entra ID-Entität zugeordnet ist.

    • Für ein Microsoft Entra-Gruppenkonto:

      AAD_ENTITY_ID=$(az ad group show --group <group-name> --query id -o tsv)
      
    • Für ein Microsoft Entra-Einzelbenutzerkonto:

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

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

    • Wenn Sie für die Autorisierungsprüfungen im Cluster die Kubernetes-eigenen ClusterRoleBinding- oder RoleBinding-Objekte verwenden, wobei die Datei kubeconfig auf den Kubernetes-API-Server (kube-apiserver) Ihres Clusters verweist, um direkten Zugriff zu ermöglichen, können Sie ein Objekt erstellen, das der Microsoft Entra ID-Entität zugeordnet ist, die auf diesen Cluster zugreifen muss. Beispiel:

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

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

Dienstkontotokenauthentifizierung

Hinweis

Die Befehle auf dieser Registerkarte setzen eine Bash-kompatible Shell (Linux, macOS oder Windows-Subsystem für Linux) voraus. Verwenden Sie für Windows PowerShell die Registerkarte Azure PowerShell.

  1. Führen Sie mit der kubeconfig Datei, die auf den Kubernetes-API-Server (kube-apiserver) Ihres Kubernetes-Clusters zeigt, diesen Befehl aus, 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 ein 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. Geben Sie das Token an die Konsole aus:

    echo $TOKEN
    

Zugriff auf Ihren Cluster von einem Clientgerät aus

Nachdem Sie die Authentifizierung auf dem Cluster eingerichtet haben, führen Sie die folgenden Schritte von jedem Clientgerät aus, um einen Clusterverbindungsproxy zu öffnen und kubectl-Befehle für den Azure Arc-fähigen Kubernetes-Cluster auszuführen.

  1. Melden Sie sich entweder mit Microsoft Entra ID-Authentifizierung oder per Dienstkonto-Token an.

  2. Rufen Sie die Clusterverbindung kubeconfig ab, die Sie für die Kommunikation mit dem Cluster von überall (auch außerhalb der Firewall) verwenden, basierend auf Ihrer Authentifizierungsoption:

    • Für die Microsoft Entra ID-Authentifizierung:

      # Microsoft Entra ID authentication
      az connectedk8s proxy -n $CLUSTER_NAME -g $RESOURCE_GROUP
      
    • Für die Dienstkontotokenauthentifizierung:

      # Service account token authentication
      az connectedk8s proxy -n $CLUSTER_NAME -g $RESOURCE_GROUP --token $TOKEN
      

      Hinweis

      Dieser Befehl öffnet den Proxy und blockiert die aktuelle Shell.

  3. Verwenden Sie in einer anderen Shell-Sitzung kubectl, um Anfragen an den Cluster zu senden. Führen Sie beispielsweise den folgenden Befehl aus:

    kubectl get pods -n default
    

Wenn die Verbindung ordnungsgemäß funktioniert, werden in der Antwort alle Pods im default Namespace aufgelistet.

Bekannte Einschränkungen

Die folgende Einschränkung gilt, wenn Sie cluster connect verwenden, um auf einen Azure Arc-fähigen Kubernetes-Cluster zuzugreifen.

Wenn Sie sich vor dem Ausführen von az connectedk8s proxy bei Azure CLI mit einem Microsoft Entra ID Dienstprinzipal anmelden und dieser Dienstprinzipal Mitglied von mehr als 200 Gruppen ist, wird möglicherweise der folgende Fehler angezeigt:

Overage claim (users with more than 200 group membership) for SPN is currently not supported. For troubleshooting, please refer to aka.ms/overageclaimtroubleshoot

So umgehen Sie diese Einschränkung:

  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