Reglas de firewall administradas por el usuario para los servicios de LoadBalancer de GKE


En esta página, se describe cómo inhabilitar las reglas de firewall de VPC de entrada permitidas que crea GKE para los servicios de LoadBalancer.

Inhabilitar estas reglas de firewall creadas automáticamente para los servicios de LoadBalancer puede ser útil en las siguientes situaciones:

Para inhabilitar las reglas de firewall creadas automáticamente para los servicios de LoadBalancer, debes especificar la marca --disable-l4-lb-firewall-reconciliation cuando crees o actualices un clúster. La marca --disable-l4-lb-firewall-reconciliation no afecta a otras reglas de firewall de VPC creadas automáticamente, como las que facilitan la comunicación entre nodos o las que permiten verificaciones de estado para tus servicios.

Requisitos

  • Para usar reglas de firewall administradas por el usuario para los servicios de LoadBalancer, tus clústeres de GKE deben usar la versión 1.31.3-gke.105600 o una posterior.

Limitaciones

GKE admite inhabilitar la creación automática de reglas de firewall para estos tipos de servicios de LoadBalancer:

No puedes inhabilitar la creación automática de reglas de firewall para estos tipos de servicios de LoadBalancer:

  • Servicios LoadBalancer internos que no usan la subdivisión de GKE
  • Servicios LoadBalancer externos basados en grupos de destino

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 gcloud components update para obtener la versión más reciente.

Estrategias para la administración manual de reglas de firewall

Antes de inhabilitar la creación automática de reglas de firewall de VPC para los servicios de LoadBalancer en tu clúster de GKE, trabaja con un administrador de seguridad para desarrollar una estrategia para configurar reglas de firewall de forma manual.

  1. Decide qué tipo de política de firewall usar: una política de firewall jerárquica, una política de firewall de red global o una política de firewall de red regional. Para conocer los pasos para crear una política de firewall, consulta los siguientes artículos:

    También puedes usar reglas de firewall de VPC, que no usan ninguna política.

  2. Las reglas de firewall que creaste de forma manual deben ser reglas de permiso de entrada, ya que la regla de firewall de entrada de denegación implícita prohíbe el tráfico entrante. Cuando inhabilitas la creación automática de reglas de firewall de VPC, el tráfico entrante no llegará a tus nodos, a menos que hayas creado reglas de firewall de permiso de entrada que coincidan con el tráfico de tus servicios de LoadBalancer.

    Según los parámetros de la regla de firewall, una sola regla de firewall de permiso de entrada puede aplicarse a uno o más servicios de LoadBalancer. Para cada regla de firewall de permiso de entrada que crees, define los siguientes parámetros:

    • Parámetro de destino: Asegúrate de que la regla de firewall incluya, al menos, todos los nodos del clúster que contiene los servicios de LoadBalancer. Los destinos compatibles dependen del tipo de política de firewall en el que se encuentra una regla o si usas una regla de firewall de VPC. Para obtener información sobre el parámetro de destino de una regla en una política de firewall, consulta Destinos.

    • Protocolos y puertos: Incluye todos los protocolos y puertos de destino que usan los servicios de LoadBalancer a los que se debe aplicar la regla de firewall.

    • Parámetro de destino: Puedes emplear una de las siguientes estrategias para el parámetro de destino:

      • Incluye las direcciones IP de todos los servicios de LoadBalancer a los que se debe aplicar la regla de firewall en el parámetro de destino. Para encontrar la dirección IP de un servicio de LoadBalancer, usa el siguiente comando:
         kubectl get svc LOADBALANCER_NAME \
            -n NAMESPACE_NAME \
            -o jsonpath='{.status.loadBalancer.ingress[0].ip}
      
    • Parámetro de origen: Especifica las fuentes (por ejemplo, direcciones IP) que usan los clientes que deben conectarse a los servicios de balanceador de cargas a los que se debe aplicar la regla de firewall.

    Para conocer los pasos para crear reglas de firewall, consulta los siguientes artículos:

  3. Para asegurarte de que las reglas de firewall que creaste de forma manual funcionen correctamente, ejecuta una prueba de conectividad del Network Intelligence Center (NIC). Cuando ejecutes la prueba de conectividad, haz lo siguiente:

    • Establece el destino en la dirección IP del servicio de LoadBalancer.
    • Establece la fuente en la dirección IP del cliente.

    Para obtener más información, consulta Soluciona problemas de conectividad.

Inhabilita la creación de reglas de firewall de VPC para tus servicios de LoadBalancer

En esta sección, se describen los pasos para inhabilitar la creación automática de reglas de firewall de VPC para los servicios de LoadBalancer.

Crea un clúster de GKE nuevo con la creación de reglas de firewall de VPC inhabilitada

  1. Para inhabilitar las reglas de firewall de VPC creadas automáticamente para los servicios de LoadBalancer en un clúster recién creado, crea el clúster con la marca --disable-l4-lb-firewall-reconciliation:

    gcloud

    Autopilot:

    gcloud container clusters create-auto CLUSTER_NAME \
      --disable-l4-lb-firewall-reconciliation \
      --cluster-version=VERSION
    

    Estándar:

    gcloud container clusters create CLUSTER_NAME \
      --disable-l4-lb-firewall-reconciliation \
      --enable-l4-ilb-subsetting \
      --cluster-version=VERSION
    

    Reemplaza lo siguiente:

    • CLUSTER_NAME es el nombre del clúster nuevo.
    • VERSION: Es la versión de GKE.

    Terraform

    Para crear un clúster con la creación de reglas de firewall de VPC inhabilitada a través de Terraform, consulta el siguiente ejemplo:

    resource "google_container_cluster" "primary" {
      provider = google-beta
      name = CLUSTER_NAME
      location = ZONE
    
      enable-l4-ilb-subsetting = true
      disable_l4_lb_firewall_reconciliation = true
    }
    
  2. Crea un Service LoadBalancer externo o interno:

  3. Verifica que GKE no cree una regla de firewall de permiso de entrada para el servicio de LoadBalancer. (Las reglas de firewall de permiso de entrada creadas automáticamente tienen nombres del siguiente formato: k8s2-[cluster-id]-[namespace]-[service-name]-[suffixhash]).

    El siguiente comando no muestra nada:

    gcloud compute firewall-rules list --format="value(name)" | grep "k8s2"
    

Actualiza un clúster de GKE existente para inhabilitar la creación de reglas de firewall de VPC

Antes de inhabilitar la creación de reglas de firewall de VPC, ten en cuenta los siguientes puntos sobre la actualización de un clúster existente:

  • Cuando actualizas un clúster existente para inhabilitar la creación de reglas de firewall de VPC, GKE no borra las reglas de firewall existentes que GKE creó automáticamente para tus servicios de LoadBalancer.
  • GKE deja de actualizar las reglas existentes y no creará ninguna nueva para los nuevos servicios de LoadBalancer.
  • Para volver a activar la creación de reglas de firewall de VPC, puedes usar la marca --enable-l4-lb-firewall-reconciliation con el comando gcloud_name container clusters update.

Para inhabilitar la creación automática de reglas de firewall en un clúster existente, sigue estos pasos:

  1. Actualiza el clúster para inhabilitar la creación y administración automáticas de las reglas de firewall para los servicios de LoadBalancer:

    gcloud container clusters update CLUSTER_NAME \
    --disable-l4-lb-firewall-reconciliation \
    --cluster-version=supported_version
    

    Reemplaza lo siguiente:

    • CLUSTER_NAME es el nombre del clúster nuevo.
    • VERSION: Es la versión de GKE.
  2. Crea un Service LoadBalancer externo o interno:

  3. Verifica que GKE no cree una regla de firewall de permiso de entrada para el servicio de LoadBalancer. (Las reglas de firewall de permiso de entrada creadas automáticamente tienen nombres del siguiente formato: k8s2-[cluster-id]-[namespace]-[service-name]-[suffixhash]).

    El siguiente comando no muestra nada:

    gcloud compute firewall-rules list --format="value(name)" | grep "k8s2"
    

Soluciona problemas de conectividad

En los siguientes ejemplos, se muestra cómo usar las pruebas de conectividad de Network Intelligence Center para probar la conectividad con un clúster de Service LoadBalancer externo:

  • Network Intelligence Center:

    1. En la consola de Google Cloud, ve al Centro de Network Intelligence y comienza una nueva prueba de conectividad.
    2. En el menú desplegable, elige Cualquier dirección IP pública externa como fuente y selecciona tu balanceador de cargas desde el destino.
    3. Vuelve a ejecutar la prueba de conectividad.
  • La CLI de gcloud:

    En el siguiente comando de ejemplo, se crea y ejecuta una prueba con la dirección IP pública de tu estación de trabajo local como fuente y la dirección IP externa del balanceador de cargas externo como destino:

    gcloud network-management connectivity-tests create TEST_NAME \
    --source-ip-address=SOURCE_IP_ADDRESS \
    --source-network-type=NON_GCP_NETWORK \
    --destination-ip-address=$(kubectl get svc LOADBALANCER_NAME -o jsonpath='{.status.loadBalancer.ingress[0].ip}') \
    --destination-port=$(kubectl get svc LOADBALANCER_NAME -o jsonpath='{.spec.ports[0].targetPort}') \
    --destination-network=projects/PROJECT_ID/global/networks/NETWORK_NAME
    

    Reemplaza lo siguiente:

    • TEST_NAME: Es un nombre para la prueba de conectividad.
    • SOURCE_IP_ADDRESS: Es la dirección IP del sistema que se debe conectar al servicio de LoadBalancer externo. Por ejemplo:
    • LOADBALANCER_NAME: Es el nombre del servicio de LoadBalancer externo.
    • PROJECT_ID: Es el ID del proyecto que contiene la red de VPC del clúster. Si tu clúster usa una red de VPC compartida, usa el ID del proyecto host.
    • NETWORK_NAME: Es el nombre de la red de VPC del clúster.

    Verifica los resultados de la prueba:

    gcloud network-management connectivity-tests describe TEST_NAME
    

¿Qué sigue?