Todos los productos
Search
Centro de documentos

Container Service for Kubernetes:Configure Classic Load Balancer (CLB) using annotations

Última actualización: Sep 29, 2026

Para habilitar funciones avanzadas de balanceo de carga, configure instancias de CLB, listeners y grupos de servidores backend. Para ello, agregue anotaciones a su archivo YAML del Service.

Índice

Categoría

Categoría de función

Enlace de configuración

Annotation usage notes

Typical CLB operations

Crear un load balancer

Especificar una instancia existente

Configurar el load balancer

Habilitar la protección de instancias

Typical listener operations

Configuración de persistencia de sesiones

Configuración de puertos y protocolos

Configuración avanzada

Typical backend server group operations

Gestión de configuraciones

References

Notas sobre el uso de anotaciones

  • Los valores de las anotaciones distinguen entre mayúsculas y minúsculas.

  • Antes de usar anotaciones, compruebe en este documento la versión del componente CCM compatible con cada función. Para actualizar el componente CCM, consulte Components. Para revisar el historial de cambios del componente CCM, consulte Cloud Controller Manager.

  • A partir del 11 de septiembre de 2019, el prefijo del campo annotations cambió de alicloud a alibaba-cloud.

    Ejemplo:

    Antes de la actualización: service.beta.kubernetes.io/alicloud-loadbalancer-id

    Después de la actualización: service.beta.kubernetes.io/alibaba-cloud-loadbalancer-id

    El sistema sigue siendo compatible con el prefijo alicloud. No es necesario aplicar ningún cambio.

Operaciones típicas de CLB

Crear una instancia de SLB orientada a Internet

apiVersion: v1
kind: Service
metadata:
  name: nginx
  namespace: default
spec:
  ports:
  - port: 80
    protocol: TCP
    targetPort: 80
  selector:
    run: nginx
  type: LoadBalancer

Crear una instancia de SLB orientada a la red interna

Anotación: service.beta.kubernetes.io/alibaba-cloud-loadbalancer-address-type

Descripción

Versión de CCM compatible

Especifica la instancia de SLB como orientada a la red interna. Valores válidos:

  • internet: se accede al servicio a través de la red pública. La opción IP Version correspondiente del CLB debe ser Internet-facing.

  • intranet: se accede al servicio a través de la red privada. La opción IP Version correspondiente del CLB debe ser Internal-facing.

Valor predeterminado: internet

Consulte Specify vSwitch for SLB instance para especificar manualmente un vSwitch para el CLB. Si no lo especifica, el sistema selecciona uno automáticamente según la versión de CCM:

  • Versiones anteriores a la v2.13.0: se usa de forma predeterminada el primer vSwitch configurado para el plano de control del clúster.

  • Versiones v2.13.0 y posteriores: se selecciona automáticamente uno de todos los vSwitches disponibles.

v1.9.3 y posteriores

apiVersion: v1
kind: Service
metadata:
  annotations:
    service.beta.kubernetes.io/alibaba-cloud-loadbalancer-address-type: "intranet"
  name: nginx
  namespace: default
spec:
  ports:
  - port: 80
    protocol: TCP
    targetPort: 80
  selector:
    run: nginx
  type: LoadBalancer

Especificar las especificaciones de la instancia de SLB

Anotación: varias, como se muestra en la tabla a continuación.

Anotación

Descripción

Versión de CCM compatible

service.beta.kubernetes.io/alibaba-cloud-loadbalancer-instance-charge-type

Método de facturación de la instancia. Valores válidos:

  • PayBySpec: se factura por especificación.

  • PayByCLCU: se factura por uso.

Valor predeterminado: PayBySpec

Importante
  • En Cloud Controller Manager v2.5.0 y versiones posteriores, el valor predeterminado cambia a PayByCLCU.

  • Las instancias de SLB facturadas por uso no admiten la configuración de especificaciones. Por lo tanto, no puede especificar PayByCLCU y service.beta.kubernetes.io/alibaba-cloud-loadbalancer-spec al mismo tiempo.

v2.4.0 y posteriores

service.beta.kubernetes.io/alibaba-cloud-loadbalancer-spec

Especificación de la instancia de SLB. Use este parámetro para crear una instancia de SLB con una especificación concreta o para actualizar la especificación de una instancia existente. Valores válidos:

  • slb.s1.small

  • slb.s2.small

  • slb.s2.medium

  • slb.s3.small

  • slb.s3.medium

  • slb.s3.large

Valor predeterminado: slb.s1.small

Para consultar más valores válidos, vea CreateLoadBalancer.

Importante

Si modifica la especificación del SLB en la consola de CLB (solo se admite en instancias de SLB facturadas por especificación), es posible que CCM la revierta a la especificación original. Proceda con precaución.

v1.9.3 y posteriores

apiVersion: v1
kind: Service
metadata:
  annotations:
    service.beta.kubernetes.io/alibaba-cloud-loadbalancer-instance-charge-type: "PayBySpec"
    service.beta.kubernetes.io/alibaba-cloud-loadbalancer-spec: "slb.s1.small"
  name: nginx
  namespace: default
spec:
  ports:
  - port: 443
    protocol: TCP
    targetPort: 443
  selector:
    run: nginx
  type: LoadBalancer

Usar una instancia de SLB existente

Anotación: service.beta.kubernetes.io/alibaba-cloud-loadbalancer-id

Descripción

Versión de CCM compatible

Importante
  • Para evitar comportamientos inesperados, como la indisponibilidad del clúster o la interrupción del tráfico, no reutilice las instancias de CLB del API Server ni las instancias de CLB creadas por CCM. Cree una nueva instancia manualmente en la consola de Classic Load Balancer (CLB).

  • No agregue ni modifique la anotación de reutilización en un Service de tipo LoadBalancer existente. De hacerlo, la reutilización podría fallar o impedir que se libere el load balancer creado por CCM.

ID de la instancia de SLB. Use esta anotación para especificar un CLB existente.

  • De forma predeterminada, reutilizar una instancia de SLB existente no sobrescribe los listeners. Para forzar la sobrescritura de los listeners existentes, establezca service.beta.kubernetes.io/alibaba-cloud-loadbalancer-force-override-listeners en "true". Esta configuración solo afecta a los listeners asociados con el Service actual y no interfiere con otros listeners.

    Nota

    Reutilizar un SLB existente no sobrescribe los listeners actuales de forma predeterminada por dos motivos:

    • Si el tráfico de producción está vinculado a los listeners existentes, forzar la sobrescritura puede interrumpir el servicio.

    • Actualmente, CCM admite configuraciones de backend limitadas y no gestiona escenarios complejos. Si tiene requisitos de backend complejos, configure los listeners manualmente en la consola sin sobrescribirlos.

    Por estos motivos, no se recomienda forzar la sobrescritura de listeners. Hágalo únicamente si los puertos de listener del SLB existente ya no están en uso.

  • (Versiones anteriores a la v2.10.0) Reutilizar un SLB existente no permite agregar etiquetas adicionales (annotation: service.beta.kubernetes.io/alibaba-cloud-loadbalancer-additional-resource-tags).

v1.9.3.81-gca19cd4-aliyun y posteriores

apiVersion: v1
kind: Service
metadata:
  annotations:
    service.beta.kubernetes.io/alibaba-cloud-loadbalancer-id: "${YOUR_LOADBALANCER_ID}"
  name: nginx
  namespace: default
spec:
  ports:
  - port: 443
    protocol: TCP
    targetPort: 443
  selector:
    run: nginx
  type: LoadBalancer

Usar una instancia de SLB existente y forzar la sobrescritura de los listeners actuales

Anotación: varias, como se muestra en la tabla a continuación. Forzar la sobrescritura elimina los listeners que entren en conflicto.

Anotación

Descripción

Versión de CCM compatible

service.beta.kubernetes.io/alibaba-cloud-loadbalancer-id

Importante

Para evitar comportamientos inesperados, como la indisponibilidad del clúster o la interrupción del tráfico, no reutilice las instancias de CLB del API Server ni las instancias de CLB creadas por CCM. Cree una nueva instancia manualmente en la consola de Classic Load Balancer (CLB).

ID de la instancia de SLB. Use esta anotación para especificar un CLB existente.

  • De forma predeterminada, reutilizar una instancia de SLB existente no sobrescribe los listeners. Para forzar la sobrescritura de los listeners existentes, establezca service.beta.kubernetes.io/alibaba-cloud-loadbalancer-force-override-listeners en "true". Esta configuración solo afecta a los listeners asociados con el Service actual y no interfiere con otros listeners.

    Nota

    Reutilizar un SLB existente no sobrescribe los listeners actuales de forma predeterminada por dos motivos:

    • Si el tráfico de producción está vinculado a los listeners existentes, forzar la sobrescritura puede interrumpir el servicio.

    • Actualmente, CCM admite configuraciones de backend limitadas y no gestiona escenarios complejos. Si tiene requisitos de backend complejos, configure los listeners manualmente en la consola sin sobrescribirlos.

    Por estos motivos, no se recomienda forzar la sobrescritura de listeners. Hágalo únicamente si los puertos de listener del SLB existente ya no están en uso.

  • (Versiones anteriores a la v2.10.0) Reutilizar un SLB existente no permite agregar etiquetas adicionales (annotation: service.beta.kubernetes.io/alibaba-cloud-loadbalancer-additional-resource-tags).

v1.9.3.81-gca19cd4-aliyun y posteriores

service.beta.kubernetes.io/alibaba-cloud-loadbalancer-force-override-listeners

Al vincular un SLB existente, determina si se sincronizan las configuraciones de los listeners del CLB con base en el Service.

  • "true": CCM gestiona automáticamente los listeners del CLB (crear, actualizar, eliminar) asociados con el Service, sin afectar a otros listeners.

  • "false": CCM no procesa los listeners del CLB.

Valor predeterminado: "false"

Importante

Cuando reutilice un CLB existente y establezca force-override en "true", evite que varios Services reutilicen el mismo listener en un mismo CLB. Esto genera conflictos en la configuración de los listeners.

v1.9.3.81-gca19cd4-aliyun y posteriores

apiVersion: v1
kind: Service
metadata:
  annotations:
    service.beta.kubernetes.io/alibaba-cloud-loadbalancer-id: "${YOUR_LOADBALANCER_ID}"
    service.beta.kubernetes.io/alibaba-cloud-loadbalancer-force-override-listeners: "true"
  name: nginx
  namespace: default
spec:
  ports:
  - port: 443
    protocol: TCP
    targetPort: 443
  selector:
    run: nginx
  type: LoadBalancer

Especificar zonas principal y secundaria al crear una instancia de SLB

Anotación: varias, como se muestra en la tabla a continuación. Las zonas principal y secundaria no se pueden modificar después de la creación.

Las instancias de SLB de algunas regiones no admiten zonas principal y secundaria. Consulte la página de creación de CLB para obtener más detalles.

Anotación

Descripción

Versión de CCM compatible

service.beta.kubernetes.io/alibaba-cloud-loadbalancer-master-zoneid

ID de zona del servidor backend principal.

v1.9.3.10-gfb99107-aliyun y posteriores

service.beta.kubernetes.io/alibaba-cloud-loadbalancer-slave-zoneid

ID de zona del servidor backend de respaldo.

v1.9.3.10-gfb99107-aliyun y posteriores

apiVersion: v1
kind: Service
metadata:
  annotations:
    service.beta.kubernetes.io/alibaba-cloud-loadbalancer-master-zoneid: "cn-hangzhou-k"
    service.beta.kubernetes.io/alibaba-cloud-loadbalancer-slave-zoneid: "cn-hangzhou-j"
  name: nginx
  namespace: default
spec:
  ports:
  - port: 80
    protocol: TCP
    targetPort: 80
  selector:
    run: nginx
  type: LoadBalancer

Crear una instancia de SLB facturada por ancho de banda

Anotación: varias, como se muestra en la tabla a continuación. Ambas anotaciones son obligatorias.

Anotación

Descripción

Versión de CCM compatible

service.beta.kubernetes.io/alibaba-cloud-loadbalancer-charge-type

Método de facturación de la instancia de SLB. Valores válidos:

  • paybytraffic

  • paybybandwidth

Valor predeterminado: paybytraffic

v1.9.3 y posteriores

service.beta.kubernetes.io/alibaba-cloud-loadbalancer-bandwidth

Ancho de banda de la instancia de SLB, que representa el ancho de banda máximo. Valor predeterminado: 50. Solo aplica a instancias de SLB orientadas a Internet. Para conocer otros límites, consulte Modify billing method for Internet-facing SLB instance.

v1.9.3.10-gfb99107-aliyun y posteriores

apiVersion: v1
kind: Service
metadata:
  annotations:
    service.beta.kubernetes.io/alibaba-cloud-loadbalancer-charge-type: "paybybandwidth"
    service.beta.kubernetes.io/alibaba-cloud-loadbalancer-bandwidth: "2"
  name: nginx
  namespace: default
spec:
  ports:
  - port: 443
    protocol: TCP
    targetPort: 443
  selector:
    run: nginx
  type: LoadBalancer

Especificar el vSwitch para la instancia de SLB

Anotación: varias, como se muestra en la tabla a continuación. Ambas anotaciones son obligatorias.

Anotación

Descripción

Versión de CCM compatible

service.beta.kubernetes.io/alibaba-cloud-loadbalancer-address-type

Especifica la instancia de SLB como orientada a la red interna. Valores válidos:

  • internet: se accede al servicio a través de la red pública. La opción IP Version correspondiente del CLB debe ser Internet-facing.

  • intranet: se accede al servicio a través de la red privada. La opción IP Version correspondiente del CLB debe ser Internal-facing.

Valor predeterminado: internet

v1.9.3 y posteriores

service.beta.kubernetes.io/alibaba-cloud-loadbalancer-vswitch-id

ID del vSwitch de la instancia de SLB. El vSwitch debe pertenecer a la misma VPC que el clúster de Kubernetes.

Al establecer este parámetro, configure también service.beta.kubernetes.io/alibaba-cloud-loadbalancer-address-type en "intranet".

Inicie sesión en la consola de Virtual Private Cloud para consultar el ID del vSwitch.

v1.9.3 y posteriores

apiVersion: v1
kind: Service
metadata:
  annotations:
   service.beta.kubernetes.io/alibaba-cloud-loadbalancer-address-type: "intranet"
   service.beta.kubernetes.io/alibaba-cloud-loadbalancer-vswitch-id: "${YOUR_VSWITCH_ID}"
  name: nginx
  namespace: default
spec:
  ports:
  - port: 443
    protocol: TCP
    targetPort: 443
  selector:
    run: nginx
  type: LoadBalancer

Especificar la dirección IP para un SLB orientado a la red interna

Anotación: varias, como se muestra en la tabla a continuación. Las tres anotaciones son obligatorias.

Anotación

Descripción

Versión de CCM compatible

service.beta.kubernetes.io/alibaba-cloud-loadbalancer-address-type

Especifica la instancia de SLB como orientada a la red interna. Valores válidos:

  • internet: se accede al servicio a través de la red pública. Este es el valor predeterminado. La opción IP Version correspondiente del CLB debe ser Internet-facing.

  • intranet: se accede al servicio a través de la red privada. La opción IP Version correspondiente del CLB debe ser Internal-facing.

Valor predeterminado: internet

v1.9.3 y posteriores

service.beta.kubernetes.io/alibaba-cloud-loadbalancer-vswitch-id

ID del vSwitch de la instancia de SLB. El vSwitch debe pertenecer a la misma VPC que el clúster de Kubernetes.

Al establecer este parámetro, configure también service.beta.kubernetes.io/alibaba-cloud-loadbalancer-address-type en intranet.

Inicie sesión en la consola de Virtual Private Cloud para consultar el ID del vSwitch.

v1.9.3 y posteriores

service.beta.kubernetes.io/alibaba-cloud-loadbalancer-ip

Dirección IP de la instancia de SLB orientada a la red interna.

  • La dirección IP debe estar dentro del bloque CIDR de destino del vSwitch. Solo se admiten direcciones IPv4. Además, este parámetro debe usarse junto con service.beta.kubernetes.io/alibaba-cloud-loadbalancer-vswitch-id.

  • La dirección IP no se puede cambiar después de la creación.

v2.7.0 y posteriores

apiVersion: v1
kind: Service
metadata:
  annotations:
    service.beta.kubernetes.io/alibaba-cloud-loadbalancer-address-type: "intranet"
    service.beta.kubernetes.io/alibaba-cloud-loadbalancer-vswitch-id: "${YOUR_VSWITCH_ID}"
    service.beta.kubernetes.io/alibaba-cloud-loadbalancer-ip: "192.168.x.x"
  name: nginx
  namespace: default
spec:
  type: LoadBalancer
  ports:
    - port: 80
      targetPort: 80
      name: http
  selector:
    app: nginx

Agregar etiquetas adicionales a la instancia de SLB

Anotación: service.beta.kubernetes.io/alibaba-cloud-loadbalancer-additional-resource-tags

Descripción

Versión de CCM compatible

Lista de etiquetas que se van a agregar. Separe varias etiquetas con comas inglesas (,). Ejemplo: "k1=v1,k2=v2". Las versiones v2.10.0 y posteriores permiten modificar las etiquetas tanto de las instancias recién creadas como de las reutilizadas.

Importante

Después de agregar esta anotación para especificar etiquetas adicionales, cualquier modificación manual de etiquetas que aplique a la instancia de SLB correspondiente en la consola podría sobrescribirse.

v1.9.3 y posteriores

apiVersion: v1
kind: Service
metadata:
  annotations:
    service.beta.kubernetes.io/alibaba-cloud-loadbalancer-additional-resource-tags: "Key1=Value1,Key2=Value2" 
  name: nginx
  namespace: default
spec:
  ports:
  - port: 80
    protocol: TCP
    targetPort: 80
  selector:
    run: nginx
  type: LoadBalancer

Crear una instancia SLB IPv6

Anotación: service.beta.kubernetes.io/alibaba-cloud-loadbalancer-ip-version

Descripción

Versión de CCM compatible

Versión IP de la instancia SLB. El tipo de IP no se puede modificar después de crearla. Cuando utilice esta función, asegúrese de que el modo proxy de kube-proxy del clúster sea IPVS. Valores válidos:

  • ipv4: tipo IPv4.

  • ipv6: tipo IPv6. La dirección IPv6 generada solo es accesible en entornos compatibles con IPv6.

Valor predeterminado: ipv4

v1.9.3.220-g24b1885-aliyun y posteriores

apiVersion: v1
kind: Service
metadata:
  annotations:
    service.beta.kubernetes.io/alibaba-cloud-loadbalancer-ip-version: "ipv6"
  name: nginx
spec:
  ports:
  - port: 80
    protocol: TCP
    targetPort: 80
  selector:
    app: nginx
  type: LoadBalancer

Habilitar la protección contra eliminación para la instancia SLB

Anotación: service.beta.kubernetes.io/alibaba-cloud-loadbalancer-delete-protection

Descripción

Versión de CCM compatible

Protección contra eliminación de la instancia SLB. Valores válidos:

  • on

  • off

Valor predeterminado: on

Importante

En las instancias SLB creadas por Services de tipo LoadBalancer, aunque habilite manualmente la protección contra eliminación en la consola CLB, aún podrá eliminar la instancia SLB asociada si ejecuta kubectl delete svc {your-svc-name}.

v1.9.3.313-g748f81e-aliyun y posteriores

apiVersion: v1
kind: Service
metadata:
  annotations:
    service.beta.kubernetes.io/alibaba-cloud-loadbalancer-delete-protection: "on"
  name: nginx
spec:
  externalTrafficPolicy: Local
  ports:
  - port: 80
    protocol: TCP
    targetPort: 80
  selector:
    app: nginx
  type: LoadBalancer

Habilitar el modo de solo lectura de configuración para la instancia SLB

Anotación: service.beta.kubernetes.io/alibaba-cloud-loadbalancer-modification-protection

Descripción

Versión de CCM compatible

Protección contra modificaciones de configuración de la instancia SLB. Valores válidos:

  • ConsoleProtection

  • NonProtection

Valor predeterminado: ConsoleProtection

v1.9.3.313-g748f81e-aliyun y posteriores

apiVersion: v1
kind: Service
metadata:
  annotations:
    service.beta.kubernetes.io/alibaba-cloud-loadbalancer-modification-protection: "ConsoleProtection"
  name: nginx
spec:
  externalTrafficPolicy: Local
  ports:
  - port: 80
    protocol: TCP
    targetPort: 80
  selector:
    app: nginx
  type: LoadBalancer

Especificar el nombre de la instancia SLB

Anotación: service.beta.kubernetes.io/alibaba-cloud-loadbalancer-name

Descripción

Versión de CCM compatible

Nombre de la instancia SLB. Debe tener entre 2 y 128 caracteres, comenzar con una letra o un carácter chino, y puede contener dígitos, puntos (.), guiones bajos (_) y guiones (-).

v1.9.3.313-g748f81e-aliyun y posteriores

apiVersion: v1
kind: Service
metadata:
  annotations:
    service.beta.kubernetes.io/alibaba-cloud-loadbalancer-name: "your-svc-name"
  name: nginx
spec:
  externalTrafficPolicy: Local
  ports:
  - port: 80
    protocol: TCP
    targetPort: 80
  selector:
    app: nginx
  type: LoadBalancer

Especificar el resource group para la instancia SLB

Anotación: service.beta.kubernetes.io/alibaba-cloud-loadbalancer-resource-group-id

Descripción

Versión de CCM compatible

ID del resource group de la instancia SLB. Una vez especificado, este ID no se puede modificar. Consulte el ID del resource group en la consola de Resource Management de Alibaba Cloud.

v1.9.3.313-g748f81e-aliyun y posteriores

apiVersion: v1
kind: Service
metadata:
  annotations:
    service.beta.kubernetes.io/alibaba-cloud-loadbalancer-resource-group-id: "rg-xxxx"
  name: nginx
spec:
  externalTrafficPolicy: Local
  ports:
  - port: 80
    protocol: TCP
    targetPort: 80
  selector:
    app: nginx
  type: LoadBalancer

Establecer el nombre de host para el Service

Anotación: Varias, como se muestra a continuación en la tabla.

Anotación

Descripción

Versión de CCM compatible

service.beta.kubernetes.io/alibaba-cloud-loadbalancer-protocol-port

Separe varios valores con comas inglesas (,). Ejemplo: https:443,http:80.

v1.9.3 y posteriores

service.beta.kubernetes.io/alibaba-cloud-loadbalancer-hostname

Establezca un nombre de host para el Service. Este debe cumplir con las reglas de nomenclatura DNS.

Tenga en cuenta lo siguiente:

  • Después de agregar esta anotación, la EXTERNAL-IP del Service cambia de la IP predeterminada del CLB a your_service_name. El tráfico que accede a la IP del CLB dentro del clúster pasará por el CLB antes de reenviarse al clúster.

  • Tras agregar esta anotación, acceder a la IP del CLB desde dentro del clúster para listeners TCP o UDP provoca problemas de loopback. Para más información, consulte El cliente no puede acceder al CLB.

  • Esta anotación no vincula automáticamente el CLB a un nombre de dominio. Para vincularlo, adquiera un nombre de dominio y configúrelo manualmente en la consola Domain Names. Para adquirir un nombre de dominio, consulte What is Alibaba Cloud Domain Names?.

v2.3.0 y posteriores

apiVersion: v1
kind: Service
metadata:
  annotations:
    service.beta.kubernetes.io/alibaba-cloud-loadbalancer-protocol-port: "http:80"
    service.beta.kubernetes.io/alibaba-cloud-loadbalancer-hostname: "${your_service_hostname}"
  name: nginx-svc
  namespace: default
spec:
  ports:
  - name: http
    port: 80
    protocol: TCP
    targetPort: 80
  selector:
    app: nginx
  type: LoadBalancer

Salida esperada:

NAME         TYPE           CLUSTER-IP       EXTERNAL-IP            PORT(S)                      AGE
nginx-svc    loadBalancer   47.100.XX.XX     www.example.com        80:30248/TCP,443:32670/TCP   10s

Crear una instancia SLB con facturación por uso

Anotación: service.beta.kubernetes.io/alibaba-cloud-loadbalancer-instance-charge-type

Descripción

Versión de CCM compatible

Método de facturación de la instancia. Valores válidos:

  • PayBySpec: valor predeterminado; se factura según la especificación.

  • PayByCLCU: se factura según el uso.

Valor predeterminado: PayBySpec

Importante
  • Para Cloud Controller Manager v2.5.0 y posteriores, el valor predeterminado cambia a PayByCLCU.

  • Las instancias SLB con facturación por uso no admiten la definición de especificaciones. Por lo tanto, no puede especificar PayByCLCU y service.beta.kubernetes.io/alibaba-cloud-loadbalancer-spec al mismo tiempo.

v2.4.0 y posteriores

apiVersion: v1
kind: Service
metadata:
  annotations:
    service.beta.kubernetes.io/alibaba-cloud-loadbalancer-instance-charge-type: "PayByCLCU"
  name: nginx
  namespace: default
spec:
  ports:
  - port: 80
    protocol: TCP
    targetPort: 80
  selector:
    run: nginx
  type: LoadBalancer

Operaciones típicas de listener

Configurar el tiempo de espera de persistencia de sesión para SLB TCP

Anotación: service.beta.kubernetes.io/alibaba-cloud-loadbalancer-persistence-timeout

Descripción

Versión de CCM compatible

Tiempo de espera de persistencia de sesión. Se aplica únicamente a los listeners TCP. Si la instancia SLB tiene varios listeners TCP, esta configuración se aplica de forma predeterminada a todos ellos.

Unidad: segundos. Rango válido: [0, 3600]. Valor predeterminado: 0 (persistencia de sesión deshabilitada). Para más información, consulte CreateLoadBalancerTCPListener.

v1.9.3 y posteriores

apiVersion: v1
kind: Service
metadata:
  annotations:
    service.beta.kubernetes.io/alibaba-cloud-loadbalancer-persistence-timeout: "1800"
  name: nginx
  namespace: default
spec:
  ports:
  - port: 443
    protocol: TCP
    targetPort: 443
  selector:
    run: nginx
  type: LoadBalancer

Configurar la persistencia de sesión (inserción de cookie) para listeners HTTP y HTTPS

Anotación: Varias, como se muestra a continuación en la tabla. Las cuatro anotaciones son obligatorias cuando se insertan cookies.

  • Se aplica únicamente a instancias SLB HTTP y HTTPS.

  • Si hay varios listeners HTTP o HTTPS configurados, la persistencia de sesión se aplica de forma predeterminada a todos ellos.

Anotación

Descripción

Versión de CCM compatible

service.beta.kubernetes.io/alibaba-cloud-loadbalancer-sticky-session

Habilite la persistencia de sesión. Se aplica únicamente a listeners HTTP y HTTPS. Valores válidos:

  • on

  • off

Valor predeterminado: off

Para más información, consulte CreateLoadBalancerHTTPListener y CreateLoadBalancerHTTPSListener.

v1.9.3 y posteriores

service.beta.kubernetes.io/alibaba-cloud-loadbalancer-sticky-session-type

Método de manejo de cookies. Se aplica únicamente a listeners HTTP y HTTPS. Es obligatorio cuando service.beta.kubernetes.io/alibaba-cloud-loadbalancer-sticky-session se establece en on. Valores válidos:

  • insert: insertar cookie.

  • server: reescribir cookie.

Para más información, consulte CreateLoadBalancerHTTPListener y CreateLoadBalancerHTTPSListener.

v1.9.3 y posteriores

service.beta.kubernetes.io/alibaba-cloud-loadbalancer-cookie-timeout

Tiempo de espera de la cookie. Es obligatorio cuando service.beta.kubernetes.io/alibaba-cloud-loadbalancer-sticky-session es on y service.beta.kubernetes.io/alibaba-cloud-loadbalancer-sticky-session-type es insert. Unidad: segundos. Rango válido: [1, 86400].

Para más información, consulte CreateLoadBalancerHTTPListener y CreateLoadBalancerHTTPSListener.

v1.9.3 y posteriores

service.beta.kubernetes.io/alibaba-cloud-loadbalancer-cookie

Nombre de la cookie configurada en el servidor.

Longitud: de 1 a 200 caracteres. Solo puede contener letras ASCII y dígitos. No puede incluir comas (,), puntos y coma (;) ni espacios, y tampoco puede comenzar con el signo de dólar ($).

Es obligatorio cuando service.beta.kubernetes.io/alibaba-cloud-loadbalancer-sticky-session es on y service.beta.kubernetes.io/alibaba-cloud-loadbalancer-sticky-session-type es server.

Para más información, consulte CreateLoadBalancerHTTPListener y CreateLoadBalancerHTTPSListener.

v1.9.3 y posteriores

service.beta.kubernetes.io/alibaba-cloud-loadbalancer-protocol-port

Separe varios valores con comas inglesas (,). Ejemplo: https:443,http:80.

v1.9.3 y posteriores

apiVersion: v1
kind: Service
metadata:
  annotations:
    service.beta.kubernetes.io/alibaba-cloud-loadbalancer-sticky-session: "on"
    service.beta.kubernetes.io/alibaba-cloud-loadbalancer-sticky-session-type: "insert"
    service.beta.kubernetes.io/alibaba-cloud-loadbalancer-cookie-timeout: "1800"
    service.beta.kubernetes.io/alibaba-cloud-loadbalancer-protocol-port: "http:80"
  name: nginx
  namespace: default
spec:
  ports:
  - port: 80
    protocol: TCP
    targetPort: 80
  selector:
    run: nginx
  type: LoadBalancer

Configurar el grupo de políticas de control de acceso para SLB

Anotación: Varias, como se muestra a continuación en la tabla. Las tres anotaciones son obligatorias.

Antes de usar esta anotación para crear un SLB con control de acceso, cree un grupo de políticas de control de acceso en la consola de Classic Load Balancer (CLB) y registre su ID (acl-id).

Anotación

Descripción

Versión de CCM compatible

service.beta.kubernetes.io/alibaba-cloud-loadbalancer-acl-status

Habilite el control de acceso. Valores válidos:

  • on

  • off

Valor predeterminado: off

v1.9.3.164-g2105d2e-aliyun y posteriores

service.beta.kubernetes.io/alibaba-cloud-loadbalancer-acl-id

ID del grupo de políticas de control de acceso vinculado al listener. Es obligatorio cuando service.beta.kubernetes.io/alibaba-cloud-loadbalancer-acl-status se establece en "on".

v1.9.3.164-g2105d2e-aliyun y posteriores

service.beta.kubernetes.io/alibaba-cloud-loadbalancer-acl-type

Tipo de control de acceso. Valores válidos:

  • white: reenvía solicitudes únicamente desde direcciones IP o bloques CIDR incluidos en el grupo de políticas de control de acceso. Utilice listas blancas cuando su aplicación permita el acceso solo desde IPs específicas. Configurar una lista blanca implica riesgos operativos. Una vez definida, solo las IPs incluidas podrán acceder al listener SLB. Si la lista blanca está vacía, el listener SLB reenviará todas las solicitudes.

  • black: no se reenvían las solicitudes provenientes de las direcciones IP o bloques CIDR configurados en el grupo de políticas seleccionado. Use una lista negra en escenarios donde necesite denegar el acceso a una aplicación solo desde direcciones IP específicas. Si habilita una lista negra pero no agrega ninguna dirección IP al grupo de políticas, el listener SLB reenviará todas las solicitudes. Este parámetro es obligatorio cuando el parámetro AclStatus se establece en on.

v1.9.3.164-g2105d2e-aliyun y posteriores

apiVersion: v1
kind: Service
metadata:
  annotations:
    service.beta.kubernetes.io/alibaba-cloud-loadbalancer-acl-status: "on"
    service.beta.kubernetes.io/alibaba-cloud-loadbalancer-acl-id: "${YOUR_ACL_ID}" # Does not support multiple policy groups.
    service.beta.kubernetes.io/alibaba-cloud-loadbalancer-acl-type: "white"
  name: nginx
  namespace: default
spec:
  ports:
  - port: 443
    protocol: TCP
    targetPort: 443
  selector:
    run: nginx
  type: LoadBalancer

Especificar el puerto de redirección para SLB

El reenvío de puertos redirige las solicitudes HTTP a puertos HTTPS.

Anotación: Varias, como se muestra a continuación en la tabla. Las tres anotaciones son obligatorias.

Anotación

Descripción

Versión de CCM compatible

service.beta.kubernetes.io/alibaba-cloud-loadbalancer-protocol-port

Separe varios valores con comas inglesas (,). Ejemplo: https:443,http:80.

v1.9.3 y posteriores

service.beta.kubernetes.io/alibaba-cloud-loadbalancer-cert-id

ID del certificado en Alibaba Cloud.

Inicie sesión en la consola CLB y consulte el ID del certificado en la página Certificates.

Nota

Para crear un certificado, consulte Select an Alibaba Cloud-issued certificate.

v1.9.3.164-g2105d2e-aliyun y posteriores

service.beta.kubernetes.io/alibaba-cloud-loadbalancer-forward-port

Reenvíe las solicitudes HTTP a un puerto HTTPS específico. Ejemplo: 80:443.

v1.9.3.164-g2105d2e-aliyun y posteriores

apiVersion: v1
kind: Service
metadata:
  annotations:
    service.beta.kubernetes.io/alibaba-cloud-loadbalancer-protocol-port: "https:443,http:80"
    service.beta.kubernetes.io/alibaba-cloud-loadbalancer-cert-id: "${YOUR_CERT_ID}"
    service.beta.kubernetes.io/alibaba-cloud-loadbalancer-forward-port: "80:443"
  name: nginx
  namespace: default
spec:
  ports:
  - name: https
    port: 443
    protocol: TCP
    targetPort: 80
  - name: http
    port: 80
    protocol: TCP
    targetPort: 80
  selector:
    run: nginx
  type: LoadBalancer

Establecer el algoritmo de programación para SLB

Anotación: service.beta.kubernetes.io/alibaba-cloud-loadbalancer-scheduler

Descripción

Versión de CCM compatible

Algoritmo de programación. Valores válidos:

  • wrr: round-robin ponderado. Los servidores backend con pesos más altos reciben más solicitudes (mayor probabilidad).

  • rr: round-robin. Distribuye las solicitudes externas de manera secuencial entre los servidores backend.

  • sch: hash consistente basado en la dirección IP de origen. Las solicitudes provenientes de la misma dirección de origen se programan hacia el mismo servidor backend.

  • tch: hash consistente basado en una cuádruple (IP de origen + IP de destino + puerto de origen + puerto de destino). Las solicitudes del mismo flujo se programan hacia el mismo servidor backend.

Valor predeterminado: rr.

Para conocer más valores válidos, consulte el campo Scheduler en la API de creación del listener correspondiente (como Create TCP listener).

v1.9.3 y posteriores

apiVersion: v1
kind: Service
metadata:
  annotations:
    service.beta.kubernetes.io/alibaba-cloud-loadbalancer-scheduler: "wrr"
  name: nginx
  namespace: default
spec:
  ports:
  - port: 443
    protocol: TCP
    targetPort: 443
  selector:
    run: nginx
  type: LoadBalancer

Crear un listener UDP

apiVersion: v1
kind: Service
metadata:
  name: nginx
  namespace: default
spec:
  ports:
  - port: 80
    protocol: UDP
    targetPort: 80
  selector:
    run: nginx
  type: LoadBalancer

Crear un listener HTTP

Anotación: service.beta.kubernetes.io/alibaba-cloud-loadbalancer-protocol-port

  • Comprobación de estado: las comprobaciones de estado de los listeners HTTP están deshabilitadas de forma predeterminada. Para garantizar la disponibilidad del servicio backend, configure comprobaciones de estado HTTP o TCP en el puerto del listener.

  • Acceso dentro del clúster: Cuando se accede al servicio mediante la IP del CLB desde dentro del clúster, el tráfico de la solicitud podría truncarse internamente y provocar problemas de acceso. Consulte Set hostname for Service para forzar el tráfico a través del CLB agregando una anotación. Para más detalles, consulte Notes on accessing LoadBalancer Service External IP from within the cluster.

Descripción

Versión de CCM compatible

Separe varios valores con comas inglesas (,). Ejemplo: https:443,http:80.

v1.9.3 y posteriores

apiVersion: v1
kind: Service
metadata:
  annotations:
    service.beta.kubernetes.io/alibaba-cloud-loadbalancer-protocol-port: "http:80"
  name: nginx
  namespace: default
spec:
  ports:
  - port: 80
    protocol: TCP
    targetPort: 80
  selector:
    run: nginx
  type: LoadBalancer

Crear un listener HTTPS

Anotación: Varias, como se muestra a continuación en la tabla.

Las solicitudes HTTPS se descifran en la capa del CLB y se envían a los pods backend como solicitudes HTTP.

  • Comprobación de estado: las comprobaciones de estado de los listeners HTTPS están deshabilitadas de forma predeterminada. Para garantizar la disponibilidad del servicio backend, configure comprobaciones de estado HTTP o TCP en el puerto del listener.

  • Acceso dentro del clúster: Cuando se accede al servicio mediante la IP del CLB desde dentro del clúster, el tráfico de la solicitud podría truncarse internamente y provocar problemas de acceso. Consulte Set hostname for Service para forzar el tráfico a través del CLB agregando una anotación. Para más detalles, consulte Notes on accessing LoadBalancer Service External IP from within the cluster.

Anotación

Descripción

Versión de CCM compatible

service.beta.kubernetes.io/alibaba-cloud-loadbalancer-protocol-port

Separe varios valores con comas inglesas (,). Ejemplo: https:443,http:80.

v1.9.3 y posteriores

service.beta.kubernetes.io/alibaba-cloud-loadbalancer-cert-id

ID del certificado en Alibaba Cloud.

Inicie sesión en la consola CLB y consulte el ID del certificado en la página Certificates.

Nota

Para crear un certificado, consulte Select an Alibaba Cloud-issued certificate.

v1.9.3.164-g2105d2e-aliyun y posteriores

apiVersion: v1
kind: Service
metadata:
  annotations:
    service.beta.kubernetes.io/alibaba-cloud-loadbalancer-protocol-port: "https:443"
    service.beta.kubernetes.io/alibaba-cloud-loadbalancer-cert-id: "${YOUR_CERT_ID}"
  name: nginx
  namespace: default
spec:
  ports:
  - port: 443
    protocol: TCP
    targetPort: 80
  selector:
    run: nginx
  type: LoadBalancer

Error de protocolo SSL al acceder al CLB desde dentro del clúster

Síntomas

Después de Create HTTPS listener para un servicio, este funciona correctamente cuando se accede desde fuera del clúster. Sin embargo, al usar curl para acceder al puerto HTTPS del CLB asociado al servicio desde un nodo o pod dentro del clúster, se devuelve el siguiente error:

curl: (35) error:1408F10B:SSL routines:ssl3_get_record:wrong version number

Causa

Este problema ocurre por las reglas de IP Virtual Server (IPVS) en el nodo:

  1. Configuración del servicio: un listener HTTPS en un CLB solo admite el protocolo HTTP para los servicios de backend. Por lo tanto, debe configurar el servicio para reenviar el tráfico desde port: 443 hacia targetPort: 80. Luego, ACK crea una regla de IPVS en el nodo que reenvía directamente el tráfico del puerto 443 al puerto de backend 80.

  2. Reenvío en la capa 4: IPVS opera en la capa 4 de la pila de protocolos TCP/IP. Solo reenvía paquetes de datos TCP y no analiza sintácticamente protocolos de la capa de aplicación como TLS o HTTPS.

  3. Incompatibilidad de protocolos: el cliente (curl) envía una solicitud HTTPS que contiene datos del handshake de TLS. IPVS reenvía esta solicitud directamente al puerto HTTP 80 del servicio de backend. Como este puerto no está configurado para TLS, no puede analizar sintácticamente la solicitud. En consecuencia, el servicio de backend devuelve un error HTTP 400 y el cliente reporta un error de protocolo SSL.

Solución

Agregue la anotación service.beta.kubernetes.io/alibaba-cloud-loadbalancer-hostname al servicio. Esta anotación evita que se generen reglas de IPVS en los nodos y obliga a que el tráfico dentro del clúster pase por el CLB. De este modo, se garantiza que el CLB gestione correctamente el handshake de TLS. Para obtener más información, consulte .

Configurar certificados de nombres de dominio adicionales para el listener HTTPS

Anotación: varias, como se muestra a continuación en la tabla.

Anotación

Descripción

Versión de CCM compatible

service.beta.kubernetes.io/alibaba-cloud-loadbalancer-protocol-port

Separe varios valores con comas inglesas (,). Ejemplo: https:443,http:80.

v1.9.3 y posteriores

service.beta.kubernetes.io/alibaba-cloud-loadbalancer-cert-id

ID del certificado en Alibaba Cloud.

Inicie sesión en la consola de CLB y consulte el ID del certificado en la página Certificates.

Nota

Para crear un certificado, consulte Select an Alibaba Cloud-issued certificate.

v1.9.3.164-g2105d2e-aliyun y posteriores

service.beta.kubernetes.io/alibaba-cloud-loadbalancer-domain-extensions

Especifique los nombres de dominio adicionales y los ID de certificado con el formato {domain}:{certificate ID}. Separe varios valores con comas inglesas (,).

Inicie sesión en la consola de CLB y consulte el ID del certificado en la página Certificates.

v2.13.0 y posteriores

apiVersion: v1
kind: Service
metadata:
  annotations:
    service.beta.kubernetes.io/alibaba-cloud-loadbalancer-protocol-port: "https:443"
    service.beta.kubernetes.io/alibaba-cloud-loadbalancer-cert-id: "${YOUR_CERT_ID}"
    service.beta.kubernetes.io/alibaba-cloud-loadbalancer-domain-extensions: "${DOMAIN_1}:${CERT_ID_1},${DOMAIN_2}:${CERT_ID_2}"
  name: nginx
  namespace: default
spec:
  ports:
  - port: 443
    protocol: TCP
    targetPort: 80
  selector:
    run: nginx
  type: LoadBalancer

Crear un listener con comprobación de estado

Configurar la comprobación de estado TCP

Anotación: varias, como se muestra a continuación en la tabla. Todas las anotaciones son obligatorias.

Los puertos TCP tienen habilitadas las comprobaciones de estado de forma predeterminada.

Anotación

Descripción

Versión de CCM compatible

service.beta.kubernetes.io/alibaba-cloud-loadbalancer-health-check-switch

Habilite las comprobaciones de estado para los listeners TCP y UDP. Valores válidos:

  • on

  • off

Valor predeterminado: on

v2.6.0 y posteriores

service.beta.kubernetes.io/alibaba-cloud-loadbalancer-health-check-type

Tipo de comprobación de estado. Valores válidos:

  • tcp

  • http

Valor predeterminado: tcp. Para obtener más información, consulte CreateLoadBalancerTCPListener.

v1.9.3 y posteriores

service.beta.kubernetes.io/alibaba-cloud-loadbalancer-health-check-connect-timeout

Tiempo de espera para recibir una respuesta de la comprobación de estado, aplicable al modo TCP. Si la instancia ECS de backend no responde correctamente dentro del tiempo especificado, la comprobación falla. Unidad: segundos. Rango válido: [1, 300].

Si el valor de service.beta.kubernetes.io/alibaba-cloud-loadbalancer-health-check-connect-timeout es menor que el de service.beta.kubernetes.io/alibaba-cloud-loadbalancer-health-check-interval, el primero no surte efecto y el tiempo de espera toma el valor del segundo. Valor predeterminado: 5. Para obtener más información, consulte CreateLoadBalancerTCPListener.

v1.9.3 y posteriores

service.beta.kubernetes.io/alibaba-cloud-loadbalancer-healthy-threshold

Número de comprobaciones de estado exitosas consecutivas necesarias para cambiar el estado de salud del servidor de backend de fail a success.

Rango válido: [2, 10]. Valor predeterminado: 3. Para obtener más información, consulte CreateLoadBalancerTCPListener.

v1.9.3 y posteriores

service.beta.kubernetes.io/alibaba-cloud-loadbalancer-unhealthy-threshold

Número de comprobaciones de estado fallidas consecutivas necesarias para cambiar el estado de salud del servidor de backend de success a fail. Rango válido: [2, 10]. Valor predeterminado: 3. Para obtener más información, consulte CreateLoadBalancerTCPListener.

v1.9.3 y posteriores

service.beta.kubernetes.io/alibaba-cloud-loadbalancer-health-check-interval

Intervalo entre comprobaciones de estado. Unidad: segundos. Rango válido: [1, 50]. Valor predeterminado: 2. Para obtener más información, consulte CreateLoadBalancerTCPListener.

v1.9.3 y posteriores

apiVersion: v1
kind: Service
metadata:
  annotations:
    service.beta.kubernetes.io/alibaba-cloud-loadbalancer-health-check-switch: "on"
    service.beta.kubernetes.io/alibaba-cloud-loadbalancer-health-check-type: "tcp"
    service.beta.kubernetes.io/alibaba-cloud-loadbalancer-health-check-connect-timeout: "8"
    service.beta.kubernetes.io/alibaba-cloud-loadbalancer-healthy-threshold: "4"
    service.beta.kubernetes.io/alibaba-cloud-loadbalancer-unhealthy-threshold: "4"
    service.beta.kubernetes.io/alibaba-cloud-loadbalancer-health-check-interval: "3"
  name: nginx
  namespace: default
spec:
  ports:
  - port: 80
    protocol: TCP
    targetPort: 80
  selector:
    run: nginx
  type: LoadBalancer

Configurar la comprobación de estado UDP

Anotación: varias, como se muestra a continuación en la tabla. Todas las anotaciones son obligatorias.

Los puertos UDP tienen habilitadas las comprobaciones de estado de forma predeterminada.

Anotación

Descripción

Versión de CCM compatible

service.beta.kubernetes.io/alibaba-cloud-loadbalancer-health-check-switch

Habilite las comprobaciones de estado para los listeners TCP y UDP. Valores válidos:

  • on

  • off

Valor predeterminado: on

v2.6.0 y posteriores

service.beta.kubernetes.io/alibaba-cloud-loadbalancer-health-check-connect-timeout

Tiempo de espera para recibir una respuesta de la comprobación de estado, aplicable al modo TCP. Si la instancia ECS de backend no responde correctamente dentro del tiempo especificado, la comprobación falla. Unidad: segundos. Rango válido: [1, 300].

Si el valor de service.beta.kubernetes.io/alibaba-cloud-loadbalancer-health-check-connect-timeout es menor que el de service.beta.kubernetes.io/alibaba-cloud-loadbalancer-health-check-interval, el primero no surte efecto y el tiempo de espera toma el valor del segundo. Valor predeterminado: 5. Para obtener más información, consulte CreateLoadBalancerUDPListener.

v1.9.3 y posteriores

service.beta.kubernetes.io/alibaba-cloud-loadbalancer-healthy-threshold

Número de comprobaciones de estado exitosas consecutivas necesarias para cambiar el estado de salud del servidor de backend de fail a success.

Rango válido: [2, 10]. Valor predeterminado: 3. Para obtener más información, consulte CreateLoadBalancerUDPListener.

v1.9.3 y posteriores

service.beta.kubernetes.io/alibaba-cloud-loadbalancer-unhealthy-threshold

Número de comprobaciones de estado fallidas consecutivas necesarias para cambiar el estado de salud del servidor de backend de success a fail. Rango válido: [2, 10]. Valor predeterminado: 3. Para obtener más información, consulte CreateLoadBalancerUDPListener.

v1.9.3 y posteriores

service.beta.kubernetes.io/alibaba-cloud-loadbalancer-health-check-interval

Intervalo entre comprobaciones de estado. Unidad: segundos. Rango válido: [1, 50]. Valor predeterminado: 2. Para obtener más información, consulte CreateLoadBalancerUDPListener.

v1.9.3 y posteriores

apiVersion: v1
kind: Service
metadata:
  annotations:
    service.beta.kubernetes.io/alibaba-cloud-loadbalancer-health-check-switch: "on"
    service.beta.kubernetes.io/alibaba-cloud-loadbalancer-health-check-interval: "5"
    service.beta.kubernetes.io/alibaba-cloud-loadbalancer-health-check-connect-timeout: "10"
    service.beta.kubernetes.io/alibaba-cloud-loadbalancer-healthy-threshold: "3"
    service.beta.kubernetes.io/alibaba-cloud-loadbalancer-unhealthy-threshold: "3"
  name: nginx
  namespace: default
spec:
  ports:
  - port: 80
    protocol: UDP
    targetPort: 80
  selector:
    run: nginx
  type: LoadBalancer

Deshabilitar la comprobación de estado para listeners TCP y UDP

Anotación: service.beta.kubernetes.io/alibaba-cloud-loadbalancer-health-check-switch

Descripción

Versión de CCM compatible

Habilite las comprobaciones de estado para los listeners TCP y UDP. Valores válidos:

  • on

  • off

Valor predeterminado: on

v2.6.0 y posteriores

apiVersion: v1
kind: Service
metadata:
  annotations:
    service.beta.kubernetes.io/alibaba-cloud-loadbalancer-health-check-switch: "off" # Disable health check
  name: nginx
  namespace: default
spec:
  ports:
  - port: 443
    protocol: TCP
    targetPort: 443
  selector:
    run: nginx
  type: LoadBalancer

Configurar la comprobación de estado HTTP

Anotación: varias, como se muestra a continuación en la tabla.

Anotación

Descripción

Versión de CCM compatible

service.beta.kubernetes.io/alibaba-cloud-loadbalancer-health-check-flag

Valores válidos:

  • on: los listeners TCP usan on de forma predeterminada y no se puede modificar. No es necesario cambiar esta anotación para TCP.

  • off: los listeners HTTP usan off de forma predeterminada.

Valor predeterminado: off

v1.9.3 y posteriores

service.beta.kubernetes.io/alibaba-cloud-loadbalancer-health-check-type

Tipo de comprobación de estado. Valores válidos:

  • tcp

  • http

Valor predeterminado: tcp

Para obtener más información, consulte CreateLoadBalancerHTTPListener.

v1.9.3 y posteriores

service.beta.kubernetes.io/alibaba-cloud-loadbalancer-health-check-uri

URI para las comprobaciones de estado. No es obligatorio cuando el tipo de comprobación es TCP.

v1.9.3 y posteriores

service.beta.kubernetes.io/alibaba-cloud-loadbalancer-health-check-httpcode

Códigos de estado HTTP que indican una comprobación exitosa. Separe varios códigos de estado con comas inglesas. Valores válidos:

  • http_2xx

  • http_3xx

  • http_4xx

  • http_5xx

Valor predeterminado: http_2xx

Para obtener más información, consulte CreateLoadBalancerHTTPListener.

v1.9.3 y posteriores

service.beta.kubernetes.io/alibaba-cloud-loadbalancer-health-check-domain

Nombre de dominio para las comprobaciones de estado. Valores válidos:

  • $_ip: dirección IP privada del servidor de backend. Si se especifica una IP o no se define este parámetro, SLB usa la IP privada de cada servidor de backend como dominio de comprobación de estado.

  • domain: longitud del nombre de dominio de 1 a 80 caracteres. Solo puede contener letras, dígitos, puntos (.) y guiones (-).

Para obtener más información, consulte CreateLoadBalancerHTTPListener.

v1.9.3 y posteriores

service.beta.kubernetes.io/alibaba-cloud-loadbalancer-health-check-timeout

Tiempo de espera para recibir una respuesta de la comprobación de estado, aplicable al modo HTTP. Si la instancia ECS de backend no responde correctamente dentro del tiempo especificado, la comprobación falla.

Unidad: segundos. Rango válido: [1, 300].

Si el valor de service.beta.kubernetes.io/alibaba-cloud-loadbalancer-health-check-timeout es menor que el de service.beta.kubernetes.io/alibaba-cloud-loadbalancer-health-check-interval, entonces service.beta.kubernetes.io/alibaba-cloud-loadbalancer-health-check-timeout no surte efecto y el tiempo de espera toma el valor de service.beta.kubernetes.io/alibaba-cloud-loadbalancer-health-check-interval.

Para obtener más información, consulte CreateLoadBalancerHTTPListener.

v1.9.3 y posteriores

service.beta.kubernetes.io/alibaba-cloud-loadbalancer-healthy-threshold

Número de comprobaciones de estado exitosas consecutivas necesarias para cambiar el estado de salud del servidor de backend de fail a success.

Rango válido: [2, 10]. Valor predeterminado: 3. Para obtener más información, consulte CreateLoadBalancerHTTPListener.

v1.9.3 y posteriores

service.beta.kubernetes.io/alibaba-cloud-loadbalancer-unhealthy-threshold

Número de comprobaciones de estado fallidas consecutivas necesarias para cambiar el estado de salud del servidor de backend de success a fail. Rango válido: [2, 10]. Valor predeterminado: 3. Para obtener más información, consulte CreateLoadBalancerHTTPListener.

v1.9.3 y posteriores

service.beta.kubernetes.io/alibaba-cloud-loadbalancer-health-check-interval

Intervalo entre comprobaciones de estado. Unidad: segundos. Rango válido: [1, 50]. Valor predeterminado: 2. Para obtener más información, consulte CreateLoadBalancerHTTPListener.

v1.9.3 y posteriores

service.beta.kubernetes.io/alibaba-cloud-loadbalancer-protocol-port

Separe varios valores con comas inglesas (,). Ejemplo: https:443,http:80.

v1.9.3 y posteriores

service.beta.kubernetes.io/alibaba-cloud-loadbalancer-health-check-method

Método de comprobación de estado para listeners HTTP. Valores válidos:

  • head

  • get

v2.3.0 y posteriores

apiVersion: v1
kind: Service
metadata:
  annotations:
    service.beta.kubernetes.io/alibaba-cloud-loadbalancer-health-check-flag: "on"
    service.beta.kubernetes.io/alibaba-cloud-loadbalancer-health-check-type: "http"
    service.beta.kubernetes.io/alibaba-cloud-loadbalancer-health-check-uri: "/test/index.html"
    service.beta.kubernetes.io/alibaba-cloud-loadbalancer-healthy-threshold: "4"
    service.beta.kubernetes.io/alibaba-cloud-loadbalancer-unhealthy-threshold: "4"
    service.beta.kubernetes.io/alibaba-cloud-loadbalancer-health-check-timeout: "10"
    service.beta.kubernetes.io/alibaba-cloud-loadbalancer-health-check-interval: "3"
    service.beta.kubernetes.io/alibaba-cloud-loadbalancer-protocol-port: "http:80"
    # Set HTTP status code for health check (optional)
    service.beta.kubernetes.io/alibaba-cloud-loadbalancer-health-check-httpcode: "http_4xx"
    # Set domain for health check (optional)
    service.beta.kubernetes.io/alibaba-cloud-loadbalancer-health-check-domain: "www.aliyun.com"
    # Set health check method (optional)
    service.beta.kubernetes.io/alibaba-cloud-loadbalancer-health-check-method: "head"
  name: nginx
  namespace: default
spec:
  ports:
  - port: 80
    protocol: TCP
    targetPort: 80
  selector:
    run: nginx
  type: LoadBalancer

Configurar el drenaje de conexiones para el listener

Anotación: varias, como se muestra a continuación en la tabla. Todas las anotaciones son obligatorias.

Aplica únicamente a los protocolos TCP y UDP.

Anotación

Descripción

Versión de CCM compatible

service.beta.kubernetes.io/alibaba-cloud-loadbalancer-connection-drain

Habilite el drenaje de conexiones. Valores válidos:

  • on

  • off

v2.0.1 y posteriores

service.beta.kubernetes.io/alibaba-cloud-loadbalancer-connection-drain-timeout

Establezca el tiempo de espera del drenaje de conexiones. Unidad: segundos. Rango válido: [10, 900].

v2.0.1 y posteriores

apiVersion: v1
kind: Service
metadata:
  annotations:
    service.beta.kubernetes.io/alibaba-cloud-loadbalancer-connection-drain: "on"
    service.beta.kubernetes.io/alibaba-cloud-loadbalancer-connection-drain-timeout: "30"
  name: nginx
  namespace: default
spec:
  ports:
  - port: 80
    protocol: TCP
    targetPort: 80
  selector:
    run: nginx
  type: LoadBalancer

Configurar encabezados de solicitud adicionales para el listener

Anotación: varias, como se muestra a continuación en la tabla.

Aplica únicamente a los protocolos HTTP y HTTPS.

Anotación

Descripción

Versión de CCM compatible

service.beta.kubernetes.io/alibaba-cloud-loadbalancer-protocol-port

Separe varios valores con comas inglesas (,). Ejemplo: https:443,http:80.

v1.9.3 y posteriores

service.beta.kubernetes.io/alibaba-cloud-loadbalancer-xforwardedfor-proto

Configure si se obtiene el protocolo del listener CLB mediante el encabezado X-Forwarded-Proto. Valores válidos:

  • on

  • off

Valor predeterminado: off

v2.1.0 y posteriores

service.beta.kubernetes.io/alibaba-cloud-loadbalancer-xforwardedfor-slbport

Configure si se obtiene el puerto del listener de la instancia SLB mediante el encabezado XForwardedFor_SLBPORT. Valores válidos:

  • on

  • off

Valor predeterminado: off

v2.9.1 y posteriores

service.beta.kubernetes.io/alibaba-cloud-loadbalancer-xforwardedfor-clientsrcport

Configure si se obtiene el puerto del cliente que accede a la instancia SLB mediante el encabezado XForwardedFor_ClientSrcPort. Valores válidos:

  • on

  • off

Valor predeterminado: off

v2.9.1 y posteriores

apiVersion: v1
kind: Service
metadata:
  annotations:
    service.beta.kubernetes.io/alibaba-cloud-loadbalancer-protocol-port: "http:80"
    service.beta.kubernetes.io/alibaba-cloud-loadbalancer-xforwardedfor-proto: "on"
    service.beta.kubernetes.io/alibaba-cloud-loadbalancer-xforwardedfor-slbport: "on"
    service.beta.kubernetes.io/alibaba-cloud-loadbalancer-xforwardedfor-clientsrcport: "on"
  name: nginx
  namespace: default
spec:
  ports:
  - port: 80
    protocol: TCP
    targetPort: 80
  selector:
    run: nginx
  type: LoadBalancer

Establecer el tiempo de espera de conexión inactiva para el listener

Anotación: varias, como se muestra a continuación en la tabla.

Aplica únicamente a los protocolos HTTP y HTTPS.

Anotación

Descripción

Versión de CCM compatible

service.beta.kubernetes.io/alibaba-cloud-loadbalancer-protocol-port

Separe varios valores con comas inglesas (,). Ejemplo: https:443,http:80.

v1.9.3 y posteriores

service.beta.kubernetes.io/alibaba-cloud-loadbalancer-idle-timeout

Establezca el tiempo de espera de conexión inactiva para el listener. Unidad: segundos. Rango válido: [1, 60].

Valor predeterminado: 15

v2.1.0 y posteriores

apiVersion: v1
kind: Service
metadata:
  annotations:
    service.beta.kubernetes.io/alibaba-cloud-loadbalancer-protocol-port: "http:80"
    service.beta.kubernetes.io/alibaba-cloud-loadbalancer-idle-timeout: "30"
  name: nginx
  namespace: default
spec:
  ports:
  - port: 80
    protocol: TCP
    targetPort: 80
  selector:
    run: nginx
  type: LoadBalancer

Deshabilitar HTTP/2 para el listener

Anotación: varias, como se muestra a continuación en la tabla.

Aplica únicamente al protocolo HTTPS.

Anotación

Descripción

Versión de CCM compatible

service.beta.kubernetes.io/alibaba-cloud-loadbalancer-protocol-port

Separe varios valores con comas inglesas (,). Ejemplo: https:443,http:80.

v1.9.3 y posteriores

service.beta.kubernetes.io/alibaba-cloud-loadbalancer-cert-id

ID del certificado en Alibaba Cloud.

Inicie sesión en la consola de CLB y consulte el ID del certificado en la página Certificates.

Nota

Para crear un certificado, consulte Select an Alibaba Cloud-issued certificate.

v1.9.3.164-g2105d2e-aliyun y posteriores

service.beta.kubernetes.io/alibaba-cloud-loadbalancer-http2-enabled

Habilite HTTP/2. Valores válidos:

  • on

  • off

Valor predeterminado: on

v2.1.0 y posteriores

apiVersion: v1
kind: Service
metadata:
  annotations:
    service.beta.kubernetes.io/alibaba-cloud-loadbalancer-protocol-port: "https:443"
    service.beta.kubernetes.io/alibaba-cloud-loadbalancer-cert-id: "${YOUR_CERT_ID}"
    service.beta.kubernetes.io/alibaba-cloud-loadbalancer-http2-enabled: "off"
  name: nginx
  namespace: default
spec:
  ports:
  - port: 443
    protocol: TCP
    targetPort: 80
  selector:
    run: nginx
  type: LoadBalancer

Establecer el tiempo de espera de solicitud para el listener

Anotación: varias, como se muestra a continuación en la tabla.

Aplica únicamente a los protocolos HTTP y HTTPS.

Anotación

Descripción

Versión de CCM compatible

service.beta.kubernetes.io/alibaba-cloud-loadbalancer-protocol-port

Separe varios valores con comas inglesas (,). Ejemplo: https:443,http:80.

v1.9.3 y posteriores

service.beta.kubernetes.io/alibaba-cloud-loadbalancer-request-timeout

Establezca el tiempo de espera de la solicitud. Unidad: segundos. Rango válido: [1, 180]. Valor predeterminado: 60

Si el servidor de backend no responde dentro del periodo de espera, SLB deja de esperar y devuelve un error HTTP 504 al cliente.

v2.3.0 y posteriores

apiVersion: v1
kind: Service
metadata:
  annotations:
    service.beta.kubernetes.io/alibaba-cloud-loadbalancer-protocol-port: "http:80"
    service.beta.kubernetes.io/alibaba-cloud-loadbalancer-request-timeout: "60"
  name: nginx
  namespace: default
spec:
  ports:
  - port: 80
    protocol: TCP
    targetPort: 80
  selector:
    run: nginx
  type: LoadBalancer

Establecer el tiempo de espera de conexión para el listener

Anotación: service.beta.kubernetes.io/alibaba-cloud-loadbalancer-established-timeout

Aplica únicamente al protocolo TCP.

Descripción

Versión de CCM compatible

Tiempo de espera de conexión. Unidad: segundos. Rango válido: [10, 900]. Para obtener más información, consulte CreateLoadBalancerTCPListener.

v2.3.0 y posteriores

apiVersion: v1
kind: Service
metadata:
  annotations:
    service.beta.kubernetes.io/alibaba-cloud-loadbalancer-established-timeout: "60"
  name: nginx
  namespace: default
spec:
  ports:
  - port: 80
    protocol: TCP
    targetPort: 80
  selector:
    run: nginx
  type: LoadBalancer

Configurar la política de seguridad para el listener

Anotación: varias, como se muestra a continuación en la tabla.

Aplica únicamente al protocolo HTTPS.

Anotación

Descripción

Versión de CCM compatible

service.beta.kubernetes.io/alibaba-cloud-loadbalancer-protocol-port

Separe varios valores con comas inglesas (,). Ejemplo: https:443,http:80.

v1.9.3 y posteriores

service.beta.kubernetes.io/alibaba-cloud-loadbalancer-cert-id

ID del certificado en Alibaba Cloud.

Inicie sesión en la consola de CLB y consulte el ID del certificado en la página Certificates.

Nota

Para crear un certificado, consulte Select an Alibaba Cloud-issued certificate.

v1.9.3.164-g2105d2e-aliyun y posteriores

service.beta.kubernetes.io/alibaba-cloud-loadbalancer-tls-cipher-policy

La política de seguridad incluye las versiones de TLS opcionales y los conjuntos de cifrado para HTTPS. Para obtener más información, consulte CreateLoadBalancerHTTPSListener. Valores válidos:

  • tls_cipher_policy_1_0

  • tls_cipher_policy_1_1

  • tls_cipher_policy_1_2

  • tls_cipher_policy_1_2_strict

  • tls_cipher_policy_1_2_strict_with_1_3

Valor predeterminado: tls_cipher_policy_1_0

v2.4.0 y posteriores

apiVersion: v1
kind: Service
metadata:
  annotations:
    service.beta.kubernetes.io/alibaba-cloud-loadbalancer-protocol-port: "https:443,http:80"
    service.beta.kubernetes.io/alibaba-cloud-loadbalancer-cert-id: "${YOUR_CERT_ID}"
    service.beta.kubernetes.io/alibaba-cloud-loadbalancer-tls-cipher-policy: "tls_cipher_policy_1_2"
  name: nginx
  namespace: default
spec:
  ports:
  - name: https
    port: 443
    protocol: TCP
    targetPort: 443
  - name: http
    port: 80
    protocol: TCP
    targetPort: 80
  selector:
    run: nginx
  type: LoadBalancer

Configurar los protocolos TCP y UDP simultáneamente para el listener

Nota

Esta función requiere la versión v1.24 o posterior del clúster de Kubernetes. Para consultar las instrucciones de actualización, consulte Upgrade ACK cluster Kubernetes version.

apiVersion: v1
kind: Service
metadata:
  name: nginx
  namespace: default
spec:
  ports:
  - name: tcp
    port: 80
    protocol: TCP
    targetPort: 80
  - name: udp
    port: 80
    protocol: UDP
    targetPort: 81
  selector:
    app: nginx
  sessionAffinity: None
  type: LoadBalancer

Configurar Proxy Protocol para listeners TCP y UDP

Anotación: service.beta.kubernetes.io/alibaba-cloud-loadbalancer-proxy-protocol

Cuando se accede al servicio desde dentro del clúster mediante la IP del CLB, el tráfico de la solicitud podría truncarse internamente y causar problemas de acceso. Consulte Set hostname for Service para forzar el paso del tráfico por el CLB mediante una anotación. Para obtener más detalles, consulte Notes on accessing LoadBalancer Service External IP from within the cluster.

Descripción

Versión de CCM compatible

Configure Proxy Protocol para los listeners TCP y UDP. Cuando está habilitado, Proxy Protocol transmite la dirección de origen del cliente a los servidores de backend. Valores válidos:

  • on

  • off

Valor predeterminado: off

Importante

Esta función no admite migración sin interrupciones. Cambiar Proxy Protocol requiere detener el servicio. Configure esta opción con precaución.

v2.6.0 y posteriores

apiVersion: v1
kind: Service
metadata:
  annotations:
    service.beta.kubernetes.io/alibaba-cloud-loadbalancer-proxy-protocol: "on"
  name: nginx
  namespace: default
spec:
  ports:
  - port: 443
    protocol: TCP
    targetPort: 443
  selector:
    run: nginx
  type: LoadBalancer

Operaciones típicas del grupo de servidores de backend

Usar nodos worker con etiquetas específicas como servidores de backend

Anotación: service.beta.kubernetes.io/alibaba-cloud-loadbalancer-backend-label

Descripción

Versión de CCM compatible

Especifique los nodos worker que se montarán en el backend del CLB mediante etiquetas. Separe varias etiquetas con comas inglesas (,). Ejemplo: "k1=v1,k2=v2". Varias etiquetas se evalúan con lógica AND. Aplica únicamente cuando el tipo de servidor de backend está en modo ecs.

v1.9.3 y posteriores

apiVersion: v1
kind: Service
metadata:
  annotations:
    service.beta.kubernetes.io/alibaba-cloud-loadbalancer-backend-label: "failure-domain.beta.kubernetes.io/zone=ap-southeast-5a"
  name: nginx
  namespace: default
spec:
  ports:
  - port: 443
    protocol: TCP
    targetPort: 443
  selector:
    run: nginx
  type: LoadBalancer

Usar los nodos donde residen los pods como servidores de backend

Anotación: service.beta.kubernetes.io/alibaba-cloud-loadbalancer-scheduler

El valor predeterminado de externalTrafficPolicy es el modo Cluster, que monta todos los nodos del clúster en el backend. El modo Local monta únicamente los nodos donde residen los pods.

Descripción

Versión de CCM compatible

Algoritmo de programación. Valores válidos:

  • wrr: round-robin ponderado. Los servidores de backend con mayor peso reciben más solicitudes (mayor probabilidad).

    El modo Local requiere establecer la política de programación en round-robin ponderado wrr.

    Nota

    En las versiones v1.9.3.164-g2105d2e-aliyun y posteriores, los servicios con la política de tráfico externo en modo Local establecen automáticamente los pesos de los nodos según la cantidad de pods en cada uno. Para conocer las reglas de cálculo de peso, consulte How are node weights automatically set in Local mode?.

  • rr: round-robin. Distribuye las solicitudes externas de forma secuencial entre los servidores de backend.

Valor predeterminado: rr

v1.9.3 y posteriores

apiVersion: v1
kind: Service
metadata:
  annotations:
    service.beta.kubernetes.io/alibaba-cloud-loadbalancer-scheduler: "wrr"
  name: nginx
  namespace: default
spec:
  externalTrafficPolicy: Local
  ports:
  - port: 80
    protocol: TCP
    targetPort: 80
  selector:
    run: nginx
  type: LoadBalancer

Quitar nodos en estado unschedulable del backend del CLB

Anotación: service.beta.kubernetes.io/alibaba-cloud-loadbalancer-remove-unscheduled-backend

Descripción

Versión de CCM compatible

Elimine los nodos SchedulingDisabled del backend del CLB. Valores válidos:

  • on: elimina los nodos en estado unschedulable del grupo de servidores de backend del CLB.

  • off: los comandos kubectl cordon y kubectl drain colocan los nodos en estado unschedulable. Estos nodos permanecen en el grupo de servidores de backend del CLB.

Valor predeterminado: off

v1.9.3.164-g2105d2e-aliyun y posteriores

apiVersion: v1
kind: Service
metadata:
  annotations:
    service.beta.kubernetes.io/alibaba-cloud-loadbalancer-remove-unscheduled-backend: "on"
  name: nginx
spec:
  externalTrafficPolicy: Local
  ports:
  - name: http
    port: 30080
    protocol: TCP
    targetPort: 80
  selector:
    app: nginx
  type: LoadBalancer

Montar ENI de pods directamente en el backend del CLB

Anotación: service.beta.kubernetes.io/backend-type

Descripción

Valor predeterminado

Versión de CCM compatible

Tipo de servidor de backend del CLB. Valores válidos:

  • eni: monta los pods directamente en el backend del CLB para mejorar el rendimiento del reenvío de red. Aplica únicamente en el modo de red Terway.

    También puede cambiar manualmente service.beta.kubernetes.io/backend-type: "eni" a eni o ecs para montar instancias ECS en el backend del CLB.

  • ecs: monta instancias ECS en el backend del CLB.

  • Modo de red Flannel: ecs

  • Modo de red Terway:

    • Clústeres Terway creados antes del 10 de agosto de 2020: ecs

    • Clústeres Terway creados el 10 de agosto de 2020 o después: eni

v1.9.3.164-g2105d2e-aliyun y posteriores

apiVersion: v1
kind: Service
metadata:
  annotations:
    service.beta.kubernetes.io/backend-type: "eni"
  name: nginx
spec:
  ports:
  - name: http
    port: 30080
    protocol: TCP
    targetPort: 80
  selector:
    app: nginx
  type: LoadBalancer

Reutilizar un grupo de servidores virtuales existente

Anotación: service.beta.kubernetes.io/alibaba-cloud-loadbalancer-vgroup-port

Admite la reutilización de grupos de servidores virtuales existentes. Aplica únicamente al reutilizar instancias CLB existentes. Para ver ejemplos de uso, consulte Achieve cross-cluster service deployment by reusing existing SLB instances.

Establecer el peso de tráfico para un Service

Anotación: service.beta.kubernetes.io/alibaba-cloud-loadbalancer-weight

En escenarios donde varios Services reutilizan el mismo CLB, use esta anotación para establecer el peso de tráfico del Service actual. Esta anotación aplica únicamente al reutilizar grupos de servidores virtuales existentes. Para ver ejemplos de uso, consulte Achieve cross-cluster service deployment by reusing existing SLB instances.

Ignorar las actualizaciones de peso de los servidores de backend

Anotación: service.beta.kubernetes.io/alibaba-cloud-loadbalancer-ignore-weight-update

Descripción

Versión de CCM compatible

Omita la actualización de los pesos de los servidores de backend en el grupo de servidores virtuales durante la sincronización del Service. Use esta configuración cuando gestione los pesos de los servidores de backend manualmente fuera de CCM. Valores válidos:

  • on

  • off

Valor predeterminado: off

v2.11.1 y posteriores

apiVersion: v1
kind: Service
metadata:
  annotations:
    service.beta.kubernetes.io/alibaba-cloud-loadbalancer-ignore-weight-update: "on"
  name: nginx
  namespace: default
spec:
  ports:
  - port: 443
    protocol: TCP
    targetPort: 443
  selector:
    run: nginx
  type: LoadBalancer

Establecer el peso predeterminado de los servidores de backend

Anotación: service.beta.kubernetes.io/alibaba-cloud-loadbalancer-default-weight

Descripción

Versión de CCM compatible

Establezca el peso predeterminado para los servidores del grupo. Un peso mayor genera más tráfico de solicitudes.

Rango válido: [0, 100]. Si no se especifica, el sistema usa el peso predeterminado correspondiente al tipo de red actual.

Esta configuración no aplica cuando la instancia de backend es ECS y el valor de externalTrafficPolicy del Service está en modo Local.

v2.14.0 y posteriores

apiVersion: v1
kind: Service
metadata:
  annotations:
    # Set default server weight in server group to 35
    service.beta.kubernetes.io/alibaba-cloud-loadbalancer-default-weight: "35"
  name: nginx
  namespace: default
spec:
  ports:
  - port: 443
    protocol: TCP
    targetPort: 443
  selector:
    run: nginx
  type: LoadBalancer