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 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:
- 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.
Instale la extensión aks-preview mediante el comando
az extension add
.az extension add --name aks-preview
Actualiza a la última versión de la extensión mediante el comando
az extension update
.az extension update --name aks-preview
Para usar la característica SSH Deshabilitar, siga estos pasos para registrarla y habilitarla en la suscripción.
Registre la marca de características de
DisableSSHPreview
mediante el comandoaz feature register
.az feature register --namespace "Microsoft.ContainerService" --name "DisableSSHPreview"
Tarda unos minutos en que el estado muestre Registrado.
Comprobar el estado del registro mediante el comando
az feature show
.az feature show --namespace "Microsoft.ContainerService" --name "DisableSSHPreview"
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
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
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.
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. Deshabilitar SSH solo es compatible con conjuntos de nodos Virtual Machine Scale Sets.
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.
Nota
Al deshabilitar SSH en el nivel de clúster, se aplica a todos los grupos de nodos existentes. Los grupos de nodos creados después de esta operación tendrán SSH habilitado de forma predeterminada y tendrá que volver a ejecutar estos comandos para deshabilitarlo.
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.
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.
Nota
En un clúster recién creado, deshabilitar ssh solo configurará el grupo de nodos del primer sistema. Todos los demás grupos de nodos se deben configurar en el nivel de grupo de nodos.
az aks create --resource-group myResourceGroup --name 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"
},
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 --resource-group myResourceGroup --name 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.
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"
},
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
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 --resource-group myResourceGroup --name 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.
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.
Siga estos pasos para usar node-shell en un nodo e inspeccionar el estado del servicio SSH mediante systemctl
.
Obtenga un shell de Bash estándar mediante la ejecución del comando
kubectl node-shell <node>
.kubectl node-shell aks-nodepool1-20785627-vmss000001
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
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.
Comentarios de Azure Kubernetes Service
Azure Kubernetes Service es un proyecto de código abierto. Seleccione un vínculo para proporcionar comentarios: