Partager via


Accéder à un cluster Azure Kubernetes Service (AKS) privé à l'aide de la fonctionnalité d'invocation de commande ou Run command

Lorsque vous accédez à un cluster Azure Kubernetes Service (AKS) privé, vous devez vous connecter au cluster depuis le réseau virtuel (VNet) du cluster, un réseau appairé ou un point de terminaison privé configuré. Ces approches nécessitent une configuration supplémentaire, comme la configuration d’un VPN ou d’un itinéraire Express.

Avec l'interface Azure CLI, vous pouvez utiliser command invoke pour accéder à des clusters privés sans avoir à configurer un VPN ou ExpressRoute. command invoke vous permet d’invoquer à distance des commandes comme kubectl et helm sur votre cluster privé par le biais de l’API Azure sans vous connecter directement au cluster. Les actions Microsoft.ContainerService/managedClusters/runcommand/action RBAC et Microsoft.ContainerService/managedClusters/commandResults/read contrôlent les autorisations d’utilisation de command invoke.

Avec le portail Azure, vous pouvez utiliser la fonctionnalité Run command pour exécuter des commandes sur votre cluster privé. La fonctionnalité Run command utilise la même fonctionnalité command invoke pour exécuter des commandes sur votre cluster. Le pod créé par Run command fournit kubectl et helm pour l’exploitation de votre cluster. jq, xargs, grep et awk sont disponibles pour la prise en charge Bash.

Conseil / Astuce

Vous pouvez utiliser Azure Copilot pour exécuter kubectl des commandes dans le portail Azure. Pour plus d’informations, consultez Utiliser efficacement des clusters AKS à l’aide d’Azure Copilot.

Prerequisites

Configuration requise pour le système et l’autorisation

Type d’exigence Specification Comment le vérifier
Version d’Azure CLI 2.24.0 ou version ultérieure Utilisez la commande az --version pour vérifier la version que vous utilisez.
Cluster AKS privé Doit déjà exister Si vous n’avez pas de cluster privé existant, suivez les étapes décrites dans Créer un cluster AKS privé.
Actions RBAC Microsoft.ContainerService/managedClusters/runcommand/action et Microsoft.ContainerService/managedClusters/commandResults/read Vérifiez à l’aide de la page contrôle d’accès du portail Azure (IAM) ou de la az role assignment list commande Azure CLI.

Commandes d'exécution des spécifications des ressources du pod

Type de ressource Valeur Impact
Demandes de CPU 200m Processeur minimal réservé pour le pod de commande
Demandes de mémoire 500 Mio Mémoire minimale réservée pour le pod de commande
Limites du processeur 500 m Processeur maximal disponible pour le pod de commande
Limites de mémoire 1Gi Mémoire maximale disponible pour le pod de commande
Délai d’expiration de l’API Azure Resource Manager (ARM) 60 secondes Durée maximale de planification des pods
Limite de taille de sortie 512 ko Taille maximale de sortie de commande

Limitations et considérations

Étendue de conception

  • Non pour l’accès par programmation : utilisez Bastion, VPN ou ExpressRoute pour les appels d’API automatisés.
  • Dépendance de programmation des pods : nécessite des ressources de cluster suffisantes (consultez les spécifications des ressources).
  • Limitations de sortie : exitCode et text uniquement, aucun détail au niveau de l’API.
  • Les contraintes réseau s’appliquent : soumises aux restrictions de mise en réseau et de sécurité du cluster.

Points d’échec potentiels

  • Échec de planification des pods si les nœuds sont limités en ressources.
  • Délai d’expiration de l’API ARM (60 secondes) si le pod ne peut pas être planifié rapidement.
  • Troncation de sortie si la réponse dépasse la limite de 512 ko.

Utiliser command invoke sur un cluster AKS privé avec Azure CLI

  • Définissez les variables d’environnement pour votre groupe de ressources et le nom du cluster à utiliser dans les commandes suivantes.

    export AKS_RESOURCE_GROUP="<resource-group-name>"
    export AKS_CLUSTER_NAME="<cluster-name>"
    

    Ces variables d’environnement vous permettent d’exécuter des commandes AKS sans avoir à réécrire leurs noms.

Utiliser command invoke pour exécuter une seule commande

  • Exécutez une seule commande sur votre cluster à l’aide de la az aks command invoke commande et du --command paramètre pour spécifier la commande à exécuter. L'exemple suivant récupère les pods dans l'espace de noms kube-system.

    az aks command invoke \
      --resource-group $AKS_RESOURCE_GROUP \
      --name $AKS_CLUSTER_NAME \
      --command "kubectl get pods -n kube-system"
    

Utiliser command invoke pour exécuter plusieurs commandes

  • Exécutez plusieurs commandes sur votre cluster à l’aide de la az aks command invoke commande et du --command paramètre pour spécifier les commandes à exécuter. L’exemple suivant ajoute le référentiel de graphiques Bitnami Helm, met à jour le référentiel et installe le nginx graphique.

    az aks command invoke \
      --resource-group $AKS_RESOURCE_GROUP \
      --name $AKS_CLUSTER_NAME \
      --command "helm repo add bitnami https://charts.bitnami.com/bitnami && helm repo update && helm install my-release bitnami/nginx"
    

Utiliser command invoke pour exécuter des commandes avec un fichier joint

Si vous souhaitez exécuter une commande avec un fichier joint, le fichier doit exister et être accessible dans votre répertoire de travail actuel. Dans l’exemple suivant, nous créons un fichier de déploiement minimal pour la démonstration.

  1. Créez un fichier manifeste Kubernetes nommé deployment.yaml. L’exemple de fichier de déploiement suivant déploie un nginx pod.

    cat <<EOF > deployment.yaml
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: nginx-demo
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: nginx-demo
      template:
        metadata:
          labels:
            app: nginx-demo
        spec:
          containers:
          - name: nginx
            image: nginx:1.21.6
            ports:
            - containerPort: 80
    EOF
    
  2. Appliquez le fichier de déploiement à votre cluster à l’aide de la commande az aks command invoke avec le paramètre --file pour rattacher le fichier. L’exemple suivant applique le fichier deployment.yaml à l’espace de noms default.

    az aks command invoke \
      --resource-group $AKS_RESOURCE_GROUP \
      --name $AKS_CLUSTER_NAME \
      --command "kubectl apply -f deployment.yaml -n default" \
      --file deployment.yaml
    

Permet command invoke d’exécuter des commandes avec tous les fichiers du répertoire actif

Remarque

Utilisez uniquement de petits fichiers nécessaires pour éviter de dépasser les limites de taille du système.

Dans l’exemple suivant, nous créons deux fichiers de déploiement minimal pour la démonstration.

  1. Créez deux fichiers manifeste Kubernetes nommés deployment.yaml et configmap.yaml. Les exemples de fichiers de déploiement suivants déploient un nginx pod et créent un ConfigMap avec un message de bienvenue.

    cat <<EOF > deployment.yaml
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: nginx-demo
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: nginx-demo
      template:
        metadata:
          labels:
            app: nginx-demo
        spec:
          containers:
          - name: nginx
            image: nginx:1.21.6
            ports:
            - containerPort: 80
    EOF
    
    cat <<EOF > configmap.yaml
    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: nginx-config
    data:
      welcome-message: "Hello from configmap"
    EOF
    
  2. Appliquez les fichiers de déploiement à votre cluster à l'aide de la commande az aks command invoke avec le paramètre --file pour attacher le fichier. L’exemple suivant applique les fichiers deployment.yaml et configmap.yaml à l’espace de noms default.

    az aks command invoke \
      --resource-group $AKS_RESOURCE_GROUP \
      --name $AKS_CLUSTER_NAME \
      --command "kubectl apply -f deployment.yaml -f configmap.yaml -n default" \
      --file deployment.yaml \
      --file configmap.yaml
    

Utiliser Run command sur un cluster AKS privé dans le portail Azure

Vous pouvez utiliser les commandes suivantes kubectl avec la Run command fonctionnalité :

  • kubectl get nodes
  • kubectl get deployments
  • kubectl get pods
  • kubectl describe nodes
  • kubectl describe pod <pod-name>
  • kubectl describe deployment <deployment-name>
  • kubectl apply -f <file-name>

Utiliser Run command pour exécuter une seule commande

  1. Dans le portail Azure, accédez à votre cluster privé.
  2. Dans le menu du service, sous ressources Kubernetes, sélectionnez Commande Exécuter.
  3. Entrez la commande que vous souhaitez exécuter et sélectionnez Exécuter.

Utilisez Run command pour exécuter des commandes avec des fichiers joints

  1. Dans le portail Azure, accédez à votre cluster privé.

  2. Dans le menu du service, sous ressources Kubernetes, sélectionnez Commande Exécuter.

  3. Sélectionnez Joindre des fichiers>Parcourir les fichiers.

    Capture d'écran de la jointure de fichiers dans la fonctionnalité Run command du portail Azure.

  4. Sélectionnez le fichier ou les fichiers que vous souhaitez joindre, puis sélectionnez Joindre.

  5. Entrez la commande que vous souhaitez exécuter et sélectionnez Exécuter.

Désactiver Run command

Vous pouvez désactiver la Run command fonctionnalité en définissant .properties.apiServerAccessProfile.disableRunCommand sur true.

Résoudre les problèmes avec command invoke

Pour plus d’informations sur les problèmes les plus courants liés à az aks command invoke et sur la façon de les résoudre, consultez Résoudre les échecs « az aks command invoke ».

Dans cet article, vous avez appris à accéder à un cluster privé et à exécuter des commandes sur ce cluster. Pour plus d’informations sur les clusters AKS, consultez la documentation suivante :