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:

Establece la configuración de gcloud predeterminada mediante uno de los siguientes métodos:

  • Usa gcloud init si deseas ver una explicación sobre cómo configurar parámetros predeterminados.
  • Usa gcloud config para establecer el ID, la zona y la región del proyecto de manera individual.

Usa gcloud init

Si recibes el error One of [--zone, --region] must be supplied: Please specify location, completa esta sección.

  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 a fin de autorizar a gcloud para que use 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 predeterminada de Compute Engine para clústeres zonales o una región para clústeres regionales o de Autopilot.

Usa gcloud config

  • Establece tu ID del proyecto predeterminado:
    gcloud config set project PROJECT_ID
  • Si trabajas con clústeres zonales, establece tu zona de procesamiento predeterminada:
    gcloud config set compute/zone COMPUTE_ZONE
  • Si trabajas con clústeres de Autopilot o regionales, configura tu región de procesamiento predeterminada:
    gcloud config set compute/region COMPUTE_REGION
  • Actualiza gcloud a la versión más reciente:
    gcloud components update

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.

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 de servicio en el campo ipBlock.cidr del manifiesto NetworkPolicy. Debes hacer referencia a las cargas de trabajo mediante las 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.

¿Qué sigue?