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
- Sesión adhesiva
- Comprobación de estado
- Protocolo HTTP
- Ajuste dinámico de ponderación del backend ECS
- Capacidad de pass-through
- Lista blanca
- Red de host
Interconexión 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 |
Obligatorio cuando los balanceadores de carga se crean automáticamente. Ejemplo:
|
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 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:
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
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.
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 |
Tiempo de espera de sesión adhesiva. |
v1.9 o posterior |
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
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.
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 |
Elementos de configuración de comprobación de estado de ELB. |
v1.9 o posterior |
|
kubernetes.io/elb.health-check-options |
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
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
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.
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 |
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
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
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.
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 |
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
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:
|
v1.9 o posterior |
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
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.
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.
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.
|
eip_type |
Sí para los balanceadores de carga de red pública |
String |
Tipo de la EIP.
|
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 |
Sí |
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 |
Sí |
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" ] |
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. |
Parámetro |
Obligatorio |
Tipo |
Descripción |
---|---|---|---|
target_service_port |
Sí |
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. |
Parámetro |
Obligatorio |
Tipo |
Descripción |
---|---|---|---|
persistence_timeout |
Sí |
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 |