De forma predeterminada, los nodos de Google Kubernetes Engine (GKE) usan el proceso kubelet en cada nodo para registrar objetos de nodo con el servidor de la API de Kubernetes. En este documento, se muestra
cómo evitar este
registro automático
para los nodos de GKE protegidos y, en su lugar, requerir que un componente confiable del plano de control de GKE realice operaciones de registro. Los ingenieros de seguridad y los administradores de la plataforma pueden usar la creación de nodos del plano de control para limitar los privilegios de los nodos.
Ya deberías estar familiarizado con los siguientes conceptos:
- Nodos de Kubernetes
- Nodos de GKE protegidos
- Bootstrap de TLS
- Registro de nodos con la API de Kubernetes
Modos de creación de nodos en GKE
Los nodos de GKE protegidos, que están habilitados en todos los clústeres de GKE, aplican la verificación criptográfica de las identidades de los nodos durante el proceso de registro de nodos. Esta verificación ayuda a garantizar que solo los nodos legítimos puedan registrarse con el servidor de la API de Kubernetes y ejecutar cargas de trabajo.
El flujo de trabajo de registro predeterminado para los clústeres de GKE, en el que el kubelet de cada nodo crea y modifica su objeto Node en el servidor de la API, crea un riesgo si un nodo está vulnerado. Por ejemplo, en
CVE-2025-5187, una vulnerabilidad
permitía a los usuarios de nodos borrar los objetos Node correspondientes y registrar
nodos vulnerados.
Creación de nodos del plano de control
En la versión 1.35.3-gke.1189000 y posteriores de GKE, puedes requerir de forma opcional un componente confiable del plano de control de GKE llamado gcp-controller-manager para crear objetos Node en lugar de permitir que el kubelet registre los nodos por sí mismo. Después de que el kubelet configura una conexión TLS con el servidor de la API mediante la identidad del nodo verificada de forma criptográfica, el componente gcp-controller-manager crea el objeto Node. Un controlador de admisión rechaza cualquier solicitud del kubelet para crear el objeto Node. Si usas el componente del plano de control para crear objetos Node, puedes reducir el riesgo de que un nodo potencialmente vulnerado cree objetos Node arbitrarios o manipule su especificación Node.
Para cambiar el comportamiento predeterminado de creación y registro de nodos, haz una de las siguientes acciones cuando crees un clúster estándar o de Autopilot:
- Google Cloud CLI: Especifica un valor de
CONTROL_PLANEen la marca--node-creation-mode. - API de Kubernetes Engine: Especifica un valor de
VIA_CONTROL_PLANEen el camponode-creation-modedel métodoNodeCreationConfig.
Limitaciones
Hay un breve retraso entre el momento en que el gcp-controller-manager crea un objeto Node en la API de Kubernetes y el momento en que el kubelet actualiza ese objeto Node con el conjunto completo de etiquetas y anotaciones de nodos. Cualquier carga de trabajo o controlador que dependa de un conjunto completo de etiquetas o anotaciones inmediatamente después de la creación del nodo puede mostrar un comportamiento inesperado. Es posible que ciertas etiquetas y anotaciones se concilien en un momento diferente al registro de kubelet. Verifica que tus cargas de trabajo y DaemonSets usen verificaciones de presencia de etiquetas y anotaciones antes de actuar.
- Evita implementar DaemonSets y cargas de trabajo que tengan tolerancias para todos los taints de nodos, lo que podría hacer que los pods se ejecuten en nodos que no están listos.
- Usa un
initContainerpara verificar las etiquetas de los nodos antes de permitir que se ejecuten los contenedores principales.
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 instalaste gcloud CLI anteriormente, ejecuta el comando
gcloud components updatepara obtener la versión más reciente. Es posible que las versiones anteriores de gcloud CLI no admitan la ejecución de los comandos de este documento.
Habilita la creación de nodos del plano de control
Puedes habilitar la creación de nodos con el componente gcp-controller-manager cuando creas un clúster o actualizas uno existente. En el caso de los clústeres existentes, la actualización solo afecta a los nodos nuevos del clúster. Los nodos existentes no se ven afectados por el cambio.
El siguiente comando habilita el modo de creación de nodos del plano de control para un clúster existente:
gcloud container clusters update CLUSTER_NAME \
--node-creation-mode=CONTROL_PLANE \
--location=CONTROL_PLANE_LOCATION \
Reemplaza lo siguiente:
CLUSTER_NAME: El nombre de tu clúster.CONTROL_PLANE_LOCATION: La región o zona de tu plano de control del clúster.
También puedes especificar la marca --node-creation-mode en el comando clusters create
y en el comando clusters create-auto
.
Inhabilita la creación de nodos del plano de control
Puedes revertir al comportamiento predeterminado de GKE en el que el kubelet
crea nodos en cualquier momento si especificas un valor de KUBELET en la
--node-creation-mode marca de Google Cloud CLI o VIA_KUBELET en el
NodeCreationConfig método de la API de GKE. En el caso de los clústeres existentes, este cambio solo afecta a los nodos nuevos de ese clúster.
El siguiente comando actualiza un clúster para inhabilitar la creación de nodos del plano de control:
gcloud container clusters update CLUSTER_NAME \
--node-creation-mode=KUBELET \
--location=CONTROL_PLANE_LOCATION \
Reemplaza lo siguiente:
CLUSTER_NAME: El nombre de tu clúster.CONTROL_PLANE_LOCATION: La región o zona de tu plano de control del clúster.
¿Qué sigue?
- Obtén más información sobre los nodos de GKE protegidos.
- Lee la descripción general de la seguridad de GKE.
- Obtén información para reforzar la seguridad de tu clúster.