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 que GKE crea para los objetos Service de tipo 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 objetos Service de LoadBalancer, tus clústeres de GKE deben usar la versión 1.31.3-gke.105600 o una posterior.

Limitaciones

GKE admite la inhabilitación de la creación automática de reglas de firewall para los siguientes tipos de servicios de LoadBalancer:

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

  • Objetos Service 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 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 los siguientes recursos:

    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 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 llega a tus nodos, a menos que hayas creado reglas de firewall de permiso de entrada que coincidan con el tráfico de tus objetos Service de tipo LoadBalancer.

    Según los parámetros de la regla de firewall, una sola regla de firewall de permiso de entrada se puede aplicar 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 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 objetos Service de tipo 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 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 Service 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 objetivo define los destinos de forma implícita. Para obtener más información, consulta Objetivos 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 del 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 recursos:

  3. Para asegurarte de que las reglas de firewall creadas manualmente 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 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:

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

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

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

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

    La respuesta solo debe devolver 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á establecido en Local. Utiliza 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 se establece en Cluster, se devuelve 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 dejará de actualizar las reglas existentes y no creará reglas nuevas 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, haz lo siguiente:

  1. Actualiza el clúster para inhabilitar la creación y 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 objeto Service LoadBalancer interno o externo:

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

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

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

    La respuesta solo debe devolver 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á establecido en Local. Utiliza 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 se establece en Cluster, se devuelve 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 ilustra cómo usar las pruebas de conectividad de Network Intelligence Center para probar la conectividad con un objeto Service LoadBalancer externo:clúster:

  • Network Intelligence Center:

    1. En la consola de Trusted Cloud , ve a Network Intelligence Center 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 como destino.
    3. Vuelve a ejecutar la prueba de conectividad.
  • La CLI de gcloud:

    El siguiente comando de ejemplo crea y ejecuta una prueba con la dirección IP pública de tu estación de trabajo local como origen 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 necesita conectarse al Service LoadBalancer externo. Por ejemplo:
    • LOADBALANCER_NAME: Es el nombre del servicio 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 de tu clúster.

    Verifica los resultados de la prueba:

    gcloud network-management connectivity-tests describe TEST_NAME
    

¿Qué sigue?