Administración de SSH para el acceso seguro a los nodos de Azure Kubernetes Service (AKS)

En este artículo se describe cómo configurar las claves SSH (versión preliminar) en los clústeres de AKS o grupos de nodos, durante la implementación inicial o en un momento posterior.

AKS admite las siguientes opciones de configuración para administrar claves SSH en los nodos de clúster:

  • Creación de un clúster con claves SSH
  • Actualización de las claves SSH en un clúster de AKS existente
  • Deshabilitación y habilitación del servicio SSH

Importante

Las características en versión preliminar de AKS están disponibles como opción de participación y autoservicio. Las versiones preliminares se proporcionan "tal cual" y "como están disponibles", y están excluidas de los Acuerdos de nivel de servicio y la garantía limitada. Las versiones preliminares de AKS reciben cobertura parcial del soporte al cliente en la medida de lo posible. Por lo tanto, estas características no están diseñadas para su uso en producción. Para más información, consulte los siguientes artículos de soporte:

Antes de empezar

  • Necesita la versión aks-preview 0.5.116 o posterior para usar Actualizar.
  • Necesita la versión aks-preview 1.0.0b6 o posterior para usar Deshabilitar.
  • La característica SSH Crear y Actualizar SSH admite los grupos de nodos Linux, Windows y Azure Linux en los clústeres existentes.
  • La característica SSH Deshabilitar no se admite en esta versión preliminar en grupos de nodos que ejecutan el sistema operativo Windows Server.

Instalación de la extensión de la CLI de Azure aks-preview

  1. Instale la extensión aks-preview mediante el comando az extension add.

    az extension add --name aks-preview
    
  2. Actualiza a la última versión de la extensión mediante el comando az extension update.

    az extension update --name aks-preview
    

Registro de la marca de característica DisableSSHPreview

Para usar la característica SSH Deshabilitar, siga estos pasos para registrarla y habilitarla en la suscripción.

  1. Registre la marca de características de DisableSSHPreview mediante el comando az feature register.

    az feature register --namespace "Microsoft.ContainerService" --name "DisableSSHPreview"
    

    Tarda unos minutos en que el estado muestre Registrado.

  2. Comprobar el estado del registro mediante el comando az feature show.

    az feature show --namespace "Microsoft.ContainerService" --name "DisableSSHPreview"
    
  3. Cuando aparezca el estado Registrado, actualice el registro del proveedor de recursos Microsoft.ContainerService mediante el comando az provider register.

    az provider register --namespace Microsoft.ContainerService
    

Creación de un clúster de AKS con claves SSH

Use el comando az aks create para implementar un clúster de AKS con una clave pública SSH. Puede especificar la clave o un archivo de clave mediante el argumento --ssh-key-value.

Parámetro SSH Descripción Default value
--generate-ssh-key Si no tiene sus propias claves SSH, especifique --generate-ssh-key. La CLI de Azure genera automáticamente un conjunto de claves SSH y las guarda en el directorio predeterminado ~/.ssh/.
--ssh-key-value Ruta de acceso de clave pública o contenido de la clave que se va a instalar en máquinas virtuales de nodo para el acceso SSH. Por ejemplo, ssh-rsa AAAAB...snip...UcyupgH azureuser@linuxvm. ~/.ssh/id_rsa.pub
--no-ssh-key Si no necesita claves SSH, especifique este argumento. Sin embargo, AKS genera automáticamente un conjunto de claves SSH porque la dependencia de recursos de máquina virtual de Azure no admite un archivo de claves SSH vacío. Como resultado, las claves no se devuelven y no se pueden usar para SSH en las máquinas virtuales del nodo. La clave privada se descarta y no se guarda.

Nota:

Si no se especifica ningún parámetro, la CLI de Azure tiene como valor predeterminado hacer referencia a las claves SSH almacenadas en el archivo ~/.ssh/id_rsa.pub. Si no se encuentran las claves, el comando devuelve el mensaje An RSA key file or key value must be supplied to SSH Key Value.

A continuación se muestran ejemplos de este comando:

  • Para crear un clúster y usar las claves SSH generadas predeterminadas:

    az aks create --name myAKSCluster --resource-group MyResourceGroup --generate-ssh-key
    
  • Para especificar un archivo de clave pública SSH, incluya el argumento --ssh-key-value:

    az aks create --name myAKSCluster --resource-group MyResourceGroup --ssh-key-value ~/.ssh/id_rsa.pub
    

Actualización de la clave pública SSH en un clúster de AKS existente

Use el comando az aks update para actualizar la clave pública SSH (versión preliminar) en el clúster. Esta operación actualiza la clave en todos los grupos de nodos. Puede especificar una clave o un archivo de clave mediante el argumento --ssh-key-value.

Nota:

La actualización de las claves SSH se admite en conjuntos de escalado de máquinas virtuales de Azure con clústeres de AKS.

A continuación se muestran ejemplos de este comando:

  • Para especificar un nuevo valor de clave pública SSH, incluya el argumento --ssh-key-value:

    az aks update --name myAKSCluster --resource-group MyResourceGroup --ssh-key-value 'ssh-rsa AAAAB3Nza-xxx'
    
  • Para especificar un archivo de clave pública SSH, especifíquelo con el argumento --ssh-key-value:

    az aks update --name myAKSCluster --resource-group MyResourceGroup --ssh-key-value ~/.ssh/id_rsa.pub
    

Importante

Después de actualizar la clave SSH, AKS no vuelve a crear automáticamente la imagen del grupo de nodos. En cualquier momento, puede optar por realizar una operación de actualización del grupo de nodos. La operación de actualización de claves SSH surte efecto después de que se complete una actualización de la imagen del nodo.

Información general de deshabilitación de SSH

Para mejorar la seguridad y admitir la estrategia o los requisitos de seguridad empresariales, AKS admite la deshabilitación de SSH (versión preliminar) tanto en el clúster como en el nivel de grupo de nodos. La deshabilitación de SSH presenta un enfoque simplificado en comparación con la única solución admitida, que requiere configurar reglas del grupo de seguridad de red en la tarjeta de interfaz de red (NIC) de nodo o subred de AKS.

Al deshabilitar SSH en el momento de la creación del clúster, surte efecto cuando se crea el clúster. Sin embargo, al deshabilitar SSH en un grupo de nodos o clústeres existente, AKS no deshabilita SSH automáticamente. En cualquier momento, puede optar por realizar una operación de actualización del grupo de nodos. La operación de deshabilitación o habilitación de claves SSH surte efecto después de que se complete la actualización de la imagen del nodo.

Parámetro SSH Descripción
disabled El servicio SSH está deshabilitado.
localuser El servicio SSH está habilitado y los usuarios con claves SSH pueden acceder al nodo de forma segura.

Nota:

El nodo de depuración de kubectl sigue funcionando después de deshabilitar SSH porque no depende del servicio SSH.

Deshabilitación de SSH en una nueva implementación de clúster

De forma predeterminada, el servicio SSH en los nodos del clúster de AKS está abierto a todos los usuarios y pods que se ejecutan en el clúster. Puede impedir el acceso directo de SSH desde cualquier red a los nodos de clúster para ayudar a limitar el vector de ataque si un contenedor de un pod está en peligro. Use el comando az aks create para crear un nuevo clúster e incluya el argumento --ssh-access disabled para deshabilitar SSH (versión preliminar) en todos los grupos de nodos durante la creación del clúster.

Importante

Después de deshabilitar el servicio SSH, no puede conectarse mediante SSH al clúster para realizar tareas administrativas o solucionar problemas.

az aks create -g myResourceGroup -n myManagedCluster --ssh-access disabled

Transcurridos unos minutos, el comando se completa y devuelve información en formato JSON sobre el clúster. El ejemplo siguiente es similar a la salida y los resultados relacionados con la deshabilitación de SSH:

"securityProfile": {
"sshAccess": "Disabled"
},

Deshabilitación de SSH en un clúster existente

Use el comando az aks update para actualizar un clúster existente e incluya el argumento --ssh-access disabled para deshabilitar SSH (versión preliminar) en todos los grupos de nodos del clúster.

az aks update -g myResourceGroup -n myManagedCluster --ssh-access disabled

Transcurridos unos minutos, el comando se completa y devuelve información en formato JSON sobre el clúster. El ejemplo siguiente es similar a la salida y los resultados relacionados con la deshabilitación de SSH:

"securityProfile": {
"sshAccess": "Disabled"
},

Para que el cambio surta efecto, debe restablecer la imagen inicial de todos los grupos de nodos mediante el comando az aks nodepool upgrade.

az aks nodepool upgrade --cluster-name myManagedCluster --name mynodepool --resource-group myResourceGroup --node-image-only

Importante

Durante esta operación, todas las instancias del conjunto de escalado de máquinas virtuales se actualizan y se vuelven a crear imágenes para usar la nueva configuración de SSH.

Deshabilitación de SSH para un nuevo grupo de nodos

Use el comando az aks nodepool add para agregar un grupo de nodos e incluya el argumento --ssh-access disabled para deshabilitar SSH durante la creación del grupo de nodos.

az aks nodepool add --cluster-name myManagedCluster --name mynodepool --resource-group myResourceGroup --ssh-access disabled  

Transcurridos unos minutos, el comando se completa y devuelve información en formato JSON sobre el clúster, lo que indica que mynodepool se creó correctamente. El ejemplo siguiente es similar a la salida y los resultados relacionados con la deshabilitación de SSH:

"securityProfile": {
"sshAccess": "Disabled"
},

Deshabilitación de SSH para un grupo de nodos existente

Use el argumento [az aks nodepool update][az-aks-nodepool-update] command with the --ssh-access disabled` para deshabilitar SSH (versión preliminar) en un grupo de nodos existente.

az aks nodepool update --cluster-name myManagedCluster --name mynodepool --resource-group myResourceGroup --ssh-access disabled

Transcurridos unos minutos, el comando se completa y devuelve información en formato JSON sobre el clúster, lo que indica que mynodepool se creó correctamente. El ejemplo siguiente es similar a la salida y los resultados relacionados con la deshabilitación de SSH:

"securityProfile": {
"sshAccess": "Disabled"
},

Para que el cambio surta efecto, debe restablecer la imagen inicial del grupo de nodos mediante el comando az aks nodepool upgrade.

az aks nodepool upgrade --cluster-name myManagedCluster --name mynodepool --resource-group myResourceGroup --node-image-only

Rehabilitación de SSH en un clúster existente

Use el comando az aks update para actualizar un clúster existente e incluya el argumento --ssh-access localuser para rehabilitar SSH (versión preliminar) en todos los grupos de nodos del clúster.

az aks update -g myResourceGroup -n myManagedCluster --ssh-access localuser

Se devuelve el mensaje siguiente durante la realización del proceso:

Only after all the nodes are reimaged, does the disable/enable SSH Access operation take effect."

Después de rehabilitar SSH, no se restablecerá la imagen inicial de los nodos automáticamente. En cualquier momento, puede optar por realizar una operación de restablecimiento de imagen inicial.

Importante

Durante esta operación, todas las instancias del conjunto de escalado de máquinas virtuales se actualizan y se vuelven a crear imágenes para usar la nueva clave SSH pública.

Rehabilitación de SSH para un grupo de nodos específico

Use el comando az aks update para actualizar un grupo de nodos específico e incluya el argumento --ssh-access localuser para rehabilitar SSH (versión preliminar) en ese grupo de nodos del clúster. En el ejemplo siguiente, nodepool1 es el grupo de nodos de destino.

az aks nodepool update --cluster-name myManagedCluster --name nodepool1 --resource-group myResourceGroup --ssh-access localuser 

Se devuelve el mensaje siguiente al realizarse el proceso:

Only after all the nodes are reimaged, does the disable/enable SSH Access operation take effect.

Importante

Durante esta operación, todas las instancias del conjunto de escalado de máquinas virtuales se actualizan y se vuelven a crear imágenes para usar la nueva clave SSH pública.

Estado del servicio SSH

Siga estos pasos para usar node-shell en un nodo e inspeccionar el estado del servicio SSH mediante systemctl.

  1. Obtenga un shell de Bash estándar mediante la ejecución del comando kubectl node-shell <node>.

    kubectl node-shell aks-nodepool1-20785627-vmss000001
    
  2. Ejecute el comando systemctl para comprobar el estado del servicio SSH.

    systemctl status ssh
    

Si SSH está deshabilitado, la salida de ejemplo siguiente muestra los resultados:

ssh.service - OpenBSD Secure Shell server
     Loaded: loaded (/lib/systemd/system/ssh.service; disabled; vendor preset: enabled)
     Active: inactive (dead) since Wed 2024-01-03 15:36:57 UTC; 20min ago

Si SSH está habilitado, la salida de ejemplo siguiente muestra los resultados:

ssh.service - OpenBSD Secure Shell server
     Loaded: loaded (/lib/systemd/system/ssh.service; enabled; vendor preset: enabled)
     Active: active (running) since Wed 2024-01-03 15:40:20 UTC; 19min ago

Pasos siguientes

Para ayudar a solucionar cualquier problema con la conectividad SSH a los nodos de clústeres, puede ver los registros de kubelet o ver los registros del nodo maestro de Kubernetes.