Este documento ha sido traducido utilizando tecnología de traducción automática. Si bien nos esforzamos por proporcionar traducciones precisas, no ofrecemos garantías sobre la integridad, precisión o confiabilidad del contenido traducido. En caso de discrepancia, la versión original en inglés prevalecerá y constituirá el texto autorizado.

k3s secrets-encrypt

K3s admite la habilitación de la encriptación de secretos en reposo. Para más información, consulta Encriptación de Secretos.

Herramienta de Encriptación de Secretos

Puerta de Versión

Disponible a partir de v1.21.8+k3s1

K3s contiene una herramienta CLI secrets-encrypt, que permite el control automático sobre lo siguiente:

  • Deshabilitar/Habilitar la encriptación de secretos

  • Añadir nuevas claves de encriptación

  • Rotar y eliminar claves de encriptación

  • Reencriptar secretos

No seguir el procedimiento adecuado para rotar las claves de encriptación puede dejar tu clúster permanentemente dañado. 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.30.5+k3s1, v1.31.1+k3s1.

  • Servidor Único

  • Alta disponibilidad

Para rotar las claves de encriptación de secretos en un clúster de servidor único:

  1. Inicia el servidor K3s con la bandera --secrets-encryption

    Iniciar K3s sin encriptación y habilitarlo en un momento posterior no está actualmente soportado.

  2. Rotar las claves de encriptación de secretos

    k3s secrets-encrypt rotate-keys
  3. Espera a que termine la reencriptación. Observa los registros del servidor, o espera a:

    $ k3s 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:

  1. Inicia los tres servidores K3s con la bandera --secrets-encryption. Por brevedad, los servidores se denominarán S1, S2, S3.

    Iniciar K3s sin encriptación y habilitarlo en un momento posterior no está actualmente soportado.

  2. Rotar las claves de encriptación de secretos en S1

    k3s secrets-encrypt rotate-keys
  3. Espera a que termine la reencriptación. Observa los registros del servidor, o espera a:

    $ k3s secrets-encrypt status
    Encryption Status: Enabled
    Current Rotation Stage: reencrypt_finished

    K3s reencriptará ~5 secretos por segundo. Los clústeres con un gran número de secretos pueden tardar varios minutos en reencriptarse. Puedes seguir el progreso en los registros del servidor.

  4. Reinicia K3s en S1 con los mismos argumentos. Si ejecutas K3s como un servicio:

    # If using systemd
    systemctl restart k3s
    # If using openrc
    rc-service k3s restart
  5. Una vez que S1 esté en funcionamiento, reinicia K3s en S2 y S3

Rotación de claves de encriptación heredadas

Nuevo procedimiento

Si utilizas versiones de K3s v1.30+, recomendamos usar la Rotación de Claves de Encriptación en su lugar.

  • Servidor Único

  • Alta disponibilidad

Para rotar las claves de encriptación de secretos en un clúster de servidor único:

  1. Inicia el servidor K3s con la bandera --secrets-encryption

    Iniciar K3s sin encriptación y habilitarlo en un momento posterior no está actualmente soportado.

  2. Preparación

    k3s secrets-encrypt prepare
  3. Mata y reinicia el servidor K3s con los mismos argumentos. Si ejecutas K3s como un servicio:

    # If using systemd
    systemctl restart k3s
    # If using openrc
    rc-service k3s restart
  4. Rotar

    k3s secrets-encrypt rotate
  5. Mata y reinicia el servidor K3s con los mismos argumentos

  6. Reencriptar

    K3s reencriptará ~5 secretos por segundo.
    Los clústeres con un gran número de secretos pueden tardar varios minutos en reencriptarse.

    k3s secrets-encrypt reencrypt

Los pasos son los mismos tanto para las bases de datos embebidas como para los clústeres de bases de datos externas.

Para rotar las claves de encriptación de secretos en configuraciones de alta disponibilidad:

  1. Inicia los tres servidores K3s con la bandera --secrets-encryption. Por brevedad, los servidores se denominarán S1, S2, S3.

    • Iniciar K3s sin encriptación y habilitarlo en un momento posterior no está actualmente soportado.

    • Aunque no es obligatorio, se recomienda que elijas un nodo de servidor desde el cual ejecutar los comandos secrets-encrypt.

  2. Preparar en S1

    k3s secrets-encrypt prepare
  3. Matar y reiniciar S1 con los mismos argumentos. Si ejecutas K3s como un servicio:

    # If using systemd
    systemctl restart k3s
    # If using openrc
    rc-service k3s restart
  4. Una vez que S1 esté en funcionamiento, matar y reiniciar S2 y S3

  5. Rotar en S1

    k3s secrets-encrypt rotate
  6. Matar y reiniciar S1 con los mismos argumentos

  7. Una vez que S1 esté en funcionamiento, matar y reiniciar S2 y S3

  8. Reencriptar en S1

    K3s reencriptará ~5 secretos por segundo.
    Los clústeres con un gran número de secretos pueden tardar varios minutos en reencriptarse.

    k3s secrets-encrypt reencrypt
  9. Matar y reiniciar S1 con los mismos argumentos

  10. Una vez que S1 esté en funcionamiento, matar y reiniciar S2 y S3

Desactivar/volver a activar la encriptación de secretos

  • Servidor Único

  • Alta disponibilidad

Después de lanzar un servidor con la bandera --secrets-encryption, se puede desactivar la encriptación de secretos.

Para desactivar la encriptación de secretos en un clúster de un solo nodo:

  1. Desactivar

    k3s secrets-encrypt disable
  2. Mata y reinicia el servidor K3s con los mismos argumentos. Si ejecutas K3s como un servicio:

    # If using systemd
    systemctl restart k3s
    # If using openrc
    rc-service k3s restart
  3. Reencriptar con banderas

    k3s secrets-encrypt reencrypt --force --skip

Para volver a activar la encriptación de secretos en un clúster de un solo nodo:

  1. Habilitar

    k3s secrets-encrypt enable
  2. Mata y reinicia el servidor K3s con los mismos argumentos

  3. Reencriptar con banderas

    k3s secrets-encrypt reencrypt --force --skip

Después de lanzar un clúster de alta disponibilidad con las banderas --secrets-encryption, se puede desactivar la encriptación de secretos.

Aunque no es obligatorio, se recomienda que elijas un nodo de servidor desde el cual ejecutar los comandos secrets-encrypt.

Por brevedad, los tres servidores utilizados en esta guía se denominarán S1, S2, S3.

Para desactivar la encriptación de secretos en un clúster de alta disponibilidad:

  1. Desactivar en S1

    k3s secrets-encrypt disable
  2. Matar y reiniciar S1 con los mismos argumentos. Si ejecutas K3s como un servicio:

    # If using systemd
    systemctl restart k3s
    # If using openrc
    rc-service k3s restart
  3. Una vez que S1 esté en funcionamiento, matar y reiniciar S2 y S3

  4. Reencriptar con banderas en S1

    k3s secrets-encrypt reencrypt --force --skip

Para volver a activar la encriptación de secretos en un clúster de alta disponibilidad:

  1. Habilitar en S1

    k3s secrets-encrypt enable
  2. Matar y reiniciar S1 con los mismos argumentos

  3. Una vez que S1 esté en funcionamiento, matar y reiniciar S2 y S3

  4. Reencriptar con banderas en S1

    k3s secrets-encrypt reencrypt --force --skip

Estado de encriptación de secretos

La herramienta de encriptación de secretos incluye un comando status que muestra información sobre el estado actual de la encriptación de secretos en el nodo.

Un ejemplo del comando en un nodo de un solo servidor:

$ k3s 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:

$ k3s 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 encriptación: 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

  • Hash de encriptación 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: Resume la información sobre las claves de encriptación de secretos encontradas en el nodo.

    • Activo: El "*" indica cuáles, si los hay, de las claves se utilizan actualmente para la encriptación de secretos. Una clave activa es utilizada por Kubernetes para cifrar cualquier nuevo secreto.

    • Tipo de clave: Todas las claves que utilizan esta herramienta son de tipo AES-CBC. Consulta más información aquí.

    • Nombre: Nombre de la clave de encriptación.