Reglas de cortafuegos gestionadas por el usuario para los servicios LoadBalancer de GKE


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

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

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

Requisitos

  • Para usar reglas de cortafuegos gestionadas por el usuario en servicios LoadBalancer, tus clústeres de GKE deben tener la versión 1.31.3-gke.105600 o una posterior.

Limitaciones

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

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

  • Servicios de balanceadores de carga internos que no usan subconjuntos de GKE
  • Servicios de tipo LoadBalancer externos basados en grupos de destino

Antes de empezar

Antes de empezar, asegúrate de que has realizado las siguientes tareas:

  • Habilita la API de Google Kubernetes Engine.
  • Habilitar la API de Google Kubernetes Engine
  • Si quieres usar Google Cloud CLI para esta tarea, instálala y, a continuación, inicialízala. Si ya has instalado la gcloud CLI, obtén la versión más reciente ejecutando gcloud components update.

Estrategias para gestionar manualmente las reglas de cortafuegos

Antes de inhabilitar la creación automática de reglas de cortafuegos de VPC para los servicios LoadBalancer de tu clúster de GKE, colabora con un administrador de seguridad para desarrollar una estrategia de configuración manual de las reglas de cortafuegos.

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

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

  2. Las reglas de cortafuegos que crees manualmente deben ser reglas de permiso de entrada, ya que la regla de cortafuegos de denegación de entrada implícita prohíbe el tráfico entrante. Si has inhabilitado la creación automática de reglas de cortafuegos de VPC, el tráfico entrante no llegará a tus nodos a menos que hayas creado reglas de cortafuegos de entrada que coincidan con el tráfico de tus servicios LoadBalancer.

    En función de los parámetros de la regla de cortafuegos, una sola regla de cortafuegos de entrada puede aplicarse a uno o varios servicios LoadBalancer. Para cada regla de cortafuegos de entrada que cree, defina 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 contenga los servicios LoadBalancer. Los destinos admitidos dependen del tipo de política de cortafuegos en la que se encuentre una regla o de si estás usando una regla de cortafuegos de VPC. Para obtener información sobre el parámetro de destino de una regla de una política de cortafuegos, consulta Destinos.

    • Protocolos y puertos: incluye todos los protocolos y puertos de destino que utilizan los servicios LoadBalancer a los que se debe aplicar la regla de cortafuegos.

    • Parámetro de destino: puede usar una de las siguientes estrategias para el parámetro de destino:

      • Incluya 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 servicio 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 necesitan conectarse a los servicios de balanceador de carga a los que se debe aplicar la regla de cortafuegos.

    Para saber cómo crear reglas de cortafuegos, consulta los siguientes artículos:

  3. Para asegurarte de que las reglas de cortafuegos que has creado manualmente funcionan correctamente, ejecuta una prueba de conectividad del centro de inteligencia de la red (NIC). Cuando ejecutes la prueba de conectividad, ten en cuenta lo siguiente:

    • Define el destino como la dirección IP del servicio LoadBalancer.
    • Define el origen como la dirección IP del cliente.

    Para obtener más información, consulta el artículo Solucionar problemas de conectividad.

Inhabilitar la creación de reglas de cortafuegos de VPC para tus servicios 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 LoadBalancer.

Crear un clúster de GKE con la creación de reglas de cortafuegos de VPC inhabilitada

  1. Para inhabilitar las reglas de cortafuegos de VPC creadas automáticamente para los servicios 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
    

    Haz los cambios siguientes:

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

  3. Verifica que GKE no cree una regla de cortafuegos de entrada permitida para el servicio LoadBalancer. Las reglas de cortafuegos 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 cortafuegos que contienen k8s2:

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

    La respuesta solo debe devolver la regla de cortafuegos de comprobación del estado con el formato k8s2-[cluster-id]-[namespace]-[service-name]-[suffixhash]-fw si el parámetro externalTrafficPolicy tiene el valor 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 comprobación del estado del intervalo de puertos de nodo.

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

    Si el parámetro externalTrafficPolicy se define como Cluster, se devuelve la siguiente regla de cortafuegos de comprobación del estado.

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

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

Actualizar un clúster de GKE para inhabilitar la creación de reglas de cortafuegos de VPC

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

  • Cuando actualizas un clúster para inhabilitar la creación de reglas de firewall de VPC, GKE no elimina ninguna regla de firewall que haya creado automáticamente para tus servicios LoadBalancer.
  • GKE dejará de actualizar las reglas actuales y no creará reglas para los nuevos servicios LoadBalancer.
  • Para volver a activar la creación de reglas de cortafuegos 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 cortafuegos en un clúster:

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

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

    Haz los cambios siguientes:

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

  3. Verifica que GKE no cree una regla de cortafuegos de entrada para el servicio LoadBalancer. Las reglas de cortafuegos 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 cortafuegos que contienen k8s2:

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

    La respuesta solo debe devolver la regla de cortafuegos de comprobación del estado con el formato k8s2-[cluster-id]-[namespace]-[service-name]-[suffixhash]-fw si el parámetro externalTrafficPolicy tiene el valor 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 comprobación del estado del intervalo de puertos de nodo.

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

    Si el parámetro externalTrafficPolicy se define como Cluster, se devuelve la siguiente regla de cortafuegos de comprobación del estado.

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

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

Solucionar 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 servicio LoadBalancer externo:clúster:

  • Network Intelligence Center:

    1. En la Google Cloud consola, ve al Centro de Información de la Red e inicia una nueva prueba de conectividad.
    2. En el menú desplegable, elija Cualquier dirección IP pública externa como origen y seleccione su balanceador de carga 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 carga 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
    

    Haz los cambios siguientes:

    • TEST_NAME: nombre de la prueba de conectividad.
    • SOURCE_IP_ADDRESS: la dirección IP del sistema que necesita conectarse al servicio LoadBalancer externo. por ejemplo:
    • LOADBALANCER_NAME: nombre del servicio LoadBalancer externo.
    • PROJECT_ID: 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.

    Comprueba los resultados de la prueba:

    gcloud network-management connectivity-tests describe TEST_NAME
    

Siguientes pasos