Crear un balanceador de carga externo basado en un servicio de backend

En esta página se explica cómo desplegar un servicio LoadBalancer externo que crea un balanceador de carga de red de paso a través externo basado en un servicio de backend. Antes de leer esta página, asegúrate de que conoces los siguientes conceptos:

Para obtener más información sobre los balanceadores de carga de red de paso a través externos en general, consulta Balanceador de carga de red de paso a través externo basado en el servicio de backend.

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.

Requisitos

  • El complemento HttpLoadBalancing debe estar habilitado en tu clúster. Este complemento está habilitado de forma predeterminada. Permite que el clúster gestione los balanceadores de carga que usan servicios de backend.

  • Para crear un servicio LoadBalancer externo que use un balanceador de carga de red de paso a través externo basado en un servicio de backend, tu clúster de GKE debe usar la versión 1.25.5 o una posterior.

  • Para crear un servicio LoadBalancer externo que use el balanceo de carga ponderado, tu clúster de GKE debe usar la versión 1.31.0-gke.1506000 o una posterior.

  • Para crear un servicio LoadBalancer externo que utilice back-ends de GCE_VM_IP grupos de puntos finales de red (NEG), tu clúster de GKE debe usar la versión 1.32.2-gke.1652000 o una posterior.

Elegir un clúster

Puedes crear un clúster o elegir uno que ya tengas y que cumpla los requisitos.

Crear una agrupación

Autopilot

Para crear un clúster de Autopilot, sigue estos pasos:

gcloud container clusters create-auto CLUSTER_NAME \
    --release-channel=RELEASE_CHANNEL \
    --cluster-version=VERSION \
    --location=COMPUTE_LOCATION

Haz los cambios siguientes:

Para inhabilitar la creación automática de reglas de cortafuegos de VPC para los servicios LoadBalancer, incluye la marca --disable-l4-lb-firewall-reconciliation. Para obtener más información, consulta Reglas de cortafuegos gestionadas por el usuario para servicios LoadBalancer de GKE.

Estándar

Para crear un clúster estándar, sigue estos pasos:

gcloud container clusters create CLUSTER_NAME \
    --release-channel=RELEASE_CHANNEL \
    --cluster-version=VERSION \
    --location=COMPUTE_LOCATION

Haz los cambios siguientes:

Para inhabilitar la creación automática de reglas de cortafuegos de VPC para los servicios LoadBalancer, incluye la marca --disable-l4-lb-firewall-reconciliation. Para obtener más información, consulta Reglas de cortafuegos gestionadas por el usuario para servicios LoadBalancer de GKE.

Actualizar un clúster

Usa la CLI de gcloud para actualizar un clúster:

gcloud container clusters upgrade CLUSTER_NAME \
    --cluster-version=VERSION \
    --master \
    --location=COMPUTE_LOCATION

Haz los cambios siguientes:

Para inhabilitar la creación automática de reglas de cortafuegos de VPC para los servicios LoadBalancer, incluye la marca --disable-l4-lb-firewall-reconciliation. Para obtener más información, consulta Reglas de cortafuegos gestionadas por el usuario para servicios LoadBalancer de GKE.

Desplegar una carga de trabajo de ejemplo

Implementa la siguiente carga de trabajo de ejemplo, que proporciona los pods de servicio del servicio LoadBalancer externo.

  1. Guarda el siguiente ejemplo de Deployment como store-deployment.yaml:

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: store
    spec:
      replicas: 20
      selector:
        matchLabels:
          app: store
      template:
        metadata:
          labels:
            app: store
        spec:
          containers:
          - image: gcr.io/google_containers/echoserver:1.10
            imagePullPolicy: Always
            name: echoserver
            ports:
              - name: http
                containerPort: 8080
            readinessProbe:
              httpGet:
                path: /healthz
                port: 8080
                scheme: HTTP
    
  2. Aplica el manifiesto al clúster:

    kubectl apply -f store-deployment.yaml
    
  3. Comprueba que haya 20 pods de servicio para la implementación:

    kubectl get pods
    

    El resultado debería ser similar al siguiente:

    NAME                     READY   STATUS    RESTARTS   AGE
    store-cdb9bb4d6-s25vw      1/1     Running   0          10s
    store-cdb9bb4d6-vck6s      1/1     Running   0          10s
    ....
    

Crear el servicio LoadBalancer externo

  1. Expón la carga de trabajo de ejemplo creando un servicio LoadBalancer externo.

    1. Guarda el siguiente manifiesto de servicio como store-v1-lb-svc.yaml:

      apiVersion: v1
      kind: Service
      metadata:
        name: store-v1-lb-svc
        annotations:
          cloud.google.com/l4-rbs: "enabled"
      spec:
        type: LoadBalancer
        selector:
          app: store
        ports:
        - name: tcp-port
          protocol: TCP
          port: 8080
          targetPort: 8080
      
    2. Aplica el manifiesto al clúster:

      kubectl apply -f store-v1-lb-svc.yaml
      

    Ten en cuenta los siguientes aspectos sobre este archivo de manifiesto de ejemplo:

    • El manifiesto de servicio debe incluir la anotación cloud.google.com/l4-rbs: "enabled" cuando se aplique por primera vez al clúster. De esta forma, se indica a GKE que cree un balanceador de carga de red de paso a través externo basado en un servicio de backend. Los balanceadores de carga de red de paso a través externos basados en el servicio de backend son obligatorios para admitir funciones como IPv6 y el balanceo de carga ponderado.

    • GKE usa backends de NEG GCE_VM_IP o backends de grupos de instancias no gestionados, según la versión del clúster. En los clústeres con la versión 1.32.2-gke.1652000, el balanceador de carga de red de paso a través externo basado en el servicio de backend usa GCE_VM_IP NEG. En versiones anteriores, el balanceador de carga de red de paso a través externo basado en servicios de backend usa grupos de instancias sin gestionar.

    • Si añades la anotación cloud.google.com/l4-rbs: "enabled" al manifiesto de un servicio de balanceador de carga externo ya creado (es decir, después de que se haya creado el balanceador de carga), GKE ignorará la anotación. Los servicios de tipo LoadBalancer externos creados sin esta anotación en sus manifiestos usan balanceadores de carga de red de paso a través externos basados en grupos de destino. No se recomienda usar balanceadores de carga de red de paso a través externos basados en grupos de destino.

Habilitar el balanceo de carga ponderado

Para distribuir las nuevas conexiones de forma proporcional a los nodos en función del número de pods activos, listos y no finalizados que haya en cada nodo, habilita el balanceo de carga ponderado añadiendo la anotación networking.gke.io/weighted-load-balancing: "pods-per-node" al manifiesto del servicio.

  1. Añade la anotación networking.gke.io/weighted-load-balancing: "pods-per-node" al manifiesto de store-v1-lb-svc.yaml Service y asegúrate de que también has definido externalTrafficPolicy: Local para que quede así:

    apiVersion: v1
    kind: Service
    metadata:
      name: store-v1-lb-svc
      annotations:
        cloud.google.com/l4-rbs: "enabled"
        networking.gke.io/weighted-load-balancing: "pods-per-node"
    spec:
      type: LoadBalancer
      externalTrafficPolicy: Local
      selector:
        app: store
      ports:
      - name: tcp-port
        protocol: TCP
        port: 8080
        targetPort: 8080
    
  2. Aplica el manifiesto al clúster:

    kubectl apply -f store-v1-lb-svc.yaml
    

Ten en cuenta lo siguiente sobre este ejemplo de balanceo de carga ponderado:

  • El manifiesto del servicio usa externalTrafficPolicy: Local. Si no necesitas habilitar el balanceo de carga ponderado, también puedes usar externalTrafficPolicy: Cluster. Para obtener información sobre cómo define externalTrafficPolicy la agrupación de nodos, qué nodos superan las comprobaciones de estado del balanceador de carga y cómo se procesan los paquetes, consulta Conceptos del servicio LoadBalancer.

  • Si habilitas el balanceo de carga ponderado, GKE no te impedirá usar externalTrafficPolicy: Cluster, pero externalTrafficPolicy: Cluster inhabilita de forma efectiva el balanceo de carga ponderado porque el paquete se puede enrutar, después del balanceador de carga, a un nodo diferente.

También puedes habilitar el balanceo de carga ponderado en un servicio LoadBalancer externo que ya tengas mediante kubectl edit svc service-name. El comando kubectl edit abre el manifiesto de servicio del balanceador de carga en el editor de texto que hayas configurado, donde puedes modificar el manifiesto y guardar los cambios. Cuando edites un servicio LoadBalancer externo, ten en cuenta lo siguiente:

  • El servicio LoadBalancer externo debe haber creado un balanceador de carga de red de paso a través externo basado en el servicio de backend. Esto significa que el servicio LoadBalancer externo debe haber incluido la anotación cloud.google.com/l4-rbs: "enabled" cuando el manifiesto se aplicó por primera vez al clúster.

    Añadir la anotación networking.gke.io/weighted-load-balancing: "pods-per-node" a un servicio LoadBalancer externo que use un balanceador de carga de red de paso a través externo basado en un grupo de destino no tiene ningún efecto.

  • Cuando actualices el manifiesto de servicio LoadBalancer externo, asegúrate de definir externalTrafficPolicy: Local. Si se usa externalTrafficPolicy: Cluster, se inhabilita el balanceo de carga ponderado, ya que el paquete se puede enrutar, después del balanceador de carga, a un nodo diferente.

Inhabilitar el balanceo de carga ponderado

Para distribuir las nuevas conexiones a los nodos independientemente del número de pods de servicio que haya en cada nodo, inhabilita el balanceo de carga ponderado quitando la anotación networking.gke.io/weighted-load-balancing: "pods-per-node" del manifiesto de servicio.

Verificar el servicio LoadBalancer externo y sus componentes

  1. Comprueba que tu servicio se esté ejecutando:

    kubectl get svc store-v1-lb-svc
    

    El resultado debería ser similar al siguiente:

    NAME               TYPE           CLUSTER-IP        EXTERNAL-IP     PORT(S)          AGE
    store-v1-lb-svc   LoadBalancer   10.44.196.160     35.193.28.231   8080:32466/TCP   11m
    

    GKE ha asignado un EXTERNAL_IP al balanceador de carga de red de paso a través externo.

  2. Prueba a conectarte al balanceador de carga:

    curl EXTERNAL_IP:PORT
    

    Haz los cambios siguientes:

    • EXTERNAL_IP: la dirección IP asignada al balanceador de carga de red de paso a través externo.
    • PORT: número de puerto asignado al balanceador de carga de red de paso a través externo.

    El resultado debería ser similar al siguiente:

    Hostname: store-v1-lb-svc-cdb9bb4d6-hflxd
    
    Pod Information:
      -no pod information available-
    
    Server values:
      server_version=nginx: 1.13.3 - lua: 10008
    
    Request Information:
      client_address=10.128.0.50
      method=GET
      real path=/
      query=
      request_version=1.1
      request_scheme=http
      request_uri=EXTERNAL_IP
    
    Request Headers:
      accept=*/*
      host=EXTERNAL_IP
      user-agent=curl/7.81.0
    
    Request Body:
      -no body in request-
    
    
  3. Comprueba tu servicio LoadBalancer y su conjunto de anotaciones que describen sus Google Cloud recursos:

    kubectl describe svc store-v1-lb-svc
    

    El resultado debería ser similar al siguiente:

    Name:                     my-service-external
    Namespace:                default
    Labels:                   <none>
    Annotations:              cloud.google.com/l4-rbs: enabled
                              cloud.google.com/neg-status: {"network_endpoint_groups":{"0":"k8s2-qvveq1d8-default-my-service-ext-5s55db85"},"zones":["us-central1-c"]} #This annotation appears in the output only if the service uses NEG backends.
                              networking.gke.io/weighted-load-balancing: pods-per-node #This annotation appears in the output only if weighted load balancing is enabled.
                              service.kubernetes.io/backend-service: k8s2-qvveq1d8-default-my-service-ext-5s55db85
                              service.kubernetes.io/firewall-rule: k8s2-qvveq1d8-default-my-service-ext-5s55db85
                              service.kubernetes.io/firewall-rule-for-hc: k8s2-qvveq1d8-default-my-service-ext-5s55db85-fw
                              service.kubernetes.io/healthcheck: k8s2-qvveq1d8-default-my-service-ext-5s55db85
                              service.kubernetes.io/tcp-forwarding-rule: a808124abf8ce406ca51ab3d4e7d0b7d
    Selector:                 app=my-app
    Type:                     LoadBalancer
    IP Family Policy:         SingleStack
    IP Families:              IPv4
    IP:                       10.18.102.23
    IPs:                      10.18.102.23
    LoadBalancer Ingress:     35.184.160.229
    Port:                     tcp-port  8080/TCP
    TargetPort:               8080/TCP
    NodePort:                 tcp-port  31864/TCP
    Endpoints:                10.20.1.28:8080,10.20.1.29:8080
    Session Affinity:         None
    External Traffic Policy:  Local
    HealthCheck NodePort:     30394
    
    Events:
      Type    Reason                Age                    From                     Message
      ----    ------                ----                   ----                     -------
      Normal  ADD                   4m55s                  loadbalancer-controller  default/my-service-ext
    

    Hay varios campos que indican que se han creado correctamente un balanceador de carga de red de paso a través externo basado en un servicio de backend y sus recursos de Google Cloud :

    • Campo Events. Este campo está vacío cuando el servicio LoadBalancer y sus recursos se han creado correctamente. Si se ha producido un error, se mostrará en esta sección.
    • Lista de Annotations habilitados: GKE añade la siguiente lista de anotaciones de solo lectura al manifiesto de Service. Cada anotación cuyo nombre empiece por service.kubernetes.io/ se usa para indicar el nombre de unGoogle Cloud recurso creado como parte del balanceador de carga o para admitirlo.

      • La anotación networking.gke.io/weighted-load-balancing: pods-per-node indica que se ha aplicado el balanceo de carga ponderado y que el balanceador de carga distribuye el tráfico a los pods de backend en función del número de pods que se ejecutan en cada nodo.
      • La anotación service.kubernetes.io/backend-service indica el nombre del servicio de backend del balanceador de carga.
      • La anotación service.kubernetes.io/healthcheck indica el nombre de la comprobación del estado del balanceador de carga que utiliza el servicio de backend.
      • La anotación service.kubernetes.io/tcp-forwarding-rule o service.kubernetes.io/udp-forwarding-rule indica el nombre de la regla de reenvío del balanceador de carga.
      • La anotación service.kubernetes.io/firewall-rule indica el nombre de la regla de cortafuegos creada para permitir el tráfico a los nodos del clúster. Los intervalos de origen de esta regla de cortafuegos se pueden personalizar con spec.loadBalancerSourceRanges[]. Para obtener más información sobre las reglas de cortafuegos de los servicios LoadBalancer, consulta Reglas de cortafuegos y lista de permitidos de direcciones IP de origen.
      • La anotación service.kubernetes.io/firewall-rule-for-hc indica el nombre de la regla de cortafuegos necesaria para las comprobaciones del estado del balanceador de carga.
      • La anotación cloud.google.com/neg-status indica tanto los NEG que utiliza el balanceador de carga como sus zonas. Esta anotación solo está presente cuando se cumplen estas dos condiciones:

        • El clúster ejecutaba la versión 1.32.2-gke.1652000 de GKE o una posterior cuando se aplicó el manifiesto al clúster.
        • La anotación cloud.google.com/l4-rbs: "enabled" estaba presente en el manifiesto de Service cuando se aplicó al clúster.
  4. Verifica que se hayan creado recursos de balanceador de carga y reglas de cortafuegos para el servicio LoadBalancer externo:

    • Para ver la regla de reenvío, ejecuta el siguiente comando:

        gcloud compute forwarding-rules describe FWD_RULE_NAME \
          --region=REGION_NAME
      

      Haz los cambios siguientes:

      • FWD_RULE_NAME: el nombre de la regla de reenvío proporcionado por las anotaciones de solo lectura service.kubernetes.io/tcp-forwarding-rule o service.kubernetes.io/udp-forwarding-rule. Para consultar estas anotaciones, ejecuta kubectl describe svc SERVICE_NAME.
      • REGION_NAME: la Google Cloud región que contiene el clúster. En el caso de los clústeres zonales, la región contiene la zona que usa el clúster.
    • Para ver el servicio de backend, ejecuta el siguiente comando:

      gcloud compute backend-services describe BACKEND_SERVICE_NAME \
        --region=REGION_NAME
      

      Haz los cambios siguientes:

      • BACKEND_SERVICE_NAME: el nombre del servicio backend proporcionado por la anotación service.kubernetes.io/backend-service de solo lectura. Para comprobar esta anotación de solo lectura, ejecuta kubectl describe svc SERVICE_NAME.
      • REGION_NAME: la Google Cloud región que contiene el clúster. En el caso de los clústeres zonales, la región contiene la zona que usa el clúster.
    • Para ver la comprobación del estado del balanceador de carga, ejecuta el siguiente comando:

      gcloud compute health-checks describe HEALTH_CHECK_NAME \
        --region=REGION_NAME
      

      Haz los cambios siguientes:

      • HEALTH_CHECK_NAME: el nombre de la comprobación de estado del balanceador de carga. El nombre de la comprobación del estado se proporciona mediante la anotación de solo lectura service.kubernetes.io/healthcheck. Para comprobar esta anotación de solo lectura, ejecuta kubectl describe svc SERVICE_NAME.
      • REGION_NAME: la Google Cloud región que contiene el clúster. En el caso de los clústeres zonales, la región contiene la zona que usa el clúster.
    • Para ver las reglas de cortafuegos, ejecuta los siguientes comandos:

      gcloud compute firewall-rules describe FIREWALL_RULE_NAME \
      gcloud compute firewall-rules describe HEALTH_CHECK_FIREWALL_RULE_NAME
      

      Haz los cambios siguientes:

      • FIREWALL_RULE_NAME: el nombre de la regla de firewall que permite el tráfico al balanceador de carga. El nombre de esta regla de firewall se proporciona mediante la anotación service.kubernetes.io/firewall-rule de solo lectura. Para comprobar esta anotación de solo lectura, ejecuta kubectl describe svc SERVICE_NAME.
      • HEALTH_CHECK_FIREWALL_RULE_NAME: el nombre de la regla de cortafuegos que permite las comprobaciones de estado de los backends del balanceador de carga (los nodos del clúster). El nombre de esta regla de cortafuegos se proporciona mediante la anotación de solo lectura service.kubernetes.io/firewall-rule-for-hc. Para comprobar esta anotación de solo lectura, ejecuta kubectl describe svc SERVICE_NAME.
    • Para ver los NEG del balanceador de carga, ejecuta el siguiente comando:

      gcloud compute network-endpoint-groups describe NEG_NAME \
        --zone=ZONE_NAME
      

      Haz los cambios siguientes:

      • NEG_NAME: el nombre del NEG del balanceador de carga. El nombre del NEG se proporciona mediante la anotación cloud.google.com/neg-status de solo lectura. Para comprobar esta anotación de solo lectura, ejecuta el comando kubectl describe svc SERVICE_NAME. La anotación contiene datos estructurados con información sobre los nombres y las zonas de los NEG que utiliza el balanceador de carga. En el caso de los clústeres zonales, esta anotación contiene información sobre un NEG. En el caso de los clústeres regionales, esta anotación contiene información sobre un NEG de cada zona en la que se encuentra el clúster.
      • ZONE_NAME: la zona Google Cloud que contiene el NEG.

Elimina el servicio LoadBalancer externo.

Para eliminar el servicio store-v1-lb-svc de LoadBalancer externo de ejemplo, usa el siguiente comando:

kubectl delete service store-v1-lb-svc

GKE elimina automáticamente todos los recursos del balanceador de carga que haya creado para el servicio LoadBalancer externo.

Migrar a backends de NEG de GCE_VM_IP

Los servicios LoadBalancer externos con la anotación cloud.google.com/l4-rbs: "enabled" crean balanceadores de carga de red de paso a través externos basados en servicios de backend que usan backends de grupos de puntos finales de red o de grupos de instancias, según la versión de GKE del clúster:GCE_VM_IP

  • Si el manifiesto de Service se ha aplicado a un clúster que ejecuta la versión 1.32.2-gke.1652000 o posterior de GKE, el balanceador de carga de red de pases externo resultante utiliza GCE_VM_IPbackends de grupos de puntos finales de red (NEG).

  • Si el manifiesto de Service se ha aplicado a un clúster que ejecuta una versión anterior de GKE, el balanceador de carga de red de pases externo resultante utiliza backends de grupos de instancias no gestionados.

Para obtener más información, consulta la sección Agrupación de nodos del artículo sobre los servicios LoadBalancer.

Puedes crear un servicio LoadBalancer externo basado en un balanceador de carga de red de paso a través externo basado en un servicio de backend que utilice GCE_VM_IP backends de NEG si tu servicio utiliza uno de los siguientes balanceadores de carga:

  • Un balanceador de carga de red de paso a través externo basado en servicios de backend con backends de grupos de instancias
  • Un balanceador de carga de red de paso a través externo basado en grupos de destino

Para cambiar a un balanceador de carga de red de paso a través externo basado en un servicio de backend que use GCE_VM_IPbackends de NEG:

  1. Si aún no lo has hecho, actualiza tu clúster a la versión 1.32.2-gke.1652000 de GKE o una posterior.

  2. Identifica el servicio LoadBalancer externo al que quieres cambiar a un balanceador de carga de red de paso a través externo basado en un servicio de backend que use backends de GCE_VM_IP NEG. Describe el servicio con el siguiente comando:

    kubectl describe svc SERVICE_NAME -n SERVICE_NAMESPACE
    

    Haz los cambios siguientes:

    • SERVICE_NAME: el nombre del servicio LoadBalancer externo.

    • SERVICE_NAMESPACE: el espacio de nombres del servicio LoadBalancer externo.

    En la salida del comando, anota la dirección IPv4 externa que usa el balanceador de carga en la columna EXTERNAL-IP.

  3. Recupera el manifiesto de servicio del servicio LoadBalancer:

    • Lo mejor es que tengas el manifiesto de servicio original que aplicaste al clúster en el pasado. Por ejemplo, puedes tenerlo en un repositorio de control de versiones.

    • Si no tienes el manifiesto de servicio original, haz lo siguiente:

      • Ejecuta el siguiente comando para obtener una copia YAML del manifiesto de Service que representa la implementación actual del balanceador de carga:

        kubectl get svc SERVICE_NAME -n SERVICE_NAMESPACE -o yaml
        
      • Copia el archivo YAML de manifiesto en un editor de texto. Elimina el atributo status y los siguientes atributos metadata:

        • Todas las anotaciones siguientes:
          • Anotación kubectl.kubernetes.io/last-applied-configuration
          • Todas las anotaciones que empiezan por service.kubernetes.io
        • creationTimestamp
        • finalizers
        • resourceVersion
        • uid
    • Asegúrate de que el archivo de manifiesto incluya la cloud.google.com/l4-rbs: "enabled" anotación. Si vas a migrar desde un balanceador de carga de red de paso a través externo basado en un grupo de destino, debes añadir la anotación.

    Anota la ruta local que contiene el archivo de manifiesto de servicio. En el resto de este procedimiento, se hace referencia a la ruta como MANIFEST_FILE_PATH.

  4. Configura un recurso de dirección IPv4 externa estática para que contenga la dirección IPv4 externa que usa el balanceador de carga:

    gcloud compute addresses create IP_ADDRESS_NAME --region=CLUSTER_REGION --addresses LB_EXTERNAL_IP
    

    Haz los cambios siguientes:

    • IP_ADDRESS_NAME: el nombre de la dirección IP externa estática. El nombre debe cumplir las convenciones de nomenclatura de los recursos de Compute Engine.

    • CLUSTER_REGION: la región que contiene el clúster. En el caso de los clústeres zonales, se trata de la región que contiene la zona del clúster.

    • LB_EXTERNAL_IP: la dirección IPv4 externa que usa el balanceador de carga actual, determinada en el segundo paso de este procedimiento.

  5. Verifica que se haya creado el recurso de dirección IPv4 externa estática:

    gcloud compute addresses describe IP_ADDRESS_NAME --region=CLUSTER_REGION
    

    Sustituye las variables como se indica en el paso anterior.

  6. Elimina el servicio que ya tienes:

    kubectl delete svc SERVICE_NAME -n SERVICE_NAMESPACE
    
  7. Añade la siguiente anotación al archivo de manifiesto MANIFEST_FILE_PATH Service:

    networking.gke.io/load-balancer-ip-addresses: IP_ADDRESS_NAME
    

    Para obtener más información sobre esta anotación, consulta Direcciones IP estáticas en los parámetros del servicio LoadBalancer.

  8. Aplica el manifiesto de servicio actualizado al clúster:

    kubectl apply -f MANIFEST_FILE_PATH
    
  9. (Opcional) Libera el recurso de dirección IPv4 estática.

    gcloud compute addresses delete IP_ADDRESS_NAME --region=CLUSTER_REGION
    

Solucionar problemas

En esta sección se describe un problema que puede surgir al configurar el balanceo de carga ponderado.

Política de tráfico externo incorrecta para el balanceo de carga ponderado

Si no defines externalTrafficPolicy: Local al habilitar el balanceo de carga ponderado, es posible que recibas un evento de advertencia al describir el servicio con el siguiente comando:

kubectl describe svc store-v1-lb-svc`
Events:
  Type     Reason                   Age      From                     Message
  ----     ------                   ----     ----                     -------
  Warning  UnsupportedConfiguration 4m55s    loadbalancer-controller  Weighted load balancing by pods-per-node has no effect with External Traffic Policy: Cluster.

Para habilitar el balanceo de carga ponderado de forma eficaz, debes definir externalTrafficPolicy: Local.

Siguientes pasos