En esta página, se explica cómo rotar las credenciales de tu clúster de GKE. Planificar y rotar periódicamente las credenciales del clúster es fundamental para mantener los clústeres en buen estado. En esta página, aprenderás a realizar rotaciones de credenciales. También aprenderás sobre las prácticas recomendadas para planificar rotaciones periódicas.
Esta página está dirigida a los especialistas en seguridad responsables del ciclo de vida de las credenciales en los clústeres de GKE. Para obtener más información sobre los roles comunes y las tareas de ejemplo a las que hacemos referencia en el contenido de Google Cloud , consulta Roles y tareas comunes de los usuarios de 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.
La vida útil de las credenciales de tu clúster depende de cuándo creaste el clúster o cuándo rotaste tus credenciales por última vez. Para obtener más detalles, consulta la vida útil de las credenciales.
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 volver a crear los nodos para usar credenciales nuevas. Debes iniciar y finalizar una rotación de credenciales para el 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 rotaciones de credenciales con regularidad y antes de la fecha de vencimiento actual de la credencial. Las rotaciones de credenciales requieren que se vuelva a crear el nodo para usar las credenciales nuevas, lo que podría 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.
Para obtener más información sobre cómo la disponibilidad del mantenimiento afecta la rotación de credenciales del clúster y qué tipo de interrupción experimenta tu clúster durante los pasos de una rotación, consulta la fila de rotación de credenciales en la tabla de cambios manuales que recrean los nodos con una estrategia de actualización de nodos y respetan las políticas de mantenimiento. GKE depende de la disponibilidad de recursos para actualizar los nodos. Para obtener más información sobre las actualizaciones de nodos, consulta Planificación de interrupciones por actualizaciones de nodos.
Duración de las credenciales del clúster
Por lo general, la vida útil de las credenciales del clúster depende de cuándo se creó el clúster o cuándo se rotaron las credenciales por última vez:
- Los clústeres creados antes de octubre de 2021, aproximadamente, tienen un ciclo de vida de la CA de 5 años.
- Los clústeres creados después de octubre de 2021, aproximadamente, tienen un ciclo de vida de la CA de 30 años.
- Los clústeres rotados después de enero de 2022, aproximadamente, tienen un ciclo de vida de la CA de 30 años.
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. Una vez que se complete la rotación de credenciales, pueden transcurrir hasta 36 horas para que se resuelvan las estadísticas y las recomendaciones.
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, la CA de tu clúster vence el 6 de enero de 2024 y no rotas tus credenciales antes del 5 de diciembre de 2023. GKE inicia 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 comienza 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:
- Por lo general, las rotaciones automáticas respetan los períodos de mantenimiento o las exclusiones de mantenimiento. Sin embargo, GKE se reserva el derecho de realizar los pasos necesarios para rotar las credenciales dentro de los 30 días previos al vencimiento, independientemente de la disponibilidad del mantenimiento. En un plazo de 30 días, GKE ignora la disponibilidad de mantenimiento para el primer paso, que es iniciar la rotación.
- Si la disponibilidad de mantenimiento impide que GKE complete la rotación inicialmente, GKE seguirá intentando completar la rotación hasta la fecha de vencimiento de las credenciales, después de la cual el clúster se volverá irrecuperable.
- 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 que usen las credenciales nuevas.
- Las recreaciones de grupos de nodos durante la rotación pueden causar interrupciones en las cargas de trabajo en ejecución.
Antes de comenzar
Antes de comenzar, asegúrate de haber realizado las siguientes tareas:
- Habilita la API de Google Kubernetes Engine. Habilitar la API de Google Kubernetes Engine
- Si deseas usar Google Cloud CLI para esta tarea, instala y, luego, inicializa gcloud CLI. Si ya instalaste gcloud CLI, ejecuta el comando
gcloud components update
para obtener la versión más reciente. Es posible que las versiones anteriores de gcloud CLI no admitan la ejecución de los comandos que se describen en este documento.
- Asegúrate de tener un clúster de Autopilot o Standard existente. Si necesitas uno, crea un clúster de Autopilot.
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 \
--location LOCATION \
--format "value(masterAuth.clusterCaCertificate)" \
| base64 --decode \
| openssl x509 -noout -dates
El resultado es similar a este:
notBefore=Mar 17 16:45:34 2023 GMT
notAfter=Mar 9 17:45:34 2053 GMT
Si ejecutas este comando después de iniciar una rotación de credenciales, el resultado será la vida útil de tu certificado original. Este certificado seguirá siendo válido hasta que completes la rotación. Después de completar la rotación, el resultado será la vida útil de tu nuevo certificado.
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 \
--format="value(name,masterAuth.clusterCaCertificate)" | \
while read -r cluster ca; do \
expiry_date=$(echo -e "$ca" | base64 --decode | openssl x509 -noout -enddate | awk -F'=' '{print $2}'); \
printf "%-40s | %s\n" "$cluster" "$expiry_date" ; \
done | \
column -t | \
awk -F',' 'BEGIN{print "Cluster Name | Certificate Expiry Date"} {print}'
Realiza una rotación de credenciales
Cualquier rotación de credenciales implica los siguientes pasos:
- 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.
- 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. También puedes volver a crear los nodos de forma manual si realizas una actualización de la versión del nodo a la misma versión de GKE que los nodos ya ejecutan.
- 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. - 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.
Cuando inicias una rotación de credenciales o cuando GKE inicia automáticamente una rotación, GKE realiza estos pasos automáticamente, incluido el intento de completar la rotación. En cada paso, si la fecha de vencimiento del clúster es posterior a 30 días, GKE respeta la disponibilidad de mantenimiento. Durante las rotaciones automáticas antes del vencimiento del clúster, GKE se reserva el derecho de ignorar la disponibilidad de mantenimiento para evitar que el clúster se vuelva irrecuperable. En un plazo de 30 días, GKE ignorará la disponibilidad de mantenimiento para el primer paso, que es iniciar la rotación.
Si no completas una rotación de credenciales en un plazo de siete días desde su inicio, GKE intenta completarla por ti. Si alguno de los nodos del clúster sigue usando las credenciales anteriores, la operación de finalización automática fallará, pero GKE seguirá intentando la finalización hasta que venzan las credenciales y el clúster se vuelva irrecuperable. Debes planificar realizar un seguimiento manual y completar las rotaciones de credenciales que inicies. Para anular los bloqueadores de disponibilidad de mantenimiento, ejecuta los comandos de cada una de las siguientes secciones para activar manualmente esas fases del proceso de rotación. No dependas de la finalización automática, que es la mejor medida de esfuerzo.
Inicia la rotación
Para iniciar una rotación de credenciales, ejecuta el siguiente comando:
gcloud container clusters update CLUSTER_NAME \
--location LOCATION \
--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 impiden que GKE vuelva a crear algunos nodos durante este período de siete días, la rotación de credenciales no se completará inicialmente. Sin embargo, GKE seguirá intentando recrear los nodos y completar la rotación hasta que la disponibilidad de mantenimiento le permita continuar. Durante eventos importantes, como Google Cloud Next, GKE también puede pausar las recreaciones automáticas de nodos para que no experimentes interrupciones.
Si usas exclusiones de mantenimiento o períodos de mantenimiento que podrían provocar una rotación con errores, fuerza a GKE a volver a crear los nodos realizando uno de los siguientes pasos:
En los clústeres de Autopilot, actualiza el plano de control de forma manual:
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.En los clústeres Standard, actualiza cada grupo de nodos de forma manual.
Para obtener más información, consulta Cambios manuales que respetan las políticas de mantenimiento de GKE.
Comprueba el progreso de la recreación del grupo de nodos
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.
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 \
--location LOCATION
Actualiza las credenciales de la cuenta de servicio de Kubernetes
Si usas credenciales estáticas para las ServiceAccounts en el clúster, cambia a credenciales de corta duración. Si completas la rotación, se invalidarán 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 ServiceAccounts en el clúster antes de completar la rotación.
Para encontrar credenciales estáticas de ServiceAccount que existen en tu clúster, ejecuta el siguiente comando:
kubectl get secrets --all-namespaces --field-selector type=kubernetes.io/service-account-token
Si el resultado de este comando es No resources found
, tu clúster no tiene credenciales estáticas de ServiceAccount.
Actualiza direcciones IP codificadas y reglas de firewall
Si codificaste la dirección IP del plano de control en tu entorno o si tienes reglas de firewall que se orientan a la dirección IP del plano de control, actualiza las direcciones a la nueva dirección IP. Si completas la rotación sin actualizar las direcciones IP en las aplicaciones y en las reglas de firewall, esos recursos podrían experimentar interrupciones cuando GKE deja de entregar en la dirección IP del plano de control anterior.
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 \
--location=LOCATION \
--complete-credential-rotation
Si la rotación de credenciales no se completa y muestra un mensaje de error similar al siguiente, consulta Error 400: El grupo de nodos requiere recreación:
ERROR: (gcloud.container.clusters.update) ResponseError: code=400, message=Node pool "test-pool-1" requires recreation.
GKE respeta la disponibilidad de mantenimiento cuando completa la rotación de forma automática. Sin embargo, GKE podría ignorar esta disponibilidad dentro de los 30 días posteriores al vencimiento para evitar que el clúster se vuelva irrecuperable. Si la finalización de la rotación falla inicialmente y la rotación comenzó hace al menos siete días, GKE intentará completar la rotación hasta la fecha en que venzan las credenciales, después de lo cual el clúster será irrecuperable.
¿Qué sigue?
- Obtén más información sobre el objeto secreto de Kubernetes.
- Obtén más información para solucionar problemas relacionados con GKE.