Crea una política de red


En esta página, se explica cómo configurar la aplicación de políticas de red en Google Kubernetes Engine (GKE). Para obtener información general sobre las herramientas de redes de GKE, consulta la descripción general de la red.

Descripción general

Puedes usar la aplicación de políticas de red de GKE para controlar la comunicación entre los pods y los objetos Service del clúster. Para definir una política de red, usa la API de política de red de Kubernetes a fin de crear reglas de firewall a nivel de pod. Estas reglas de firewall determinan los pods y servicios que se pueden acceder entre sí dentro del clúster.

La definición de políticas de red te ayuda a habilitar estrategias como la defensa en profundidad cuando el clúster entrega una aplicación de varios niveles. Por ejemplo, puedes crear una política de red para asegurarte de que un servicio de frontend vulnerable en la aplicación no pueda comunicarse directamente con un servicio de facturación o contabilidad en varios niveles inferiores.

La política de red también le facilita a la aplicación alojar datos de varios usuarios de manera simultánea. Por ejemplo, puedes proporcionar instancia múltiple segura si defines un modelo de instancia por espacio de nombres. En este modelo, las reglas de la política de red pueden garantizar que los pods y los Services en un espacio de nombres determinado no puedan acceder a otros pods o Services en otro espacio de nombres.

Antes de comenzar

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

  • Asegúrate de que habilitaste la API de Google Kubernetes Engine.
  • Habilitar la API de Google Kubernetes Engine
  • Asegúrate de que instalaste el SDK de Cloud.
  • Establece la configuración predeterminada de la herramienta de línea de comandos de gcloud para tu proyecto mediante uno de los siguientes métodos:
    • Usa gcloud init si deseas ver una explicación sobre cómo configurar los valores predeterminados del proyecto.
    • Usa gcloud config para configurar el ID, la zona y la región del proyecto de manera individual.

    gcloud init

    1. Ejecuta gcloud init y sigue las instrucciones:

      gcloud init

      Si usas SSH en un servidor remoto, usa la marca --console-only para evitar que el comando abra un navegador:

      gcloud init --console-only
    2. Sigue las instrucciones para autorizar a la herramienta de gcloud a usar tu cuenta de Google Cloud.
    3. Crea una configuración nueva o selecciona una existente.
    4. Elige un proyecto de Google Cloud.
    5. Elige una zona de Compute Engine predeterminada.
    6. Elige una región de Compute Engine predeterminada.

    gcloud config

    1. Establece tu ID del proyecto predeterminado:
      gcloud config set project PROJECT_ID
    2. Configura la región de Compute Engine predeterminada (por ejemplo, us-central1):
      gcloud config set compute/region COMPUTE_REGION
    3. Configura la zona de Compute Engine predeterminada (por ejemplo, us-central1-c):
      gcloud config set compute/zone COMPUTE_ZONE
    4. Actualiza gcloud a la versión más reciente:
      gcloud components update

    Cuando configuras las ubicaciones predeterminadas, puedes evitar errores en la herramienta gcloud como el siguiente: One of [--zone, --region] must be supplied: Please specify location.

Usa la aplicación de políticas de red

Puedes habilitar la aplicación de políticas de red cuando creas un clúster de GKE o puedes habilitarla en un clúster existente. También puedes inhabilitar las políticas de red en un clúster existente.

Una vez que habilitaste las políticas de red en tu clúster, puedes crear una mediante la API de política de red de Kubernetes.

Habilita la aplicación de políticas de red

La aplicación de la política de red está integrada en GKE Dataplane V2. No es necesario habilitar la aplicación de la política de red en los clústeres que usan GKE Dataplane V2.

Cuando habilitas la aplicación de la política de red en un clúster de GKE que no usa GKE Dataplant V2, GKE administra y aplica políticas de red dentro de ese clúster.

Puedes habilitar la aplicación de políticas de red en GKE mediante la herramienta de gcloud, Google Cloud Console o la API de GKE.

gcloud

Para habilitar la aplicación de políticas de red durante la creación de un clúster nuevo, ejecuta el siguiente comando:

gcloud container clusters create CLUSTER_NAME --enable-network-policy

Reemplaza CLUSTER_NAME por el nombre del clúster nuevo.

Para habilitar la aplicación de políticas de red en un clúster existente, realiza las siguientes tareas:

  1. Ejecuta el siguiente comando para habilitar el complemento:

    gcloud container clusters update CLUSTER_NAME --update-addons=NetworkPolicy=ENABLED
    

    Reemplaza CLUSTER_NAME por el nombre del clúster.

  2. Ejecuta el siguiente comando para habilitar la aplicación de políticas de red en tu clúster, lo que ocasionará que se vuelvan a crear los grupos de nodos del clúster con la aplicación de políticas de red habilitada:

    gcloud container clusters update CLUSTER_NAME --enable-network-policy
    

Console

Para habilitar la aplicación de políticas de red durante la creación de un clúster nuevo, sigue los siguientes pasos:

  1. Ve a la página Google Kubernetes Engine en Cloud Console.

    Ir a Google Kubernetes Engine

  2. Haz clic en Crear.

  3. Configura tu clúster como desees.

  4. En el panel de navegación, en Clúster, haz clic en Herramientas de redes.

  5. Selecciona la casilla de verificación Habilitar política de red.

  6. Haz clic en Crear.

Para habilitar la aplicación de políticas de red en un clúster existente, sigue estos pasos:

  1. Ve a la página de Google Kubernetes Engine en Cloud Console:

    Ir a Google Kubernetes Engine

  2. En la lista de clústeres, haz clic en el nombre del clúster que deseas modificar.

  3. En Herramientas de redes, en el campo Política de red, haz clic en Editar política de red.

  4. Selecciona la casilla de verificación Habilitar la política de red en la instancia principal y haz clic en Guardar cambios.

  5. Espera a que se apliquen los cambios y, a continuación, vuelve a hacer clic en Editar política de red.

  6. Selecciona la casilla de verificación Habilitar la política de red en los nodos.

  7. Haz clic en Save Changes.

API

Para habilitar la aplicación de políticas de red, sigue estos pasos:

  1. Especifica el objeto networkPolicy dentro del objeto cluster que proporcionas a projects.zones.clusters.create o projects.zones.clusters.update.

  2. El objeto networkPolicy requiere una enumeración que especifique qué proveedor de políticas de red usar y un valor booleano que determine si se debe habilitar la política de red. Si habilitas la política de red, pero no estableces el proveedor, los comandos create y update muestran un error.

Inhabilita la aplicación de políticas de red

Puedes inhabilitar la aplicación de políticas de red mediante la herramienta de gcloud, Google Cloud Console o la API de GKE. La aplicación de la política de red no se puede inhabilitar en los clústeres que usan GKE Dataplane V2.

gcloud

Para inhabilitar la aplicación de políticas de red en un clúster existente, ejecuta el siguiente comando:

gcloud container clusters update CLUSTER_NAME --no-enable-network-policy

Reemplaza CLUSTER_NAME por el nombre del clúster.

Console

Para inhabilitar la aplicación de políticas de red en un clúster existente, sigue estos pasos:

  1. Ve a la página de Google Kubernetes Engine en Cloud Console:

    Ir a Google Kubernetes Engine

  2. En la lista de clústeres, haz clic en el nombre del clúster que deseas modificar.

  3. En Herramientas de redes, en el campo Política de red, haz clic en Editar política de red.

  4. Desactiva la casilla de verificación Habilitar la política de red en los nodos y haz clic en Guardar cambios.

  5. Espera a que se apliquen los cambios y, a continuación, vuelve a hacer clic en Editar política de red.

  6. Desmarca la casilla de verificación Habilitar la política de red en la instancia principal.

  7. Haz clic en Save Changes.

API

Para inhabilitar la aplicación de políticas de red en un clúster existente, sigue estos pasos:

  1. Especifica el objeto networkPolicy dentro de tu objeto cluster que proporcionas a projects.zones.clusters.update.
  2. Dentro del objeto networkPolicy, establece el valor booleano enabled en false.

Si inhabilitas la aplicación de la política de red, asegúrate de actualizar los complementos (por ejemplo, Calico DaemonSet) a fin de indicar que la política de red está inhabilitada para los complementos:

gcloud container clusters update CLUSTER_NAME --update-addons=NetworkPolicy=DISABLED

Reemplaza CLUSTER_NAME por el nombre del clúster.

Crea una política de red

Una vez que hayas habilitado la aplicación de la política de red para tu clúster, deberás definir la política de red real. La política de red se define con la API de política de red de Kubernetes.

Para obtener más detalles sobre cómo crear una política de red, consulta los siguientes temas en la documentación de Kubernetes:

Trabaja con PodSecurityPolicy

Si usas un objeto NetworkPolicy y tienes un pod que depende de un objeto PodSecurityPolicy, crea un objeto RBAC Role o un objeto ClusterRole que tenga permiso para usar el PodSecurityPolicy. Luego, vincula el Role o el ClusterRole a la cuenta de servicio del pod. Cuando usas NetworkPolicy y PodSecurityPolicy juntas, otorgar permisos a las cuentas de usuario no es suficiente. Debes vincular la función a la cuenta de servicio. Para obtener más información, consulta Autoriza políticas.

Sobrecarga, limitaciones y advertencias

  • Cuando se habilita la aplicación de políticas de red, se consumen recursos adicionales en los nodos. En particular, aumenta el alcance de memoria del proceso kube-system en casi 128 MB, y requiere unos 300 millicores de CPU.

  • Habilitar la aplicación de la política de red requiere que los nodos se vuelvan a crear. Si tu clúster tiene un período de mantenimiento activo, los nodos no se vuelven a crear de manera automática hasta el siguiente período de mantenimiento. Si lo prefieres, puedes actualizar tu clúster de forma manual en cualquier momento.

Limitaciones y requisitos

  • Tu clúster debe tener, al menos, 2 nodos de tipo e2-medium o superior. El clúster de tamaño mínimo recomendado para ejecutar la aplicación de la política de red es de 3 instancias e2-medium.
  • La política de red no es compatible con los clústeres cuyos nodos son instancias f1-micro o g1-small, ya que los requisitos de recursos son demasiado altos para instancias de ese tamaño.
  • Si usas la política de red con Workload Identity de GKE, debes permitir la salida a las siguientes direcciones IP y números de puerto para que los pods puedan comunicarse con el Servidor de metadatos de GKE. Para los clústeres que ejecutan la versión 1.21.0-gke.1000 y posteriores de GKE, permite la salida a 169.254.169.252/32 en el puerto 988. Para los clústeres que ejecutan versiones de GKE anteriores a la 1.21.0-gke.1000, permite la salida a 127.0.0.1/32 en el puerto 988. Para evitar interrupciones durante las actualizaciones automáticas, permite la salida a todas estas direcciones IP y puertos.

Para obtener más información sobre tipos de máquinas de nodo y recursos asignables, consulta Arquitectura del clúster estándar: nodos.

Migra de Calico a GKE Dataplane V2

Si migras tus políticas de red de Calico a GKE Dataplane V2, ten en cuenta las siguientes limitaciones:

  • No puedes usar una dirección IP de Pod o Service en el campo ipBlock.cidr de un manifiesto NetworkPolicy. Debes hacer referencia a las cargas de trabajo mediante etiquetas. Por ejemplo, la siguiente configuración no es válida:

    - ipBlock:
        cidr: 10.8.0.6/32
    
  • No puedes especificar un campo ports.port vacío en un manifiesto NetworkPolicy. Si especificas un puerto, también debes especificar un protocolo. Por ejemplo, la siguiente configuración no es válida:

    ingress:
    - ports:
      - protocol: TCP
    

Trabaja con el balanceo de cargas de HTTP(S)

Cuando se aplica un Ingress a un Service para compilar un balanceador de cargas HTTP(S), debes configurar la política de red que se aplica a los Pods detrás de ese Service para permitir los rangos de IP de verificación de estado del balanceador de cargas HTTP(S) adecuados. Si usas un balanceador de cargas de HTTP(S) interno, también debes configurar la política de red para permitir la subred de solo proxy.

Si no usas el balanceo de cargas nativo del contenedor con grupos de extremos de red, los puertos de nodos para un Service podrían reenviar conexiones a Pods en otros nodos, a menos que no puedan hacerlo debido a la configuración de externalTrafficPolicyen Local en la definición de Service. Si externalTrafficPolicy no está configurado en Local, la política de red también debe permitir las conexiones de otras IP de nodo en el clúster.

Problemas conocidos

Terminación del Pod del StatefulSet con Calico

Los clústeres de GKE con la política de red Calico habilitada pueden experimentar un problema en el que un pod StatefulSet descarta las conexiones existentes cuando se borra el pod. Después de que un pod ingresa al estado Terminating, no se respeta la configuración terminationGracePeriodSeconds en la especificación del pod y provoca interrupciones en otras aplicaciones que tengan una conexión existente con el pod StatefulSet. Para obtener más información sobre este problema, consulta Problema 4710 de Calico.

Este problema afecta a las siguientes versiones de GKE:

  • 1.18
  • 1.19 a 1.19.16-gke.99
  • 1.20 a 1.20.11-gke.1299
  • 1.21 a 1.21.4-gke.1499

Para mitigar este problema, actualiza tu plano de control de GKE a una de las siguientes versiones:

  • 1.19.16-gke.100 o superior
  • 1.20.11-gke.1300 o superior
  • 1.21.4-gke.1500 o superior

¿Qué sigue?