Cifrado de secretos
Configuración de cifrado de secretos
RKE2 soporta la encriptación de secretos en reposo, y hará lo siguiente automáticamente:
-
Generar una clave AES-CBC.
-
Generar un archivo de configuración de cifrado con la clave generada.
-
Pasar la configuración al APIServer de Kubernetes como configuración-proveedor-de-cifrado.
Elegir Proveedor de Cifrado
|
Puerta de Versión
Disponible a partir de las versiones de abril de 2025: v1.30.12+rke2r1, v1.31.8+rke2r1, v1.32.4+rke2r1, v1.33.0+rke2r1. |
|
Conformidad con FIPS
La conformidad con FIPS 140-3 solo está disponible con el |
Usando la --secrets-encryption-provider bandera, puedes elegir qué proveedor de cifrado utilizar. El valor por defecto es aescbc.
RKE2 soporta los siguientes proveedores de cifrado:
-
aescbc: AES-CBC con relleno PKCS#7 -
secretbox: XSalsa20 y Poly1305
Migrando Proveedores
Puedes migrar del proveedor aescbc al proveedor secretbox siguiendo estos pasos:
-
Asegúrate de que el
secretboxproveedor sea compatible con tu versión de RKE2. -
Actualiza/Añade la
secrets-encryption-providerbandera en tu archivo de configuración de RKE2 asecretbox. -
Rotar las claves de cifrado, siguiendo la [Encryption Key Rotation] sección a continuación.
Archivo de configuración de cifrado generado
A continuación se muestra un ejemplo del archivo de configuración de cifrado que RKE2 genera con el aescbc proveedor por defecto:
#/var/lib/rancher/rke2/server/cred/encryption-config.json
{
"kind": "EncryptionConfiguration",
"apiVersion": "apiserver.config.k8s.io/v1",
"resources": [
{
"resources": [
"secrets"
],
"providers": [
{
"aescbc": {
"keys": [
{
"name": "aescbckey",
"secret": "xxxxxxxxxxxxxxxxxxx"
}
]
}
},
{
"identity": {}
}
]
}
]
}
Herramienta de Encriptación de Secretos
RKE2 contiene un subcomando secrets-encrypt, que permite a los administradores realizar las siguientes tareas:
-
Añadir nuevas claves de encriptación
-
Rotar y eliminar claves de encriptación
-
Reencriptar secretos
|
No seguir el procedimiento adecuado al rotar las claves de cifrado de secretos puede causar pérdida de datos permanente. Se recomienda crear una instantánea antes de rotar. Procede con precaución. |
Rotación de Claves de Encriptación
|
Puerta de Versión
Disponible a partir de las versiones de septiembre de 2024: v1.29.9+rke2r1, v1.30.5+rke2r1, v1.31.1+rke2r1. |
Para versiones anteriores, consulta [Encryption Key Rotation Classic].
-
Servidor Único
-
Alta disponibilidad
Para rotar las claves de encriptación de secretos en un clúster de servidor único:
-
Rotar las claves de cifrado de secretos.
rke2 secrets-encrypt rotate-keys -
Espera a que termine la reencriptación. Observa los registros del servidor, o espera a:
$ rke2 secrets-encrypt status Encryption Status: Enabled Current Rotation Stage: reencrypt_finished
Para rotar las claves de encriptación de secretos en configuraciones de alta disponibilidad:
|
En este ejemplo, se utilizan 3 servidores para un clúster de alta disponibilidad, denominados S1, S2, S3. Se recomienda que elijas un nodo de servidor desde el cual ejecutar los |
-
Rotar las claves de cifrado de secretos en S1.
rke2 secrets-encrypt rotate-keys -
Espera a que termine la reencriptación. Observa los registros del servidor, o espera a:
$ rke2 secrets-encrypt status Encryption Status: Enabled Current Rotation Stage: reencrypt_finished -
Reinicia secuencialmente RKE2 en S1, S2, S3.
systemctl restart rke2-server.serviceEspera a que el comando systemctl termine antes de reiniciar el siguiente servidor.
Rotación de claves de cifrado clásica
|
Nuevo procedimiento
Si utilizas versiones de RKE2 más nuevas que v1.30.1+rke2r1, te recomendamos usar el [Encryption Key Rotation] en su lugar. |
-
Servidor Único
-
Alta disponibilidad
Para rotar las claves de cifrado de secretos en un clúster de nodo único:
-
Preparar:
rke2 secrets-encrypt prepare -
Reinicia el
kube-apiserverpod:# Get the kube-apiserver container ID export CONTAINER_RUNTIME_ENDPOINT="unix:///var/run/k3s/containerd/containerd.sock" crictl ps --name kube-apiserver # Stop the pod crictl stop <CONTAINER_ID> -
Rotar:
rke2 secrets-encrypt rotate -
Reinicia el
kube-apiserverpod de nuevo. -
Reencriptar:
rke2 secrets-encrypt reencrypt
Para rotar las claves de encriptación de secretos en configuraciones de alta disponibilidad:
|
En este ejemplo, se utilizan 3 servidores para un clúster de alta disponibilidad, denominados S1, S2, S3. Aunque no es obligatorio, se recomienda que elijas un nodo de servidor desde el cual ejecutar los comandos |
-
Preparar en S1.
rke2 secrets-encrypt prepare -
Reinicia secuencialmente S1, S2, S3.
systemctl restart rke2-server.serviceEspera a que el comando systemctl termine antes de reiniciar el siguiente servidor.
-
Rotar en S1.
rke2 secrets-encrypt rotate
-
Reinicia secuencialmente S1, S2, S3.
-
Reencriptar en S1.
rke2 secrets-encrypt reencryptEspera hasta que la reencriptación haya finalizado, ya sea mediante los registros del servidor
journalctl -u rke2-serverorke2 secrets-encrypt status. El estado devolveráreencrypt_finishedcuando se complete. -
Reinicia secuencialmente S1, S2, S3.
Estado de encriptación de secretos
El secrets-encrypt status subcomando muestra información sobre el estado actual del cifrado de secretos en el nodo.
Un ejemplo del comando en un nodo de un solo servidor:
$ rke2 secrets-encrypt status
Encryption Status: Enabled
Current Rotation Stage: start
Server Encryption Hashes: All hashes match
Active Key Type Name
------ -------- ----
* AES-CBC aescbckey
Otro ejemplo en un clúster de alta disponibilidad, después de rotar las claves, pero antes de reiniciar los servidores:
$ rke2 secrets-encrypt status
Encryption Status: Enabled
Current Rotation Stage: rotate
Server Encryption Hashes: hash does not match between node-1 and node-2
Active Key Type Name
------ -------- ----
* AES-CBC aescbckey-2021-12-10T22:54:38Z
AES-CBC aescbckey
Los detalles de cada sección son los siguientes:
-
Estado de cifrado: Se muestra si la encriptación de secretos está deshabilitada o habilitada en el nodo
-
Etapa de rotación actual: Indica la etapa de rotación actual en el nodo. Las etapas son:
start,prepare,rotate,reencrypt_request,reencrypt_active,reencrypt_finished -
Hashes de cifrado del servidor: Útil para clústeres HA, esto indica si todos los servidores están en la misma etapa con sus archivos locales. Esto se puede usar para identificar si se requiere un reinicio de los servidores antes de proceder a la siguiente etapa. En el ejemplo de HA anterior, el nodo-1 y el nodo-2 tienen hashes diferentes, lo que indica que actualmente no tienen la misma configuración de encriptación. Reiniciar los servidores sincronizará su configuración.
| Tabla de claves | Descripción |
|---|---|
Activo |
El |
Tipo de clave |
RKE2 solo admite el |
Nombre |
Nombre de la clave de encriptación. El valor por defecto es |