El campo listeners de un AlbConfig configura los listeners de un Application Load Balancer (ALB). Este tema describe el comportamiento de actualización del campo listeners y muestra cómo crear, configurar y eliminar listeners.
Requisitos previos
Antes de empezar, asegúrese de contar con lo siguiente:
Dos vSwitches en zonas distintas, dentro de la misma VPC que su clúster y en zones that support ALB. Para más información, consulte Create and manage vSwitches.
-
El controlador de Ingress de ALB instalado en su clúster. Para más información, consulte Manage the ALB Ingress controller.
Para usar un Ingress de ALB y acceder a servicios desplegados en un clúster ACK dedicado, primero otorgue al clúster los permisos obligatorios para el controlador de Ingress de ALB. Para más información, consulte Grant an ACK dedicated cluster access to the ALB Ingress controller .
Un recurso AlbConfig. Para más información, consulte Create AlbConfig.
Notas de uso
Las instancias de ALB que crean los clústeres de ACK son recursos gestionados (ServiceManagedResource). Al trabajar con estas instancias, aplique las siguientes restricciones y directrices.
Restricciones de la consola de ALB
No cree, modifique ni elimine listeners directamente en la consola de ALB. Por ejemplo, no cambie los puertos de los listeners ni los elimine desde la consola. ACK sincroniza continuamente la configuración de los listeners desde el CRD AlbConfig hacia la instancia de ALB. Cualquier cambio manual en la consola de ALB se sobrescribe durante el siguiente ciclo de sincronización.
Si omite AlbConfig y modifica la configuración de los listeners directamente en la consola de ALB, se producen los siguientes problemas:
La consola de ALB devuelve el error
OperationDenied.ServiceManagedResourcecuando intenta modificar la configuración de los listeners.Los listeners agregados manualmente (por ejemplo, el puerto 443) pueden eliminarse automáticamente después de que ACK sincronice la configuración.
Cuando reutiliza una instancia de ALB existente con ACK, la configuración manual de los listeners no se conserva.
Ruta correcta de configuración
Toda la configuración de los listeners, incluidos los certificados HTTPS, los puertos y los tiempos de espera de las solicitudes, debe gestionarse exclusivamente mediante el recurso personalizado AlbConfig de su clúster de Kubernetes. AlbConfig es la única fuente de verdad para la configuración de los listeners de ALB y no debe modificarse desde la consola de ALB.
Parámetros de los listeners
A continuación se muestran todos los parámetros disponibles en spec.listeners dentro de un AlbConfig.
|
Parameter |
Type |
Default |
Protocols |
Description |
|
|
integer |
— |
HTTP, HTTPS, QUIC |
Puerto del listener. Obligatorio. Si cambia este valor, se elimina el listener original y se crea uno nuevo. |
|
|
string |
— |
HTTP, HTTPS, QUIC |
Protocolo del listener. Obligatorio. Si cambia este valor, se elimina el listener original y se crea uno nuevo. |
|
|
string |
— |
HTTPS |
ID del certificado que se asigna al listener. |
|
|
boolean |
— |
HTTPS |
Indica si este es el certificado predeterminado. |
|
|
boolean |
|
HTTPS |
Indica si se habilita la verificación del certificado de CA. |
|
|
string |
— |
HTTPS |
ID de la directiva de seguridad TLS. Por ejemplo, |
|
|
integer |
|
HTTP, HTTPS |
Tiempo máximo (en segundos) de espera por una respuesta del backend antes de devolver un error HTTP 504. Valores válidos: de 1 a 600. |
|
|
string |
— |
— |
Clave de la etiqueta. |
|
|
string |
— |
— |
Valor de la etiqueta. |
|
|
boolean |
— |
HTTP, HTTPS |
Indica si se habilita la compresión de datos. |
|
|
boolean |
|
HTTP, HTTPS |
Indica si se incluye la IP del cliente en el encabezado |
|
|
boolean |
— |
HTTP, HTTPS |
Indica si se incluye el protocolo del listener en los encabezados de solicitud que se reenvían a los servidores backend. |
|
|
boolean |
— |
HTTP, HTTPS |
Indica si se incluye el ID de la instancia de SLB en los encabezados de solicitud que se reenvían a los servidores backend. |
|
|
boolean |
— |
HTTP, HTTPS |
Indica si se incluye el puerto de escucha en los encabezados de solicitud que se reenvían a los servidores backend. |
|
|
boolean |
— |
HTTP, HTTPS |
Indica si se obtiene la IP real del cliente desde el encabezado |
|
|
string |
— |
HTTP, HTTPS |
Lista de direcciones IP o bloques CIDR de proxy de confianza, separados por punto y coma. Solo surte efecto cuando |
|
|
string |
— |
HTTP, HTTPS |
Tipo de ACL: |
|
|
string |
— |
HTTP, HTTPS |
Bloques CIDR para el control de acceso. Cada entrada debe ser un bloque CIDR completo. |
Comportamiento de actualización del campo listeners
El campo listeners es un arreglo, por lo que se actualiza mediante reemplazo total: la nueva configuración sustituye por completo a la existente. Comprender este comportamiento le permite predecir qué sucede al aplicar un AlbConfig actualizado.
Términos clave
Archivo de configuración del objeto: archivo YAML que usted aplica y que contiene el estado deseado del AlbConfig.
Archivo de configuración del objeto existente: configuración que ya se ejecuta en su clúster.
last-applied-configuration: anotación de Kubernetes que registra la configuración anterior. No se actualiza en tiempo real.
Reglas de actualización
|
Scenario |
In new config |
In existing config |
In |
Result |
|
① |
Sí |
Sí |
— |
Fusión: aplica los valores de la nueva configuración para actualizar el objeto existente. |
|
② |
Sí |
No |
— |
Creación: agrega el nuevo listener. |
|
③ |
No |
— |
Sí |
Eliminación: quita el listener. Puede restablecerse al valor predeterminado. |
|
④ |
No |
Sí |
No |
Eliminación: quita el listener de la configuración existente. |
Ejemplo
A continuación se muestra cómo se aplican las reglas al actualizar el campo listeners.
Nueva configuración (archivo de configuración del objeto):
listeners:
- port: 8001
protocol: HTTP
- port: 8003
protocol: HTTP
- port: 8005 # New — will be added
protocol: HTTP
Configuración existente:
listeners:
- port: 8001
protocol: HTTP
- port: 8002 # Missing from new config and in last-applied-configuration — will be deleted
protocol: HTTP
- port: 8003
protocol: HTTP
- port: 8004 # Missing from new config but not in last-applied-configuration — will be deleted
protocol: HTTP
last-applied-configuration:
listeners:
- port: 8001
protocol: HTTP
- port: 8002
protocol: HTTP
- port: 8003
protocol: HTTP
Resultado tras aplicar la nueva configuración:
listeners:
- port: 8001 # Meets condition ① — retained
protocol: HTTP
- port: 8003 # Meets condition ① — retained
protocol: HTTP
- port: 8005 # Meets condition ② — added
protocol: HTTP
# port 8002 meets condition ③ — deleted
# port 8004 meets condition ④ — deleted
Crear un listener
Un listener es el punto de entrada mediante el cual una instancia de ALB recibe y distribuye el tráfico según la información de la capa de aplicación. Los campos port y protocol identifican de forma única a cada listener.
Si modifica port, protocol o cualquier otra propiedad del listener, se elimina el listener original y se crea uno nuevo.
Los listeners HTTP admiten WebSocket de forma automática. No se requiere ninguna configuración adicional.
Opciones disponibles para protocol: HTTP, HTTPS, QUIC.
Console
Inicie sesión en la consola de Container Service y haga clic en Clusters en el panel de navegación izquierdo.
Haga clic en el nombre de su clúster. En el panel de navegación izquierdo, elija Workloads > Custom Resources.
En la pestaña Resource Objects, introduzca
AlbConfigen el cuadro de búsqueda y haga clic en el resultado AlbConfig.En el panel AlbConfig, busque el recurso AlbConfig (denominado
albde forma predeterminada) y haga clic en Edit YAML en la columna Actions.-
En el panel Edit YAML, agregue los campos
spec.listeners.portyspec.listeners.protocol, y luego haga clic en OK.
kubectl
Ejecute el siguiente comando para editar el AlbConfig:
kubectl edit albconfig <AlbConfig_Name>
Agregue el campo listeners dentro de spec:
apiVersion: alibabacloud.com/v1
kind: AlbConfig
metadata:
name: alb-demo
spec:
config:
# ... other config fields
listeners:
- port: 80
protocol: HTTP # Options: HTTP, HTTPS, QUIC
Causas comunes de error en la creación automática de instancias de ALB
Si AlbConfig no logra crear automáticamente una instancia de ALB, una de las causas más frecuentes es una configuración incompleta de los listeners. Por ejemplo, si sus rutas de Ingress requieren TLS/HTTPS pero AlbConfig no incluye listeners tanto para el puerto 80 (HTTP) como para el 443 (HTTPS), o si falta el certificado HTTPS obligatorio o está mal configurado, la creación o sincronización de la instancia puede fallar.
Para evitar este problema, compruebe que la configuración de los listeners de AlbConfig coincida con los requisitos de su Ingress antes de aplicarla:
Se definen los listeners de los puertos 80 y 443 cuando se usan rutas de Ingress con TLS/HTTPS.
Se asigna un certificado válido al listener HTTPS, o bien se configura correctamente la detección automática de certificados basada en el nombre de dominio.
Configurar certificados HTTPS
Establezca el campo certificates para asignar uno o más certificados a un listener HTTPS. ALB define el primer certificado como el predeterminado. Los demás certificados se utilizan para cifrar solicitudes únicamente cuando el certificado predeterminado caduca o deja de ser aplicable.
Si no especifica un certificado, el listener no se crea de inmediato. Se crea después de asociar un Ingress y detectar automáticamente un certificado según el nombre de dominio. Para más detalles, consulte Configure HTTPS certificates for encrypted communication .
listeners:
- caEnabled: false
certificates:
- CertificateId: 756****-cn-hangzhou # Certificate ID
IsDefault: true
port: 443
protocol: HTTPS
Configurar una directiva de seguridad TLS
Establezca securityPolicyId para aplicar una directiva de seguridad TLS a un listener HTTPS. Las directivas pueden ser personalizadas o predefinidas. Para más información, consulte TLS security policy.
listeners:
- port: 443
protocol: HTTPS
securityPolicyId: tls_cipher_policy_1_1 # Security policy ID
Establecer el tiempo de espera de las solicitudes
Establezca requestTimeout para controlar cuánto tiempo espera Server Load Balancer (SLB) la respuesta de un servidor backend después de recibir una solicitud del cliente. Si no se recibe respuesta dentro de ese plazo, la instancia de SLB deja de esperar y devuelve un error HTTP 504 al cliente.
Valor predeterminado:
60segundos.Valores válidos: de 1 a 600 (entero, en segundos).
Para usar un valor superior a 600, solicite un aumento de cuota en el Centro de cuotas.
listeners:
- port: 80
protocol: HTTP
requestTimeout: 60 # Seconds. Default: 60. Valid values: 1–600.
Ámbito de aplicación
requestTimeout es un parámetro a nivel de listener (nivel de puerto). Se aplica de manera global a todas las rutas que usan el mismo puerto de listener en la instancia de ALB. No se admite establecer distintos tiempos de espera de sesiones inactivas del frontend para rutas individuales dentro del mismo listener.
Compatibilidad con respuestas de streaming de IA
ALB es compatible con interfaces de respuestas de streaming de IA (por ejemplo, la salida de streaming de modelos de lenguaje grandes). Cuando use ALB con cargas de trabajo de streaming de IA, tenga en cuenta lo siguiente:
Establezca
requestTimeouten un valor lo bastante alto para cubrir toda la duración de la transferencia de streaming. Un valor demasiado bajo provoca que ALB cierre la conexión antes de que finalice el flujo y devuelva un error HTTP 504 al cliente.Compruebe la configuración de tiempo de espera de todos los componentes de la cadena de solicitudes, como WAF y los servicios backend, para evitar que la conexión se cierre de forma prematura e interrumpa la sesión de streaming.
Agregar etiquetas a los listeners
Use el campo tags para agregar etiquetas de clave-valor a un listener.
listeners:
- port: 80
protocol: HTTP
tags:
- key: "key"
value: "value1"
Habilitar la compresión de datos
Establezca gzipEnabled para controlar si ALB comprime los datos de respuesta antes de reenviarlos a los clientes.
true: comprime las respuestas con Brotli o Gzip, según el tipo de contenido.false: deshabilita la compresión para todos los tipos de contenido.
La compresión se activa solo cuando Content-Length en el encabezado de respuesta supera los 1024 bytes. Los dos algoritmos de compresión funcionan de la siguiente manera:
Brotli: comprime todos los tipos de contenido.
Gzip: comprime
text/plain,text/css,application/javascript,application/x-javascript,application/rss+xml,application/atom+xml,application/xmlyapplication/json.
A continuación se muestra un ejemplo que deshabilita la compresión:
listeners:
- port: 80
protocol: HTTP
gzipEnabled: false # true: compress specific content types. false: disable all compression.
Configurar los encabezados X-Forwarded-For
Use el campo xForwardedForConfig para controlar qué información incluye ALB en los encabezados de solicitud al reenviar tráfico a los servidores backend.
Todos los parámetros de xForwardedForConfig se aplican únicamente a los listeners HTTP y HTTPS.
Obtener la dirección IP del cliente
XForwardedForEnabled siempre está habilitado y no puede deshabilitarse. Cuando está activo, ALB agrega la IP de origen del cliente al encabezado X-Forwarded-For.
listeners:
- port: 80
protocol: HTTP
xForwardedForConfig:
XForwardedForEnabled: true
Obtener el protocolo del listener
Establezca XForwardedForProtoEnabled en true para incluir el protocolo del listener en los encabezados que se reenvían a los servidores backend.
listeners:
- port: 80
protocol: HTTP
xForwardedForConfig:
XForwardedForProtoEnabled: true
Obtener el ID de la instancia de SLB
Establezca XForwardedForSLBIdEnabled en true para incluir el ID de la instancia de SLB en los encabezados que se reenvían a los servidores backend.
listeners:
- port: 80
protocol: HTTP
xForwardedForConfig:
XForwardedForSLBIdEnabled: true # true: include SLB instance ID. false: omit it.
Obtener el puerto de escucha
Establezca XForwardedForSLBPortEnabled en true para incluir el puerto de escucha en los encabezados que se reenvían a los servidores backend.
listeners:
- port: 80
protocol: HTTP
xForwardedForConfig:
XForwardedForSLBPortEnabled: true # true: include listening port. false: omit it.
Obtener la IP real del cliente detrás de proxies
Cuando las solicitudes pasan por proxies, el encabezado X-Forwarded-For puede contener una cadena de direcciones IP. Establezca XForwardedForClientSourceIpsEnabled en true para permitir que ALB identifique la IP real del cliente. Para ello, recorre la lista de derecha a izquierda y selecciona la primera IP que no esté en la lista de confianza.
Use XForwardedForClientSourceIpsTrusted para especificar qué IP de proxy son de confianza. Esto resulta útil en escenarios como la limitación de velocidad por IP de origen.
Formato: direcciones IP o bloques CIDR separados por punto y coma, sin espacios.
XForwardedForClientSourceIpsTrustedsolo surte efecto cuandoXForwardedForClientSourceIpsEnabledestrue.
listeners:
- port: 80
protocol: HTTP
xForwardedForConfig:
XForwardedForClientSourceIpsEnabled: true
XForwardedForClientSourceIpsTrusted: 192.168.x.x;192.168.x.x/16 # Semicolon-separated, no spaces
Configurar el control de acceso
Use el campo aclConfig para habilitar el control de acceso en un listener de ALB. El control de acceso le permite permitir o bloquear direcciones IP específicas mediante la configuración de una lista de permitidos o de bloqueados. Para más información, consulte Configure ACLs for access control.
aclType: establezcaWhitepara una lista de permitidos oBlackpara una lista de bloqueados.aclEntries: lista de bloques CIDR. Cada entrada debe ser un bloque CIDR completo.
listeners:
- port: 80
protocol: HTTP
aclConfig:
aclEntries:
- 127.0.0.1/32 # CIDR block must be complete
aclType: White # White: allowlist. Black: blocklist.
Eliminar un listener
Para eliminar un listener, quítelo del campo albconfig.spec.listeners.
Elimine todos los Ingress asociados al listener antes de borrarlo. Si algún Ingress sigue asociado, la eliminación falla.
Antes:
listeners:
- port: 8001
protocol: HTTP
- port: 8002 # Listener to delete
protocol: HTTP
Después:
listeners:
- port: 8001
protocol: HTTP