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

En esta página, se describe cómo inhabilitar las reglas de firewall de VPC de entrada que GKE crea 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 otras reglas de firewall de VPC creadas automáticamente, como las que facilitan la comunicación entre nodos o las que permiten las verificaciones de estado de 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 posterior.

Limitaciones

GKE admite la inhabilitación de 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 de LoadBalancer internos que no usan la subdivisión de GKE
  • Servicios de 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 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 de este documento.

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 las 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 lo siguiente:

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

  2. Las reglas de firewall que crees de forma manual deben ser reglas de entrada allow, ya que la regla de firewall de entrada deny implícita prohíbe el tráfico entrante . Cuando inhabilites 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 entrada allow 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 entrada allow se puede aplicar a uno o más servicios de LoadBalancer. Para cada regla de firewall de entrada allow 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 de el clúster que contiene los servicios de LoadBalancer. Los destinos admitidos dependen del tipo de política de firewall en la 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}
      
      • Puedes optar por omitir el parámetro de destino. Cuando se omite el parámetro de destino, el parámetro de destino define los destinos de forma implícita. Para obtener más información, consulta Destinos y direcciones IP para reglas de entrada.
    • Parámetro de origen: Especifica las fuentes (por ejemplo, direcciones IP) que usan los clientes que necesitan conectarse a los servicios de LoadBalancer a los que se debe aplicar la regla de firewall.

    Para conocer los pasos para crear reglas de firewall, consulta lo siguiente:

  3. Para asegurarte de que las reglas de firewall que creaste de forma manual funcionen correctamente, ejecuta una prueba de conectividad de 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 issues.

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:

    Autopilot:

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

    Standard:

    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.
  2. Crea un servicio de LoadBalancer externo o interno:

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

    El siguiente comando muestra una lista de reglas de firewall que contienen k8s2:

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

    La respuesta solo debe mostrar la regla de firewall de verificación de estado con el formato k8s2-[cluster-id]-[namespace]-[service-name]-[suffixhash]-fw si el parámetro externalTrafficPolicy está configurado como Local. Usa el puerto TCP definido por el parámetro spec.healthCheckNodePort. Si no se especifica, el plano de control de Kubernetes asigna un puerto de verificación de estado desde el rango de puertos del nodo.

    k8s2-rkdld6go-default-ilb-svc-dluvsefq-fw  default  INGRESS  1000  tcp:30868  False
    

    Si el parámetro externalTrafficPolicy está configurado como Cluster, se muestra la siguiente regla de firewall de verificación de estado.

    k8s2-rkdld6go-l4-shared-hc-fw  default  INGRESS  1000  tcp:10256  False
    

    Para obtener más información sobre las reglas de firewall generadas para los servicios de GKE, consulta Reglas de firewall creadas automáticamente.

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 ninguna regla de firewall existente que GKE haya creado automáticamente para tus servicios de LoadBalancer.
  • GKE deja de actualizar las reglas existentes y no crea reglas nuevas para los servicios de LoadBalancer nuevos.
  • Para volver a activar la creación de reglas de firewall de VPC, puedes usar la --enable-l4-lb-firewall-reconciliation marca con el gcloud_name container clusters update comando.

Para inhabilitar la creación automática de reglas de firewall en un clúster existente, haz lo siguiente:

  1. Actualiza el clúster para inhabilitar la creación y la administración automáticas de 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 servicio de LoadBalancer externo o interno:

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

    El siguiente comando muestra una lista de reglas de firewall que contienen k8s2:

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

    La respuesta solo debe mostrar la regla de firewall de verificación de estado con el formato k8s2-[cluster-id]-[namespace]-[service-name]-[suffixhash]-fw si el parámetro externalTrafficPolicy está configurado como Local. Usa el puerto TCP definido por el parámetro spec.healthCheckNodePort. Si no se especifica, el plano de control de Kubernetes asigna un puerto de verificación de estado desde el rango de puertos del nodo.

    k8s2-rkdld6go-default-ilb-svc-dluvsefq-fw  default  INGRESS  1000  tcp:30868  False
    

    Si el parámetro externalTrafficPolicy está configurado como Cluster, se muestra la siguiente regla de firewall de verificación de estado.

    k8s2-rkdld6go-l4-shared-hc-fw  default  INGRESS  1000  tcp:10256  False
    

    Para obtener más información sobre las reglas de firewall generadas para los servicios de GKE, consulta Reglas de firewall creadas automáticamente.

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 a un clúster de servicio de LoadBalancer externo:

  • Network Intelligence Center:

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

    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: Un nombre para la prueba de conectividad.
    • SOURCE_IP_ADDRESS: La dirección IP del sistema que necesita conectarse al servicio de LoadBalancer externo. Por ejemplo:
    • LOADBALANCER_NAME: El nombre del servicio de LoadBalancer externo.
    • PROJECT_ID: 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: El nombre de la red de VPC de tu clúster.

    Verifica los resultados de la prueba:

    gcloud network-management connectivity-tests describe TEST_NAME
    

¿Qué sigue?