Utiliser la connexion de cluster pour vous connecter de manière sécurisée aux clusters Kubernetes avec Azure Arc

Avec la connexion de cluster, vous pouvez vous connecter de manière sécurisée aux clusters Kubernetes de n’importe quel lieu avec Azure Arc sans avoir besoin d’activer un port entrant sur le pare-feu.

L’accès au apiserver du cluster Kubernetes avec Azure Arc rend les scénarios suivants possibles :

  • Débogage et résolution des problèmes de manière interactive.
  • Accès des services Azure au cluster pour les emplacements personnalisés et les autres ressources créées par-dessus.

Avant de commencer, passez en revue la vue d’ensemble conceptuelle de la fonctionnalité de connexion au cluster.

Prérequis

  • Installez ou mettez à niveau Azure CLI avec la dernière version.

  • Installez la dernière version de l’extension Azure CLI connectedk8s :

    az extension add --name connectedk8s
    

    Si vous avez déjà installé l’extension connectedk8s, mettez-la à jour vers la dernière version :

    az extension update --name connectedk8s
    
  • Remplacez les espaces réservés et exécutez la commande ci-dessous pour définir les variables d’environnement utilisées dans ce document :

    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)
    
  • En plus de répondre aux exigences réseau pour le Kubernetes avec Arc, activez ces points de terminaison pour l’accès sortant :

    Point de terminaison Port
    *.servicebus.windows.net 443
    guestnotificationservice.azure.com, *.guestnotificationservice.azure.com 443

    Remarque

    Pour translater le caractère générique *.servicebus.windows.net en points de terminaison spécifiques, utilisez la commande \GET https://guestnotificationservice.azure.com/urls/allowlist?api-version=2020-01-01&location=<location>. Dans cette commande, la région doit être spécifiée pour l’espace réservé <location>.

Pour obtenir le segment de région d’un point de terminaison régional, supprimez tous les espaces du nom de la région Azure. Par exemple, région USA Est 2 , le nom de la région est eastus2.

Par exemple : *.<region>.arcdataservices.com doit se trouver *.eastus2.arcdataservices.com dans la région USA Est 2.

Pour afficher la liste de toutes les régions, exécutez cette commande :

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

Configurer l’authentification

Sur le cluster arc existant, créez clusterRoleBinding avec l’authentification Microsoft Entra ou un jeton de compte de service.

Option d’authentification Microsoft Entra

  1. Récupérez l’élément objectId associé à votre entité Microsoft Entra.

    • Pour un compte d’utilisateur Microsoft Entra :

      AAD_ENTITY_OBJECT_ID=$(az ad signed-in-user show --query id -o tsv)
      
    • Pour une application Microsoft Entra :

      AAD_ENTITY_OBJECT_ID=$(az ad sp show --id <id> --query id -o tsv)
      
  2. Autorisez l’entité avec les autorisations appropriées.

    • Si vous utilisez ClusterRoleBinding ou RoleBinding en mode natif dans Kubernetes pour les vérifications d’autorisation sur le cluster, avec le fichier kubeconfig pointant vers le apiserver de votre cluster pour un accès direct, vous pouvez en créer un mappé à l’entité Microsoft Entra (principal du service ou utilisateur) qui doit accéder à ce cluster. Par exemple :

      kubectl create clusterrolebinding demo-user-binding --clusterrole cluster-admin --user=$AAD_ENTITY_OBJECT_ID
      
    • Si vous utilisez Azure RBAC pour les contrôles d’autorisation sur le cluster, vous pouvez créer une attribution de rôle Azure applicable mappée à l’entité Microsoft Entra. Par exemple :

      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
      

Option d’authentification du jeton du compte de service

  1. Avec le kubeconfigfichier pointant vers le apiserver de votre cluster Kubernetes, exécutez cette commande pour créer un compte de service. Cet exemple crée le compte de service dans l’espace de noms par défaut, mais vous pouvez remplacer n’importe quel autre espace de noms pour default.

    kubectl create serviceaccount demo-user -n default
    
  2. Créez ClusterRoleBinding afin d’octroyer à ce compte de service les autorisations appropriées pour le cluster. Si vous avez utilisé un espace de noms différent dans la première commande, remplacez-le ici par default.

    kubectl create clusterrolebinding demo-user-binding --clusterrole cluster-admin --serviceaccount default:demo-user
    
  3. Créez un jeton de compte de service :

    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. Obtenir le jeton pour la sortie dans la console

    echo $TOKEN
    

Accéder à votre cluster à partir d’un appareil client

Vous pouvez maintenant accéder au cluster à partir d’un autre client. Exécutez les étapes suivantes sur un autre appareil client.

  1. Connectez-vous à l’aide de l’authentification Microsoft Entra ou de l’authentification par jeton de compte de service.

  2. Récupérez la connexion de cluster kubeconfig nécessaire pour communiquer avec le cluster depuis n’importe quel emplacement (même en dehors du pare-feu entourant le cluster), en fonction de l’option d’authentification utilisée :

    • Si vous utilisez l’authentification Microsoft Entra :

      az connectedk8s proxy -n $CLUSTER_NAME -g $RESOURCE_GROUP
      
    • Si vous utilisez l’authentification du jeton du compte de service :

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

      Remarque

      Cette commande ouvre le proxy et bloque l’interpréteur de commandes actuel.

  3. Dans une autre session d’interpréteur de commandes, utilisez kubectl pour envoyer des requêtes au cluster :

    kubectl get pods -A
    

Vous devez voir une réponse du cluster contenant la liste de tous les pods présents dans l’espace de noms default.

Limitations connues

Utilisez az connectedk8s show pour vérifier la version de votre agent Kubernetes avec Arc.

Quand des requêtes sont adressées au cluster Kubernetes, si l’entité Microsoft Entra utilisée fait partie de plus de 200 groupes, l’erreur suivante peut se produire :

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.

Il s’agit d’une limitation connue. Pour contourner cette erreur :

  1. Créez un principal de service, qui est moins susceptible d’être membre de plus de 200 groupes.
  2. Connectez-vous à Azure CLI avec le principal de service avant d’exécuter la commande az connectedk8s proxy.

Étapes suivantes