Estos contenidos se han traducido de forma automática para su comodidad, pero Huawei Cloud no garantiza la exactitud de estos. Para consultar los contenidos originales, acceda a la versión en inglés.
Centro de ayuda/ Cloud Container Engine/ Guía del usuario/ Red/ Service/ LoadBalancer/ Uso de anotaciones para configurar el balanceo de carga
Actualización más reciente 2024-09-10 GMT+08:00

Uso de anotaciones para configurar el balanceo de carga

Puede agregar anotaciones a un archivo YAML para usar algunas funciones avanzadas de CCE. En esta sección se describen las anotaciones disponibles cuando se crea un servicio de LoadBalancer.

Interconexión con ELB

Tabla 1 Anotaciones para interconectar con ELB

Parámetro

Tipo

Descripción

Versión de clúster admitida

kubernetes.io/elb.class

String

Seleccione un tipo de balanceador de carga adecuado.

El valor puede ser:

v1.9 o posterior

kubernetes.io/elb.id

String

Obligatorio cuando se va a asociar un balanceador de carga existente.

ID de un balanceador de carga.

Cómo obtenerlo:

En la consola de gestión, haga clic en Service List y elija Networking > Elastic Load Balance. Haga clic en el nombre del balanceador de carga de destino. En la página de ficha Summary, encuentre y copie el ID.

NOTA:

El sistema se conecta preferentemente al balanceador de carga basándose en el campo kubernetes.io/elb.id. Si no se especifica este campo, se utiliza el campo spec.loadBalancerIP (opcional y disponible solo en 1.23 y versiones anteriores).

No utilice el campo spec.loadBalancerIP para conectarse al balanceador de carga. Este campo será descartado por Kubernetes. Para obtener más información, consulte Deprecation.

v1.9 o posterior

kubernetes.io/elb.autocreate

Tabla 9

Obligatorio cuando los balanceadores de carga se crean automáticamente.

Ejemplo:

  • Si se creará automáticamente un balanceador de carga de red pública, establezca este parámetro en el siguiente valor:

    {"type":"public","bandwidth_name":"cce-bandwidth-1551163379627","bandwidth_chargemode":"bandwidth","bandwidth_size":5,"bandwidth_sharetype":"PER","eip_type":"5_bgp","name":"james"}

  • Si se creará automáticamente un balanceador de carga de red privada, establezca este parámetro en el siguiente valor:

    {"type":"inner","name":"A-location-d-test"}

v1.9 o posterior

kubernetes.io/elb.enterpriseID

String

Opcional cuando los balanceadores de carga se crean automáticamente.

Los clústeres de v1.15 y versiones posteriores admiten este campo. En clústeres anteriores a v1.15, los balanceadores de carga se crean en el proyecto predeterminado de forma predeterminada.

Este parámetro indica el ID del proyecto de empresa en el que se creará el balanceador de carga de ELB.

Si este parámetro no se especifica o se establece en 0, los recursos estarán enlazados al proyecto de empresa predeterminado.

Cómo obtenerlo:

Inicie sesión en la consola de gestión y seleccione Enterprise > Project Management en la barra de menú superior. En la lista que se muestra, haga clic en el nombre del proyecto de empresa de destino y copie el ID en la página de detalles del proyecto de empresa.

v1.15 o posterior

kubernetes.io/elb.subnet-id

String

Opcional cuando los balanceadores de carga se crean automáticamente.

ID de la subred donde se encuentra el clúster. El valor puede contener de 1 a 100 caracteres.

  • Obligatorio cuando se va a crear automáticamente un clúster de v1.11.7-r0 o anterior.
  • Opcional para los clústeres posteriores a v1.11.7-r0.

Obligatorio para las versiones anteriores a la v1.11.7-r0

Descartado en las versiones posteriores a la v1.11.7-r0

kubernetes.io/elb.lb-algorithm

String

Especifica el algoritmo de equilibrio de carga del grupo de servidores backend. El valor predeterminado es ROUND_ROBIN.

Opciones:

  • ROUND_ROBIN: algoritmo de round robin ponderado
  • LEAST_CONNECTIONS: algoritmo de conexiones mínimas ponderadas
  • SOURCE_IP: algoritmo de hash IP de origen
NOTA:

Si este parámetro se establece en SOURCE_IP, la configuración de ponderación (campo weight) de los servidores backend vinculados al grupo de servidores backend no es válida y no se puede habilitar la sesión adhesiva.

v1.9 o posterior

A continuación se muestra cómo utilizar las anotaciones anteriores:

  • Asociar un balanceador de carga existente. Para obtener más información, véase Uso de kubectl para crear un Service (Uso de un balanceador de carga existente).
    apiVersion: v1 
    kind: Service 
    metadata: 
      name: nginx
      annotations:
        kubernetes.io/elb.id: <your_elb_id>                         # ELB ID. Replace it with the actual value.
        kubernetes.io/elb.class: performance                        # Load balancer type
        kubernetes.io/elb.lb-algorithm: ROUND_ROBIN                   # Load balancer algorithm
    spec:
      selector: 
         app: nginx
      ports: 
      - name: service0 
        port: 80
        protocol: TCP 
        targetPort: 80
      type: LoadBalancer
  • Creación automática de un balanceador de carga. Para obtener más información, véase Uso de kubectl para crear un Service (creación automática de un balanceador de carga).
    Balanceador de carga compartido:
    apiVersion: v1 
    kind: Service 
    metadata: 
      annotations:   
        kubernetes.io/elb.class: union
        kubernetes.io/elb.autocreate: '{
          "type": "public",
          "bandwidth_name": "cce-bandwidth-1551163379627",
          "bandwidth_chargemode": "bandwidth",
          "bandwidth_size": 5,
          "bandwidth_sharetype": "PER",
          "eip_type": "5_bgp"
        }'
        kubernetes.io/elb.enterpriseID: 0               # ID of the enterprise project to which the load balancer belongs
        kubernetes.io/elb.lb-algorithm: ROUND_ROBIN     # Load balancer algorithm
      labels: 
        app: nginx 
      name: nginx 
    spec: 
      ports: 
      - name: service0 
        port: 80
        protocol: TCP 
        targetPort: 80
      selector: 
        app: nginx 
      type: LoadBalancer
    Balanceador de carga dedicado:
    apiVersion: v1
    kind: Service
    metadata:
      name: nginx
      labels:
        app: nginx
      namespace: default
      annotations:
        kubernetes.io/elb.class: performance
        kubernetes.io/elb.autocreate: '{
          "type": "public",
          "bandwidth_name": "cce-bandwidth-1626694478577",
          "bandwidth_chargemode": "bandwidth",
          "bandwidth_size": 5,
          "bandwidth_sharetype": "PER",
          "eip_type": "5_bgp",
          "available_zone": [
             ""
          ],
          "l4_flavor_name": "L4_flavor.elb.s1.small"
        }'
        kubernetes.io/elb.enterpriseID: 0               # ID of the enterprise project to which the load balancer belongs
        kubernetes.io/elb.lb-algorithm: ROUND_ROBIN     # Load balancer algorithm
    spec:
      selector:
        app: nginx
      ports:
      - name: cce-service-0
        targetPort: 80
        nodePort: 0
        port: 80
        protocol: TCP
      type: LoadBalancer

Sesión adhesiva

Tabla 2 Anotaciones para sesión adhesiva

Parámetro

Tipo

Descripción

Versión de clúster admitida

kubernetes.io/elb.session-affinity-mode

String

Se admite la sesión adhesiva basada en la dirección IP de origen. Es decir, las solicitudes de acceso desde la misma dirección IP se reenvían al mismo servidor backend.

  • Deshabilitar sesión adhesiva: No configure este parámetro.
  • Activar la sesión adhesiva: Establezca este parámetro en SOURCE_IP para indicar que la sesión adhesiva se basa en la dirección IP de origen.
NOTA:

Cuando kubernetes.io/elb.lb-algorithm se establece en SOURCE_IP (algoritmo de dirección IP de origen), no se puede activar la sesión adhesiva.

v1.9 o posterior

kubernetes.io/elb.session-affinity-option

Tabla 12

Tiempo de espera de sesión adhesiva.

v1.9 o posterior

A continuación se muestra cómo utilizar las anotaciones anteriores:
apiVersion: v1 
kind: Service 
metadata: 
  name: nginx
  annotations:
    kubernetes.io/elb.id: <your_elb_id>                         # ELB ID. Replace it with the actual value.
    kubernetes.io/elb.class: performance                   # Load balancer type
    kubernetes.io/elb.session-affinity-mode: SOURCE_IP          # The sticky session type is source IP address.
    kubernetes.io/elb.session-affinity-option: '{"persistence_timeout": "30"}'     # Stickiness duration (min)
spec:
  selector: 
     app: nginx
  ports: 
  - name: service0 
    port: 80
    protocol: TCP 
    targetPort: 80
  type: LoadBalancer

Comprobación de estado

Tabla 3 Anotaciones para la comprobación de estado

Parámetro

Tipo

Descripción

Versión de clúster admitida

kubernetes.io/elb.health-check-flag

String

Si se debe habilitar la comprobación de estado del ELB.

  • Habilitar la comprobación de estado: Deje en blanco este parámetro o configúrelo en on.
  • Deshabilitar la comprobación de estado: Establezca este parámetro en off.

Si este parámetro está habilitado, el campo kubernetes.io/elb.health-check-option también debe especificarse al mismo tiempo.

v1.9 o posterior

kubernetes.io/elb.health-check-option

Tabla 10

Elementos de configuración de comprobación de estado de ELB.

v1.9 o posterior

kubernetes.io/elb.health-check-options

Tabla 11

Concepto de configuración de comprobación de estado de ELB. Cada puerto de Service se puede configurar por separado y solo puede configurar algunos puertos.

NOTA:

kubernetes.io/elb.health-check-option y kubernetes.io/elb.health-check-options no se pueden configurar al mismo tiempo.

v1.19.16-r5 o posterior

v1.21.8-r0 o posterior

v1.23.6-r0 o posterior

v1.25.2-r0 o posterior

  • A continuación, se muestra cómo utilizar kubernetes.io/elb.health-check-option:
    apiVersion: v1 
    kind: Service 
    metadata: 
      name: nginx
      annotations:
        kubernetes.io/elb.id: <your_elb_id>                         # ELB ID. Replace it with the actual value.
        kubernetes.io/elb.class: performance                   # Load balancer type
        kubernetes.io/elb.health-check-flag: 'on'                   # Enable the ELB health check function.
        kubernetes.io/elb.health-check-option: '{
          "protocol":"TCP",
          "delay":"5",
          "timeout":"10",
          "max_retries":"3"
        }'
    spec:
      selector: 
         app: nginx
      ports: 
      - name: service0 
        port: 80
        protocol: TCP 
        targetPort: 80
      type: LoadBalancer
  • Para obtener más información sobre cómo usar kubernetes.io/elb.health-check-options en Configuración de la comprobación de estado para varios puertos.

Protocolo HTTP

Tabla 4 Anotaciones para el uso de protocolos HTTP

Parámetro

Tipo

Descripción

Versión de clúster admitida

kubernetes.io/elb.protocol-port

String

Puerto de configuración de reenvío de capa 7 utilizado por el Service.

v1.19.16 o posterior

kubernetes.io/elb.cert-id

String

Certificado HTTP utilizado por el Service para el reenvío de capa 7.

v1.19.16 o posterior

Para obtener más información sobre los escenarios de la aplicación, consulte Service usando HTTP.

Ajuste dinámico de ponderación del backend ECS

Tabla 5 Anotaciones para ajustar dinámicamente la ponderación del ECS backend

Parámetro

Tipo

Descripción

Versión de clúster admitida

kubernetes.io/elb.adaptive-weight

String

Ajusta dinámicamente la ponderación del ECS backend del balanceador de carga basado en pods. Las solicitudes recibidas por cada pod son más equilibradas.

  • true: activado
  • false: desactivado

Este parámetro solo se aplica a clústeres de v1.21 o posterior y no es válido en redes de passthrough.

v1.21 o posterior

A continuación se muestra cómo utilizar las anotaciones anteriores:
apiVersion: v1 
kind: Service 
metadata: 
  name: nginx
  annotations:
    kubernetes.io/elb.id: <your_elb_id>                         # ELB ID. Replace it with the actual value.
    kubernetes.io/elb.class: performance                   # Load balancer type
    kubernetes.io/elb.adaptive-weight: 'true'                   # Enable dynamic adjustment of the weight of the backend ECS.
spec:
  selector: 
     app: nginx
  ports: 
  - name: service0 
    port: 80
    protocol: TCP 
    targetPort: 80
  type: LoadBalancer

Capacidad de pass-through

Tabla 6 Anotaciones para la capacidad de pass-through

Parámetro

Tipo

Descripción

Versión de clúster admitida

kubernetes.io/elb.pass-through

String

Si las solicitudes de acceso desde el clúster al Service pasan a través del balanceador de carga de ELB.

v1.19 o posterior

Para obtener más información sobre los escenarios de la aplicación, consulte Habilitación de redes de paso a través para los servicios de LoadBalancer.

Lista blanca

Tabla 7 Anotaciones para la lista de acceso de ELB

Parámetro

Tipo

Descripción

Versión de clúster admitida

kubernetes.io/elb.acl-id

String

Este parámetro es obligatorio cuando se establece una lista blanca de direcciones IP para un balanceador de carga. El valor de este parámetro es el ID de grupo de direcciones IP del balanceador de carga. Para obtener más información, consulte Grupo de direcciones IP.

Este parámetro solo tiene efecto para los balanceadores de carga dedicados y solo tiene efecto cuando se crea un Service o se especifica un nuevo puerto de servicio (oyente).

Cómo obtenerlo:

Inicie sesión en la consola. En Service List, seleccione Networking > Elastic Load Balance. En la Consola de red, elija Elastic Load Balance > IP Address Groups y copie el ID del grupo de direcciones IP de destino.

v1.19.16

v1.21.4

kubernetes.io/elb.acl-status

String

Este parámetro es obligatorio cuando se establece una lista blanca de direcciones IP para un balanceador de carga. El valor es on, que indica que el control de acceso está habilitado.

Este parámetro solo tiene efecto para los balanceadores de carga dedicados y solo tiene efecto cuando se crea un Service o se especifica un nuevo puerto de servicio (oyente).

v1.19.16

v1.21.4

kubernetes.io/elb.acl-type

String

Este parámetro es obligatorio cuando se establece la lista blanca de direcciones IP para un balanceador de carga.

  • black: indica la lista negra. El grupo de direcciones IP seleccionado no puede acceder a la dirección de ELB.
  • white: indica la lista blanca. Solo el grupo de direcciones IP seleccionado puede acceder a la dirección de ELB.

Este parámetro solo tiene efecto para los balanceadores de carga dedicados y solo tiene efecto cuando se crea un Service o se especifica un nuevo puerto de servicio (oyente).

v1.19.16

v1.21.4

A continuación se muestra cómo utilizar las anotaciones anteriores:
apiVersion: v1 
kind: Service 
metadata: 
  name: nginx
  annotations:
    kubernetes.io/elb.id: <your_elb_id>                    # ELB ID. Replace it with the actual value.
    kubernetes.io/elb.class: performance                   # Load balancer type
    kubernetes.io/elb.acl-id: <your_acl_id>               # ELB IP address group ID
    kubernetes.io/elb.acl-status: 'on'                    # Enable access control.
    kubernetes.io/elb.acl-type: 'white'                   # Whitelist control
spec:
  selector: 
     app: nginx
  ports: 
  - name: service0 
    port: 80
    protocol: TCP 
    targetPort: 80
  type: LoadBalancer

Red de host

Tabla 8 Anotaciones para la red host

Parámetro

Tipo

Descripción

Versión de clúster admitida

kubernetes.io/hws-hostNetwork

String

Si el pod usa hostNetwork, el ELB reenvía la solicitud a la red anfitriona después de usar esta anotación.

Opciones:

  • true: activado
  • false (predeterminado): desactivado

v1.9 o posterior

A continuación se muestra cómo utilizar las anotaciones anteriores:
apiVersion: v1 
kind: Service 
metadata: 
  name: nginx
  annotations:
    kubernetes.io/elb.id: <your_elb_id>                         # ELB ID. Replace it with the actual value.
    kubernetes.io/elb.class: performance                   # Load balancer type
    kubernetes.io/hws-hostNetwork: 'true'                     # The load balancer forwards the request to the host network.
spec:
  selector: 
     app: nginx
  ports: 
  - name: service0 
    port: 80
    protocol: TCP 
    targetPort: 80
  type: LoadBalancer

Estructura de datos

Tabla 9 Estructura de datos del campo elb.autocreate

Parámetro

Obligatorio

Tipo

Descripción

name

No

String

Nombre del balanceador de carga creado automáticamente.

Rango de valores: de 1 a 64 caracteres, incluidas las letras minúsculas, los dígitos y los guiones bajos (_). El valor debe comenzar con una letra minúscula y terminar con una letra minúscula o un dígito.

Predeterminado: cce-lb+service.UID

type

No

String

Tipo de red del balanceador de carga.

  • public: balanceador de carga de red pública
  • inner: balanceador de carga de red privada

Predeterminado: inner

bandwidth_name

Sí para los balanceadores de carga de red pública

String

Nombre del ancho de banda. El valor predeterminado es cce-bandwidth-******.

Rango de valores: de 1 a 64 caracteres, incluidas las letras minúsculas, los dígitos y los guiones bajos (_). El valor debe comenzar con una letra minúscula y terminar con una letra minúscula o un dígito.

bandwidth_chargemode

No

String

Modo de facturación de ancho de banda.

  • bandwidth: facturado por ancho de banda
  • traffic: facturado por tráfico

Predeterminado: bandwidth

bandwidth_size

Sí para los balanceadores de carga de red pública

Integer

Tamaño del ancho de banda. El valor predeterminado es de 1 a 2000 Mbit/s. Configure este parámetro en función del rango de ancho de banda permitido en su región.

bandwidth_sharetype

Sí para los balanceadores de carga de red pública

String

Modo de uso compartido de ancho de banda.

  • PER: Ancho de banda dedicado

eip_type

Sí para los balanceadores de carga de red pública

String

Tipo de la EIP.

  • 5_telcom: China Telecom
  • 5_union: China Unicom
  • 5_bgp: BGP dinámico
  • 5_sbgp: BGP estático

vip_subnet_cidr_id

No

String

Subred donde se encuentra el balanceador de carga. Este campo es compatible con clústeres de v1.21 o posterior.

Si no se especifica este parámetro, el balanceador de carga de ELB y el clúster están en la misma subred.

available_zone

Array of strings

AZ donde se encuentra el balanceador de carga.

Puede obtener todas las AZ soportadas por consultar la lista de AZ.

Este parámetro solo está disponible para los balanceadores de carga dedicados.

l4_flavor_name

String

Nombre de la variante del balanceador de carga de capa 4.

Puede obtener todos los tipos admitidos consultando la lista de variantes.

Este parámetro solo está disponible para los balanceadores de carga dedicados.

l7_flavor_name

No

String

Nombre de la variante del balanceador de carga de capa 7.

Puede obtener todos los tipos admitidos consultando la lista de variantes.

Este parámetro solo está disponible para los balanceadores de carga dedicados. El valor de este parámetro debe ser el mismo que el de l4_flavor_name, es decir, ambas son especificaciones elásticas o especificaciones fijas.

elb_virsubnet_ids

No

Array of strings

Subred donde se encuentra el servidor de backend del balanceador de carga. Si este parámetro se deja en blanco, se utiliza la subred de clúster predeterminada. Los balanceadores de carga ocupan un número diferente de direcciones IP de subred según sus especificaciones. Por lo tanto, no se recomienda utilizar los bloques CIDR de subred de otros recursos (como clústeres y nodos) como el bloque CIDR del balanceador de carga.

Este parámetro solo está disponible para los balanceadores de carga dedicados.

Por ejemplo:

"elb_virsubnet_ids": [
   "14567f27-8ae4-42b8-ae47-9f847a4690dd"
 ]
Tabla 10 Descripción de la estructura de datos del campo elb.health-check-option

Parámetro

Obligatorio

Tipo

Descripción

delay

No

String

Tiempo de espera inicial (en segundos) para iniciar la comprobación de estado.

Rango de valores: 1 a 50. Valor predeterminado: 5

timeout

No

String

Tiempo de espera de la comprobación de estado, en segundos.

Rango de valores: 1 a 50. Valor predeterminado: 10

max_retries

No

String

Número máximo de reintentos de comprobación de estado.

Rango de valores: 1 a 10. Valor predeterminado: 3

protocol

No

String

Protocolo de comprobación de estado.

Opciones de valor: TCP o HTTP

path

No

String

URL de comprobación de estado. Este parámetro debe configurarse cuando el protocolo es HTTP.

Valor predeterminado: /

El valor puede contener de 1 a 10,000 caracteres.

Tabla 11 Descripción de la estructura de datos del campo elb.health-check-options

Parámetro

Obligatorio

Tipo

Descripción

target_service_port

String

Puerto para comprobación de estado especificado por spec.ports. El valor consiste en el protocolo y el número de puerto, por ejemplo, TCP:80.

monitor_port

No

String

Puerto reespecificado para la comprobación de estado. Si no se especifica este parámetro, el puerto de servicio se utiliza de forma predeterminada.

NOTA:

Asegúrese de que el puerto está en el estado de escucha en el nodo donde se encuentra el pod. De lo contrario, el resultado de la comprobación de estado se verá afectado.

delay

No

String

Tiempo de espera inicial (en segundos) para iniciar la comprobación de estado.

Rango de valores: 1 a 50. Valor predeterminado: 5

timeout

No

String

Tiempo de espera de la comprobación de estado, en segundos.

Rango de valores: 1 a 50. Valor predeterminado: 10

max_retries

No

String

Número máximo de reintentos de comprobación de estado.

Rango de valores: 1 a 10. Valor predeterminado: 3

protocol

No

String

Protocolo de comprobación de estado.

Valor predeterminado: protocolo del Service asociado

Opción de valor: TCP, UDP o HTTP

path

No

String

URL de comprobación de estado. Este parámetro debe configurarse cuando el protocolo es HTTP.

Valor predeterminado: /

El valor puede contener de 1 a 10,000 caracteres.

Tabla 12 Estructura de datos del campo elb.session-affinity-option

Parámetro

Obligatorio

Tipo

Descripción

persistence_timeout

String

Tiempo de espera de sesión adhesiva, en minutos. Este parámetro solo es válido cuando elb.session-affinity-mode está establecido en SOURCE_IP.

Rango de valores: 1 a 60. Valor predeterminado: 60