Rota las credenciales del clúster


En esta página, se explica cómo realizar una rotación de credenciales en clústeres de Google Kubernetes Engine (GKE).

Acerca de las rotaciones de credenciales en GKE

La autoridad de certificación (AC) raíz del clúster tiene una vida útil limitada. Cuando la AC vence, cualquier credencial que haya firmado la AC ya no es válida, incluido el certificado de cliente del clúster (del campo de la API MasterAuth), la clave y el certificado del servidor de la API. y los certificados de cliente de kubelet. Para obtener más información, consulta Vida útil de la AC raíz del clúster.

Puedes realizar una rotación de credenciales para revocar y generar credenciales nuevas para tu clúster. Esta operación rota la clave privada de CA del clúster y requiere que los nodos se vuelvan a crear para usar credenciales nuevas. Debes iniciar y finalizar una rotación de credenciales para tu clúster antes de que venzan las credenciales actuales. Además de rotar las credenciales, la rotación de credenciales también realiza una rotación de IP.

Cuándo realizar una rotación de credenciales

Debes realizar las rotaciones de credenciales con regularidad y antes de la fecha de vencimiento actual de la credencial. Las rotaciones de credenciales requieren la recreación de nodos para usar las credenciales nuevas, lo que puede ser perjudicial para ejecutar cargas de trabajo. Planifica los períodos de mantenimiento y realiza las rotaciones durante estos períodos para evitar el tiempo de inactividad inesperado de la carga de trabajo o los clientes de API que no responden fuera del clúster.

Busca clústeres con credenciales vencidas o por vencer

Si las credenciales de tu clúster vencerán en los siguientes 180 días o si ya vencieron, GKE entrega orientación con una estadística y recomendación para explicar que debes realizar una rotación de credenciales para este clúster. Esta orientación incluye la fecha de vencimiento de las credenciales. Puedes ver esta orientación en la consola de Google Cloud. También puedes verla con gcloud CLI o la API de Recommender si especificas el subtipo CLUSTER_CA_EXPIRATION.

Si recibes una estadística y una recomendación para un clúster, debes realizar una rotación de credenciales o GKE iniciará una rotación de credenciales de forma automática dentro de los 30 días anteriores a la fecha de vencimiento de la AC actual, como se explica en la siguiente sección.

Política de automatización de GKE para evitar interrupciones del clúster

Para evitar que tu clúster entre en un estado irrecuperable en caso de que se venzan tus credenciales actuales , GKE inicia una rotación de credenciales de forma automática dentro de los 30 días posteriores a la fecha de vencimiento de tu CA actual. Por ejemplo, si la AC de tu clúster vence el 6 de enero de 2024 y no rotas tus credenciales antes del 5 de diciembre de 2023, GKE iniciará una rotación automática el 7 de diciembre de 2023 o después y completa esta rotación siete días después de que comience la operación. Esta rotación automática es un intento de último recurso para evitar una interrupción del clúster y tiene las siguientes consideraciones:

  • Las rotaciones automáticas ignoran los períodos de mantenimiento configurados o las exclusiones de mantenimiento
  • Cuando se completa la rotación de credenciales, se revocan las credenciales vencidas. Los clientes de la API de Kubernetes fuera del clúster, como kubectl en entornos locales, no funcionarán hasta que configures los clientes para usar las credenciales nuevas.
  • Las recreaciones de grupos de nodos durante la rotación pueden causar interrupciones en las cargas de trabajo en ejecución.

Las rotaciones automáticas iniciadas por GKE son una medida de último recurso de prevención de la interrupción. No dependas solo de estas rotaciones automáticas, ya que son una medida de emergencia preventiva para evitar interrupciones completas.

Antes de comenzar

Antes de comenzar, asegúrate de haber realizado las siguientes tareas:

  • Habilita la API de Kubernetes Engine de Google.
  • Habilitar la API de Kubernetes Engine de Google
  • Si deseas usar Google Cloud CLI para esta tarea, instala y, luego, inicializa gcloud CLI. Si ya instalaste gcloud CLI, ejecuta gcloud components update para obtener la versión más reciente.

Comprueba el ciclo de vida de la credencial

Te recomendamos que verifiques la vida útil de la credencial antes y después de realizar una rotación de credenciales para que conozcas la validez de la CA de raíz del clúster.

Para verificar el ciclo de vida de la credencial de un solo clúster, ejecuta el siguiente comando:

gcloud container clusters describe CLUSTER_NAME \
    --region REGION_NAME \
    --format "value(masterAuth.clusterCaCertificate)" \
    | base64 --decode \
    | openssl x509 -noout -dates

El resultado es similar al siguiente:

notBefore=Mar 17 16:45:34 2023 GMT
notAfter=Mar  9 17:45:34 2053 GMT

Para verificar el ciclo de vida de la credencial de todos los clústeres de un proyecto, ejecuta el siguiente comando:

gcloud container clusters list --project PROJECT_ID \
    | awk 'NR>1 {print "echo; echo Validity for cluster " $1 " in location " $2 ":;\
         gcloud container clusters describe --project PROJECT_ID " $1 " --location " $2 " \
         --format \"value(masterAuth.clusterCaCertificate)\" \
         | base64 --decode | openssl x509 -noout -dates"}' \
    | bash

Realiza una rotación de credenciales

La rotación de credenciales implica los siguientes pasos:

  1. Inicia la rotación: el plano de control comienza a entregar en una nueva dirección IP, además de hacerlo en la dirección IP original. Se generan credenciales nuevas en las cargas de trabajo y el plano de control.
  2. Volver a crear los nodos: GKE vuelve a crear los nodos del clúster para que los nodos usen la dirección IP y credenciales nuevas, y respeten la disponibilidad desde el período de mantenimiento y las exclusiones.
  3. Actualiza clientes de la API: después de iniciar la rotación, actualiza cualquier cliente de la API del clúster, como las máquinas de desarrollo que usan kubectl, para comunicarse con el plano de control mediante la nueva dirección IP.
  4. Completa la rotación: el plano de control deja de entregar tráfico en la dirección IP original. Las credenciales antiguas se revocan, incluidas las credenciales estáticas existentes para las cuentas de servicio de Kubernetes.

Inicia la rotación

Para iniciar una rotación de credenciales, ejecuta el siguiente comando:

gcloud container clusters update CLUSTER_NAME \
    --region REGION_NAME \
    --start-credential-rotation

Este comando crea credenciales nuevas, las emite al plano de control y configura el plano de control para que entregue en dos direcciones IP: la dirección IP original y una nueva.

Vuelve a crear los nodos

Después de configurar el servidor de API para entregar en una dirección IP nueva, GKE actualiza tus nodos de forma automática para que usen la dirección IP y credenciales nuevas si hay disponibilidad de mantenimiento. GKE actualiza todos tus nodos a la misma versión de GKE que los nodos ya ejecutan, lo que vuelve a crear los nodos. Para obtener más información, consulta Actualizaciones del grupo de nodos.

De forma predeterminada, GKE completa automáticamente las rotaciones de credenciales siete días después de iniciar la operación. Si un período de mantenimiento o una exclusión activos en tu clúster impide que GKE vuelva a crear algunos nodos durante este período de siete días, la rotación de credenciales no se completará.

  • Si usas exclusiones de mantenimiento o períodos de mantenimiento que podrían provocar una rotación con errores, actualiza el clúster de forma manual para forzar la recreación de nodos:

    gcloud container clusters upgrade CLUSTER_NAME \
        --location=LOCATION \
        --cluster-version=VERSION
    

    Reemplaza VERSION por la misma versión de GKE que el clúster ya usa.

    Si deseas obtener más información, consulta Advertencias para los períodos de mantenimiento.

Comprueba el progreso de la recreación del grupo de nodos

  1. Para supervisar la operación de rotación, ejecuta el siguiente comando:

    gcloud container operations list \
        --filter="operationType=UPGRADE_NODES AND status=RUNNING" \
        --format="value(name)"
    

    Este comando muestra el ID de la operación de la operación de actualización del nodo.

  2. Para sondear la operación, pasa el ID de la operación al siguiente comando:

    gcloud container operations wait OPERATION_ID
    

Los grupos de nodos se recrean uno a uno, y cada cual tiene su propia operación. Si tienes varios grupos de nodos, usa estas instrucciones para sondear cada operación.

Actualiza clientes de la API

Después de iniciar la rotación de credenciales, debes actualizar todos los clientes de la API fuera del clúster (como kubectl en máquinas de desarrollador) para usar las credenciales nuevas y apuntar a la dirección IP nueva del plano de control.

A fin de actualizar los clientes de API, ejecuta el siguiente comando para cada cliente:

gcloud container clusters get-credentials CLUSTER_NAME \
    --region REGION_NAME

Actualiza las credenciales de la cuenta de servicio de Kubernetes

Si usas credenciales estáticas para las cuentas de servicio en el clúster, cambia a las credenciales de corta duración. Si se completa la rotación, se invalidan las credenciales de ServiceAccount existentes. Si no deseas usar credenciales de corta duración, asegúrate de volver a crear tus credenciales estáticas para todas las cuentas de servicio en el clúster después de completar la rotación.

Completa la rotación

Después de actualizar los clientes de la API fuera del clúster, completa la rotación a fin de configurar el plano de control para que solo entregue con las credenciales y la dirección IP nuevas:

gcloud container clusters update CLUSTER_NAME \
    --region=REGION_NAME \
    --complete-credential-rotation

Si la rotación de credenciales no se completa y muestra un mensaje de error similar al siguiente, consulta solución de problemas:

ERROR: (gcloud.container.clusters.update) ResponseError: code=400, message=Node pool "test-pool-1" requires recreation.

¿Qué sigue?