Compartir a través de


Acceso a un clúster privado de Azure Kubernetes Service (AKS) mediante la característica de invocación de comandos o Ejecutar comando

Al acceder a un clúster privado de Azure Kubernetes Service (AKS), debe conectarse al clúster desde la red virtual del clúster (VNet), una red emparejada o un punto de conexión privado configurado. Estos enfoques requieren una configuración adicional, como configurar una VPN o ExpressRoute.

Con la CLI de Azure, puede usar también command invoke para acceder a clústeres privados sin tener que configurar una VPN o Express Route. command invoke permite invocar de forma remota comandos, como kubectl y helm, en el clúster privado a través de la API de Azure sin necesidad de conectarse directamente al clúster. Las acciones Microsoft.ContainerService/managedClusters/runcommand/action de RBAC y Microsoft.ContainerService/managedClusters/commandResults/read controlan los permisos para usar command invoke.

Con Azure Portal, puede usar la característica Run command para ejecutar comandos en el clúster privado. La característica Run command usa la misma funcionalidad command invoke para ejecutar comandos en el clúster. El pod creado por Run command proporciona kubectl y helm para operar el clúster. jq, xargs, grep, y awk están disponibles para la compatibilidad con Bash.

Sugerencia

Puede usar Azure Copilot para ejecutar kubectl comandos en Azure Portal. Para más información, consulte Trabajar con clústeres de AKS de forma eficaz mediante Azure Copilot.

Prerrequisitos

Requisitos de sistema y permisos

Tipo de requisito Specification Cómo comprobarlo
Versión de la CLI de Azure 2.24.0 o posterior Use el comando az --version para comprobar la versión.
Clúster de AKS privado Ya debe existir Si no tiene un clúster privado existente, siga los pasos descritos en Creación de un clúster de AKS privado.
Acciones de RBAC Microsoft.ContainerService/managedClusters/runcommand/action y Microsoft.ContainerService/managedClusters/commandResults/read Compruebe usando la página Control de acceso (IAM) del portal de Azure o el comando de la Azure CLI az role assignment list.

Especificaciones de recursos para ejecutar comandos de pod

Tipo de recurso Importancia Impacto
Solicitudes de CPU 200m CPU mínima reservada para el pod de comandos
Solicitudes de memoria 500Mi Memoria mínima reservada para el pod de comandos
Límites de CPU 500 m Cpu máxima disponible para el pod de comandos
Límites de memoria 1 Gi Memoria máxima disponible para el pod de comandos
Tiempo de espera de la API de Azure Resource Manager (ARM) 60 segundos Tiempo máximo para la programación de pods
Límite de tamaño de salida 512 kb Tamaño máximo de salida del comando

Limitaciones y consideraciones

Ámbito de diseño

  • No para acceso programático: use Bastion, VPN o ExpressRoute para llamadas API automatizadas.
  • Dependencia de programación de pods: requiere recursos de clúster suficientes (consulte las especificaciones de recursos).
  • Limitaciones de salida: solo exitCode y text , sin detalles de nivel de API.
  • Se aplican restricciones de red: sujetas a restricciones de seguridad y redes de clúster.

Posibles puntos de error

  • Error de programación de pods si los nodos están restringidos a recursos.
  • Tiempo de espera de la API de ARM (60 segundos) si el pod no se puede programar rápidamente.
  • Truncamiento de salida si la respuesta supera el límite de 512kB.

Uso command invoke en un clúster de AKS privado con la CLI de Azure

  • Establezca variables de entorno para el grupo de recursos y el nombre del clúster que se van a usar en los comandos posteriores.

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

    Estas variables de entorno permiten ejecutar comandos de AKS sin tener que volver a escribir sus nombres.

Uso de command invoke para ejecutar un solo comando

  • Ejecute un único comando en el clúster mediante el az aks command invoke comando y el --command parámetro para especificar el comando que se va a ejecutar. En el ejemplo siguiente se obtienen los pods del espacio de nombres kube-system.

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

Uso de command invoke para ejecutar varios comandos

  • Ejecute varios comandos en el clúster mediante el az aks command invoke comando y el --command parámetro para especificar los comandos que se van a ejecutar. En el ejemplo siguiente se agrega el repositorio de gráficos de Helm de Bitnami, se actualiza el repositorio e se instala el gráfico nginx.

    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"
    

Uso command invoke para ejecutar comandos con un archivo adjunto

Si desea ejecutar un comando con un archivo adjunto, el archivo debe existir y ser accesible en el directorio de trabajo actual. En el ejemplo siguiente, creamos un archivo de implementación mínimo para la demostración.

  1. Cree un archivo de manifiesto de Kubernetes denominado deployment.yaml. El siguiente archivo de implementación de ejemplo implementa 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. Aplique el archivo de implementación al clúster mediante el az aks command invoke comando con el --file parámetro para adjuntar el archivo. En el siguiente ejemplo se aplica el archivo deployment.yaml al espacio de nombres 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
    

Uso command invoke para ejecutar comandos con todos los archivos del directorio actual

Nota

Use solo archivos pequeños y necesarios para evitar superar los límites de tamaño del sistema.

En el ejemplo siguiente, se crean dos archivos de implementación mínimos para la demostración.

  1. Cree dos archivos de manifiesto de Kubernetes denominados deployment.yaml y configmap.yaml. Los siguientes archivos de implementación de ejemplo implementan un nginx pod y crean un configMap con un mensaje de bienvenida.

    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. Aplique los archivos de implementación al clúster mediante el az aks command invoke comando con el --file parámetro para adjuntar el archivo. En el siguiente ejemplo, se aplican los archivos deployment.yaml y configmap.yaml al espacio de nombres 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
    

Usar Run command en un clúster de AKS privado en el portal de Azure

Puede usar los siguientes kubectl comandos con la Run command característica :

  • 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>

Uso de Run command para ejecutar un solo comando

  1. En Azure Portal, vaya al clúster privado.
  2. En el menú del servicio, en Recursos de Kubernetes, seleccione Ejecutar comando.
  3. Escriba el comando que quiera ejecutar y seleccione Ejecutar.

Uso de Run command para ejecutar comandos con archivos adjuntos

  1. En Azure Portal, vaya al clúster privado.

  2. En el menú del servicio, en Recursos de Kubernetes, seleccione Ejecutar comando.

  3. Seleccione Adjuntar archivos>Buscar archivos.

    Captura de pantalla de la asociación de archivos al comando Ejecutar de Azure Portal.

  4. Seleccione el archivo o los archivos que desea adjuntar y, a continuación, seleccione Asociar.

  5. Escriba el comando que quiera ejecutar y seleccione Ejecutar.

Deshabilitar Run command

Puede deshabilitar la característica Run command estableciendo .properties.apiServerAccessProfile.disableRunCommand a true.

Resuelve problemas command invoke

Para obtener información sobre los problemas más comunes con az aks command invoke y cómo corregirlos, consulte Resolver az aks command invoke errores.

En este artículo, ha aprendido a acceder a un clúster privado y ejecutar comandos en ese clúster. Para obtener más información sobre los clústeres de AKS, consulte los siguientes artículos: