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

Cuando acceda a un clúster AKS privado, necesitará conectarse al clúster desde la red virtual del clúster, desde una red emparejada o mediante un punto de conexión privado configurado. Para estos enfoques es necesario configurar una VPN, Express Route, implementar un jumpbox dentro de la red virtual del clúster o crear un punto de conexión privado dentro de otra red virtual.

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

Sugerencia

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

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.

Antes de empezar

Antes de empezar, asegúrese de tener los siguientes recursos y permisos:

  • Un clúster privado existente. Si no lo tiene, consulte Crear un clúster privado de AKS.
  • La versión 2.24.0 de la CLI de Azure, o cualquier versión posterior. Ejecute az --version para encontrar la versión. Si necesita instalarla o actualizarla, vea Instalación de la CLI de Azure.
  • Acceda a los roles Microsoft.ContainerService/managedClusters/runcommand/action y Microsoft.ContainerService/managedclusters/commandResults/read en el clúster.

Limitaciones

Esta característica está diseñada para simplificar el acceso al clúster y no está diseñada para el acceso mediante programación. Debe aprovechar el acceso directo a la API a través de Bastion, VPN o ExpressRoute para las llamadas programáticas a su clúster.

Si tiene un programa que invoca Kubernetes mediante Run command, se aplican las siguientes desventajas:

  • Solo obtiene exitCode y salida de texto, y pierde los detalles del nivel de API.
  • Un salto adicional presenta puntos de error adicionales.

El pod creado por Run commandtiene 200m CPU y 500Mi memory las solicitudes, y un 500m CPU y 1Gi memory los límites. En los casos en los que todos sus nodos estén llenos o sobresuscritos, es posible que el pod no pueda ser programado dentro del tiempo de espera de 60 segundos de la API de ARM. Esto significa que se produciría un error en la Run command invocación.

command invoke ejecuta los comandos del clúster, por lo que los comandos ejecutados de esta manera están sujetos a las restricciones de red configuradas y a cualquier otra restricción configurada. Asegúrese de que hay suficientes nodos y recursos en el clúster para programar este pod de comandos.

Nota

La salida de command invoke tiene un tamaño limitado a 512 kB.

Ejecución de comandos en el clúster de AKS

A continuación se muestran ejemplos de cómo usar az aks command invoke para ejecutar comandos en un clúster de AKS privado. En estos ejemplos se supone que tiene un grupo de recursos existente y un clúster de AKS.

Uso de command invoke para ejecutar un solo comando

Puede ejecutar un comando en el clúster mediante el az aks command invoke --command comando . En el comando de ejemplo siguiente se ejecuta el comando kubectl get pods -n kube-system en el clúster myPrivateCluster en myResourceGroup.

En primer lugar, establezca variables de entorno para el grupo de recursos y el nombre del clúster que se usarán en comandos posteriores.

export AKS_RESOURCE_GROUP="myResourceGroup"
export AKS_CLUSTER_NAME="myPrivateCluster"

Las variables de entorno anteriores le permitirán ejecutar comandos de AKS en las secciones siguientes sin tener que volver a escribir sus nombres.

Para ejecutar un único comando kubectl en el clúster de AKS:

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

También puede ejecutar varios comandos. En el ejemplo siguiente se ejecutan tres helm comandos en secuencia en el clúster.

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

Al usar el --file parámetro con az aks command invoke, el archivo debe existir y ser accesible en el directorio de trabajo actual. A continuación, se crea un archivo de implementación mínimo para la demostración.

Para ejecutar un comando con un archivo asociado, cree primero un archivo de manifiesto de Kubernetes denominado deployment.yaml. En el ejemplo siguiente se crea una implementación de nginx pequeña y se aplica con command invoke:

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

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

Use command invoke para ejecutar comandos con todos los archivos adjuntos en el directorio actual

Use solo archivos pequeños y necesarios para evitar superar los límites de tamaño del sistema. A continuación, se crean dos archivos YAML mínimos antes de adjuntarlos.

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

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

Deshabilitar Run command

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

Solución de problemas

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.

Pasos siguientes

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: