Configure las anotaciones de ALB Ingress para el enrutamiento, la redirección HTTPS, las comprobaciones de estado y las versiones canary.
Requisitos previos
Antes de empezar, asegúrese de contar con lo siguiente:
Un ACK serverless cluster con una Virtual Private Cloud (VPC) y NAT Gateway para tener acceso a Internet.
kubectl está conectado al clúster.
Referencia rápida de anotaciones
Las funciones de ALB Ingress se configuran mediante anotaciones en el campo metadata.annotations. La siguiente tabla enumera las anotaciones compatibles por categoría.
|
Categoría |
Anotación |
Descripción |
|
Comprobación de estado |
|
Habilitar o deshabilitar comprobaciones de estado |
|
|
Ruta de comprobación de estado |
|
|
|
Protocolo: |
|
|
|
Versión HTTP: |
|
|
|
Método: |
|
|
|
Código de estado esperado (tiene prioridad sobre |
|
|
|
Código de estado HTTP esperado (clústeres anteriores a la versión 1.19) |
|
|
|
Tiempo de espera en segundos (1–300) |
|
|
|
Intervalo de comprobación en segundos (1–50) |
|
|
|
Éxitos consecutivos para marcar como saludable (2–10) |
|
|
|
Fallos consecutivos para marcar como no saludable (2–10) |
|
|
|
Puerto para comprobaciones de estado (0 = puerto del backend) |
|
|
TLS / HTTPS |
|
Redirigir el puerto HTTP 80 al puerto HTTPS 443 |
|
Protocolo del backend |
|
Protocolo del backend: |
|
Coincidencia de rutas |
|
Habilitar expresiones regulares en reglas de ruta |
|
Reescritura |
|
Reescribir la ruta de la solicitud antes de reenviarla |
|
Puertos de escucha |
|
Puertos de escucha personalizados, por ejemplo, |
|
Prioridad de reenvío |
|
Prioridad de regla de reenvío (1–1000; menor valor = mayor prioridad) |
|
Versión canary |
|
Habilitar enrutamiento canary |
|
|
Enrutar por nombre de encabezado de solicitud |
|
|
|
Enrutar por valor exacto de encabezado |
|
|
|
Enrutar por nombre de cookie ( |
|
|
|
Porcentaje de tráfico para enrutar a canary (0–100) |
|
|
Persistencia de sesión |
|
Habilitar persistencia de sesión |
|
|
Modo de cookie: |
|
|
|
Tiempo de espera de cookie en segundos (1–86400) |
|
|
|
Nombre de cookie personalizado (obligatorio cuando el tipo es |
|
|
Algoritmo de balanceo de carga |
|
Algoritmo: |
|
|
Nombre del parámetro URL para hash |
|
|
CORS |
|
Habilitar Cross-Origin Resource Sharing (CORS) |
|
|
Orígenes permitidos |
|
|
|
Métodos HTTP permitidos |
|
|
|
Encabezados de solicitud permitidos |
|
|
|
Encabezados expuestos al navegador |
|
|
|
Indica si se permiten credenciales |
|
|
|
Duración de caché preflight en segundos (−1–172800) |
|
|
Conexiones del backend |
|
Habilitar conexiones persistentes al backend |
|
Limitación de tasa |
|
Límite de QPS por regla de reenvío (1–100,000) |
|
Inicio lento |
|
Habilitar inicio lento para nuevos pods |
|
|
Duración de rampa en segundos (30–900) |
|
|
Drenado de conexiones |
|
Habilitar drenado de conexiones |
|
|
Tiempo de espera de drenado en segundos (0–900) |
Reenviar solicitudes según nombres de dominio
Cree un Ingress para reenviar solicitudes por nombre de dominio. ALB Ingress admite nombres de dominio estándar y vacíos.
Reenviar solicitudes según un nombre de dominio estándar
El siguiente ejemplo establece la ruta de enrutamiento en /hello. Las solicitudes a demo.domain.ingress.top/hello se reenvían al Service del backend.
-
Despliegue la siguiente plantilla para crear un Service, un Deployment y un Ingress. Las solicitudes se reenvían al Service a través del nombre de dominio definido en el Ingress.
-
Pruebe el enrutamiento. Reemplace
ADDRESScon el nombre de dominio de la instancia ALB (ejecutekubectl get ingpara obtenerlo).curl -H "host: demo.domain.ingress.top" <ADDRESS>/helloSalida esperada:
{"hello":"coffee"}
Reenviar solicitudes según un nombre de dominio vacío
Cuando el campo host está vacío, el Ingress coincide con todas las solicitudes sin importar el dominio. El siguiente ejemplo enruta las solicitudes a <ADDRESS>/hello hacia el Service del backend.
-
Despliegue la siguiente plantilla para crear un Ingress.
-
Pruebe el enrutamiento. Reemplace
ADDRESScon el nombre de dominio de la instancia ALB.curl <ADDRESS>/helloSalida esperada:
{"hello":"coffee"}
Reenviar solicitudes según rutas URL
ALB Ingress reenvía solicitudes según rutas URL mediante el campo pathType. Se admiten tres tipos de coincidencia:
|
** |
Comportamiento |
|
|
Coincide con el prefijo de ruta segmento por segmento, distingue mayúsculas y minúsculas |
|
|
Solo coincidencia exacta |
|
|
El controlador de ALB Ingress lo maneja como coincidencia exacta (Exact). Si no se establece |
Si pathType se establece en Exact o Prefix, path debe ser una ruta absoluta no vacía. De lo contrario, la creación del Ingress falla con un error de validación. Cuando varias reglas de coincidencia de URL entran en conflicto, ALB las evalúa según la prioridad de regla de reenvío.
Referencia de coincidencia de rutas
Rutas simples (/, /foo, /foo/)
|
Tipo de coincidencia |
Ruta de regla |
Ruta de solicitud |
¿Coincide? |
|
Prefix |
|
|
Sí |
|
Prefix |
|
|
Sí |
|
Prefix |
|
|
Sí |
|
Prefix |
|
|
Sí |
|
Prefix |
|
|
Sí |
|
Prefix |
|
|
No — el prefijo no coincide |
|
Exact o ImplementationSpecific |
|
|
Sí |
|
Exact o ImplementationSpecific |
|
|
No |
|
Exact o ImplementationSpecific |
|
|
No |
|
Exact o ImplementationSpecific |
|
|
No |
Rutas jerárquicas (/aaa/bb, /aaa/bbb, /aaa/bbb/)
|
Tipo de coincidencia |
Ruta de regla |
Ruta de solicitud |
¿Coincide? |
|
Prefix |
|
|
No |
|
Prefix |
|
|
Sí |
|
Prefix |
|
|
Sí — se ignora la barra final en la regla |
|
Prefix |
|
|
Sí — coincide con la barra final en la solicitud |
|
Prefix |
|
|
Sí — coincide con la subruta |
Múltiples rutas de regla
|
Tipo de coincidencia |
Rutas de regla |
Ruta de solicitud |
¿Coincide? |
|
Prefix |
|
|
Sí — coincide con el prefijo |
|
Prefix |
|
|
Sí — coincide con el prefijo |
|
Prefix |
|
|
Sí — coincide con el prefijo |
|
Prefix |
|
|
No — el prefijo no coincide |
Coincidencia de prefijo (Prefix)
La coincidencia de prefijo compara segmentos de ruta separados por / y distingue mayúsculas de minúsculas. El siguiente ejemplo establece la ruta de regla en /, que coincide con todas las rutas, incluida /hello.
-
Despliegue la siguiente plantilla para crear un Ingress.
-
Pruebe el enrutamiento. Reemplace
ADDRESScon el nombre de dominio de la instancia ALB.curl <ADDRESS>/helloSalida esperada:
{"hello":"coffee"}
Coincidencia exacta (Exact o ImplementationSpecific)
El siguiente ejemplo establece la ruta de regla en /hello. Solo coincide exactamente con la ruta /hello.
-
Despliegue la siguiente plantilla para crear un Ingress.
-
Pruebe el enrutamiento. Reemplace
ADDRESScon el nombre de dominio de la instancia ALB.curl <ADDRESS>/helloSalida esperada:
{"hello":"coffee"}
Redirigir HTTP a HTTPS
Agregue la anotación alb.ingress.kubernetes.io/ssl-redirect: "true" para redirigir solicitudes HTTP al puerto HTTPS 443.
Esta anotación solo aplica a reglas de reenvío HTTP en el puerto de escucha 80. Esta función solo opera con las anotaciones RemoveHeader, InsertHeader y CORS entre dominios. Antes de agregar esta anotación, configure an HTTPS listener on port 443 en AlbConfig.
Clústeres que ejecutan Kubernetes 1.19 o posterior
apiVersion: v1
kind: Service
metadata:
name: demo-service-ssl
namespace: default
spec:
ports:
- name: port1
port: 80
protocol: TCP
targetPort: 8080
selector:
app: demo-ssl
sessionAffinity: None
type: ClusterIP
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: demo-ssl
namespace: default
spec:
replicas: 1
selector:
matchLabels:
app: demo-ssl
template:
metadata:
labels:
app: demo-ssl
spec:
containers:
- image: registry.cn-hangzhou.aliyuncs.com/alb-sample/cafe:v1
imagePullPolicy: IfNotPresent
name: demo-ssl
ports:
- containerPort: 8080
protocol: TCP
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
annotations:
alb.ingress.kubernetes.io/ssl-redirect: "true"
name: demo-ssl
namespace: default
spec:
ingressClassName: alb
tls:
- hosts:
- ssl.alb.ingress.top
rules:
- host: ssl.alb.ingress.top
http:
paths:
- backend:
service:
name: demo-service-ssl
port:
number: 80
path: /
pathType: Prefix
Clústeres que ejecutan versiones de Kubernetes anteriores a la 1.19
apiVersion: v1
kind: Service
metadata:
name: demo-service-ssl
namespace: default
spec:
ports:
- name: port1
port: 80
protocol: TCP
targetPort: 8080
selector:
app: demo-ssl
sessionAffinity: None
type: ClusterIP
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: demo-ssl
namespace: default
spec:
replicas: 1
selector:
matchLabels:
app: demo-ssl
template:
metadata:
labels:
app: demo-ssl
spec:
containers:
- image: registry.cn-hangzhou.aliyuncs.com/alb-sample/cafe:v1
imagePullPolicy: IfNotPresent
name: demo-ssl
ports:
- containerPort: 8080
protocol: TCP
---
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
annotations:
alb.ingress.kubernetes.io/ssl-redirect: "true"
name: demo-ssl
namespace: default
spec:
ingressClassName: alb
tls:
- hosts:
- ssl.alb.ingress.top
rules:
- host: ssl.alb.ingress.top
http:
paths:
- backend:
serviceName: demo-service-ssl
servicePort: 80
path: /
pathType: Prefix
Configurar comprobaciones de estado
Configure las comprobaciones de estado para el grupo de servidores del backend con las siguientes anotaciones.
Usar HTTPS y gRPC como protocolos del backend
Agregue la anotación alb.ingress.kubernetes.io/backend-protocol para usar HTTPS o gRPC como protocolo del backend.
Una vez creado un Ingress, no se puede cambiar el protocolo del backend. Para cambiar de protocolo, elimine el Ingress y cree uno nuevo.
Al reenviar tráfico gRPC a través de un Ingress, configure un certificado TLS para el nombre de dominio y utilice TLS para la comunicación.
|
Anotación |
Valores |
Descripción |
|
|
|
El Service del backend usa HTTPS |
|
|
El Service del backend usa gRPC. Requiere configuración TLS en el nombre de dominio |
Configurar expresiones regulares
Use la anotación alb.ingress.kubernetes.io/use-regex: "true" para habilitar la coincidencia de expresiones regulares en las reglas de ruta. Esta anotación solo aplica a reglas de ruta con pathType: Prefix.
|
Anotación |
Descripción |
|
|
Habilita expresiones regulares en reglas de ruta |
|
|
Configura condiciones de reenvío personalizadas. Reemplace |
Reglas de coincidencia de expresiones regulares:
|
Objetivo |
Prefijo |
Ejemplo de regla |
Ruta del cliente |
¿Coincide? |
Notas |
|
Nombre de dominio |
Comienza con |
|
|
Sí |
Los nombres de dominio admiten coincidencias sin distinción entre mayúsculas y minúsculas |
|
Ruta |
Comienza con |
|
|
Sí |
Coincidencia sin distinción entre mayúsculas y minúsculas |
|
Ruta |
Comienza con |
|
|
No |
Coincidencia con distinción entre mayúsculas y minúsculas |
Configurar reescrituras
ALB Ingress reescribe la ruta de la solicitud antes de reenviarla. Dos anotaciones controlan el comportamiento de reescritura:
alb.ingress.kubernetes.io/rewrite-target: /<path>/${number}— habilita la reescritura y establece la ruta destino. Use el formato${number}para hacer referencia a un grupo de captura de la ruta original (hasta tres grupos:${1},${2},${3}).pathTypedebe serPrefix.alb.ingress.kubernetes.io/use-regex— especifica si se usan expresiones regulares en la ruta. Se habilita automáticamente cuando se configurarewrite-target. Establezca en"false"para deshabilitar; tenga en cuenta que no se pueden crear rutas con caracteres especiales (%#;!()[]^,"\") cuando la expresión regular está deshabilitada.
Escenario 1: Eliminar un prefijo
La ruta path: /something(/|$)(.*) utiliza tres grupos de captura:
/something— coincide con el prefijo a eliminar(/|$)— primer grupo: coincide con/o el final de la ruta(.*)— segundo grupo: captura todo lo que sigue a/something/, referenciado como${2}en el destino de reescritura
El destino de reescritura / + ${2} elimina el prefijo /something:
|
Ruta original |
¿Coincide? |
Ruta reescrita |
|
|
Sí (el segundo grupo está vacío) |
|
|
|
Sí (el segundo grupo está vacío) |
|
|
|
Sí (segundo grupo: |
|
|
|
No |
503 |
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: rewrite-ingress
annotations:
alb.ingress.kubernetes.io/use-regex: "true"
alb.ingress.kubernetes.io/rewrite-target: /${2}
spec:
ingressClassName: alb
rules:
- host: demo.alb.ingress.top
http:
paths:
- path: /something(/|$)(.*)
pathType: Prefix
backend:
service:
name: rewrite-svc
port:
number: 9080
Escenario 2: Captura y reorganización de varios segmentos
La ruta /items/(.*)/(.*)/(.*) captura tres segmentos. El destino de reescritura /${2}?code=${3} reestructura la URL mediante el segundo y tercer grupo de captura.
Este patrón requiere exactamente cuatro segmentos de ruta. Los clientes deben usar un formato de ruta fijo.
|
Ruta original |
¿Coincide? |
Ruta reescrita |
|
|
Sí (grupo 2: |
|
|
|
Sí (grupo 2: |
|
|
|
No |
503 |
|
|
No |
503 |
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: rewrite-ingress
annotations:
alb.ingress.kubernetes.io/use-regex: "true"
alb.ingress.kubernetes.io/rewrite-target: /${2}?code=${3}
spec:
ingressClassName: alb
rules:
- host: demo.alb.ingress.top
http:
paths:
- path: /items/(.*)/(.*)/(.*)
pathType: Prefix
backend:
service:
name: rewrite-svc
port:
number: 9080
Escenario 3: Reescritura de varias rutas a una sola ruta
En el siguiente ejemplo, tanto /app-a como /app-b se enrutan hacia /app-c al definir dos reglas de ruta con el mismo destino de reescritura /${2} → /app-c/${2}.
|
Ruta original |
¿Coincide? |
Ruta reescrita |
|
|
Sí (grupo 2: |
|
|
|
Sí (grupo 2: |
|
|
|
Sí (el grupo 2 está vacío) |
|
|
|
No |
503 |
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: rewrite-ingress
annotations:
alb.ingress.kubernetes.io/use-regex: "true"
alb.ingress.kubernetes.io/rewrite-target: /app-c/${2}
spec:
ingressClassName: alb
rules:
- host: demo.alb.ingress.top
http:
paths:
- path: /app-a(/|$)(.*)
pathType: Prefix
backend:
service:
name: rewrite-svc
port:
number: 9080
- path: /app-b(/|$)(.*)
pathType: Prefix
backend:
service:
name: rewrite-svc
port:
number: 9080
Escenario 4: Reescritura de un nombre de dominio
La anotación rewrite-target modifica únicamente la ruta. Para reescribir otras partes de la URL, como el nombre de dominio o los parámetros de consulta, utilice reglas de reenvío personalizadas
.
Verificación local de las reglas de reescritura
Utilice sed para probar las coincidencias de expresiones regulares de ruta y previsualizar los resultados reescritos antes del despliegue.
El siguiente ejemplo prueba la expresión regular de ruta /items/(.*)/(.*)/(.*) y la regla de reescritura /${2}?code=${3} del Escenario 2.
-
Guarde las rutas de prueba en
path2.txt:/items/electronics/computers/554 /items/produce/fruits/12 /items/headphones/5 /drinks/41 -
Simule la reescritura con
sed. Escape/como\/en la expresión regular de la ruta y use\2en lugar de${2}para los grupos de captura:sed -E 's#\/items\/(.*)\/(.*)\/(.*)#Matched: [&] ---> Rewritten: [/\2?code=\3]#' path2.txtSalida esperada: las dos primeras rutas coinciden con la regla de reescritura; las dos últimas no:
Matched: [/items/electronics/computers/554] ---> Rewritten: [/computers?code=554] Matched: [/items/produce/fruits/12] ---> Rewritten: [/fruits?code=12] /items/headphones/5 /drinks/41
Configuración de puertos de listener personalizados
Utilice la anotación alb.ingress.kubernetes.io/listen-ports para exponer un Service en varios puertos, por ejemplo HTTP 80 y HTTPS 443.
ALB no crea listeners desde un Ingress. Primero cree los puertos y protocolos de listener requeridos en AlbConfig y luego asócielos con el Ingress.
|
Anotación |
Descripción |
|
|
Configura el Service para escuchar tanto en el puerto 80 como en el puerto 443 |
Configuración de la prioridad de las reglas de reenvío
De forma predeterminada, ALB ordena las reglas de reenvío según el siguiente criterio:
Entre distintos Ingress: se ordenan lexicográficamente por
namespace/name. Los valores menores tienen mayor prioridad. Primero se compara el namespace y luego el nombre.-
Dentro del mismo Ingress: se ordenan según su posición en el campo
rules. Las reglas que aparecen primero tienen mayor prioridad.rules: - host: www.example.com # Higher priority http: ... - host: www.test.com # Lower priority http: ...
Para anular el orden predeterminado sin cambiar el nombre del Ingress, utilice la anotación alb.ingress.kubernetes.io/order.
Las prioridades dentro del mismo listener deben ser únicas.
|
Anotación |
Rango |
Valor predeterminado |
Descripción |
|
|
[1, 1000] |
10 |
Prioridad de la regla de reenvío. Los valores más bajos indican mayor prioridad |
Implementación de versiones canary mediante anotaciones
ALB admite versiones canary basadas en encabezados de solicitud, cookies y pesos de tráfico. Cree un Ingress canary independiente junto con el Ingress de producción.
Canary routing priority: Header > Cookie > Weight (de mayor a menor prioridad).
No elimine el Ingress de producción durante la versión canary. Una vez validada la versión canary, actualice el Service de backend en el Ingress de producción para que apunte a la nueva versión y después elimine el Ingress canary.
Consulte Implementación de versiones graduales mediante ALB Ingress.
Enrutamiento por encabezado
Utilice canary-by-header y canary-by-header-value en conjunto para dirigir al Service canary las solicitudes que coincidan con un valor de encabezado específico. Las solicitudes que no coincidan pasarán a la siguiente regla canary (cookie o peso).
Con esta configuración, las solicitudes con location: hz se dirigen al Service canary. Todas las demás solicitudes pasan a la siguiente regla canary.
|
Anotación |
Descripción |
|
|
Nombre del encabezado de solicitud que se debe evaluar |
|
|
Valor exacto del encabezado que debe coincidir. Ambas anotaciones deben configurarse en conjunto |
Enrutamiento por cookie
Utilice canary-by-cookie para enrutar solicitudes según el nombre de una cookie. Establezca el valor de la cookie en always para dirigir siempre al Service canary, o en never para excluirlo siempre.
Con esta configuración, las solicitudes con Cookie: demo=always se dirigen al Service canary. Las solicitudes con Cookie: demo=never omiten por completo el Service canary.
|
Anotación |
Valores |
Descripción |
|
|
|
Todas las solicitudes se dirigen al Service canary |
|
|
Ninguna solicitud se dirige al Service canary |
El enrutamiento canary basado en cookies solo admite always y never. No se admiten valores de cookie personalizados.
Enrutamiento por peso
Utilice canary-weight para enviar un porcentaje del tráfico al Service canary. El siguiente ejemplo dirige el 50 % del tráfico al entorno canary:
|
Anotación |
Rango |
Descripción |
|
|
0–100 |
Porcentaje de solicitudes dirigidas al Service canary |
Implementación de persistencia de sesión mediante anotaciones
ALB Ingress admite persistencia de sesión basada en cookies. Agregue las siguientes anotaciones para habilitar y configurar esta función.
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: cafe-ingress-v3
annotations:
alb.ingress.kubernetes.io/sticky-session: "true"
alb.ingress.kubernetes.io/sticky-session-type: "Insert" # Use "Server" for custom cookies
alb.ingress.kubernetes.io/cookie-timeout: "1800"
alb.ingress.kubernetes.io/cookie: "test"
spec:
...
|
Anotación |
Descripción |
Valor predeterminado |
|
|
Habilita la persistencia de sesión: |
|
|
|
Modo de gestión de cookies. |
|
|
|
Tiempo de expiración de la cookie en segundos. Rango: [1, 86400]. Aplica cuando |
|
|
|
Nombre de cookie personalizado. Es obligatorio y no puede estar vacío cuando |
|
Especificación de un algoritmo de balanceo de carga
Utilice la anotación alb.ingress.kubernetes.io/backend-scheduler para establecer el algoritmo de balanceo de carga de un grupo de servidores de backend.
|
Valor |
Algoritmo |
Descripción |
|
|
Round-robin ponderado |
Los servidores de backend con pesos mayores reciben más solicitudes. Algoritmo predeterminado |
|
|
Menor número de conexiones ponderado |
Dirige la solicitud al servidor con menos conexiones activas, ponderado según el peso del servidor |
|
|
Hash consistente por IP de origen |
Dirige las solicitudes de la misma IP de cliente al mismo servidor de backend |
|
|
Hash consistente por parámetro de URL |
Enruta según el hash de un parámetro de URL. Defina el nombre del parámetro con |
Configuración del uso compartido de recursos de origen cruzado
Agregue anotaciones CORS para permitir que los navegadores realicen solicitudes de origen cruzado al Service.
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: alb-ingress
annotations:
alb.ingress.kubernetes.io/enable-cors: "true"
alb.ingress.kubernetes.io/cors-expose-headers: ""
alb.ingress.kubernetes.io/cors-allow-methods: "GET,POST"
alb.ingress.kubernetes.io/cors-allow-credentials: "true"
alb.ingress.kubernetes.io/cors-max-age: "600"
spec:
ingressClassName: alb
rules:
- host: demo.alb.ingress.top
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: cloud-nodeport
port:
number: 80
|
Anotación |
Descripción |
Valor predeterminado |
|
|
Orígenes permitidos. Deben comenzar con |
|
|
|
Métodos de origen cruzado permitidos. No distingue entre mayúsculas y minúsculas. Separe varios métodos con comas. Ejemplo: |
|
|
|
Encabezados de solicitud permitidos. Los encabezados pueden contener letras, dígitos, guiones bajos ( |
|
|
|
Encabezados expuestos al navegador. Pueden contener letras, dígitos, guiones bajos ( |
Vacío |
|
|
Indica si se permiten credenciales en solicitudes de origen cruzado. Ejemplo: |
|
|
|
Duración máxima de caché en segundos para respuestas preflight OPTIONS. Rango: [−1, 172800] |
|
Habilitación de conexiones persistentes al backend
Las conexiones persistentes al backend reutilizan las conexiones TCP hacia los servidores de backend, lo que reduce la sobrecarga de abrir y cerrar conexiones por cada solicitud.
Agregue la anotación alb.ingress.kubernetes.io/backend-keepalive: "true" para habilitar esta función:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: alb-ingress
annotations:
alb.ingress.kubernetes.io/backend-keepalive: "true"
spec:
ingressClassName: alb
rules:
- host: demo.alb.ingress.top
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: cloud-nodeport
port:
number: 80
Configuración de límites de tasa de QPS
Agregue la anotación alb.ingress.kubernetes.io/traffic-limit-qps para establecer la limitación de QPS a nivel de regla de reenvío:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: cafe-ingress
annotations:
alb.ingress.kubernetes.io/traffic-limit-qps: "50"
spec:
ingressClassName: alb
rules:
- host: demo.alb.ingress.top
http:
paths:
- path: /tea
pathType: ImplementationSpecific
backend:
service:
name: tea-svc
port:
number: 80
- path: /coffee
pathType: ImplementationSpecific
backend:
service:
name: coffee-svc
port:
number: 80
|
Anotación |
Rango |
Descripción |
|
|
[1, 100,000] |
QPS máximo para la regla de reenvío |
Configuración del inicio lento para nuevos pods
El inicio lento incrementa gradualmente el tráfico hacia los nuevos pods durante un período configurado, lo que evita picos transitorios de CPU o memoria provocados por la llegada repentina de todo el tráfico a un pod frío.
|
Anotación |
Descripción |
Valor predeterminado |
|
|
Habilita el inicio lento: |
|
|
|
Duración del incremento progresivo en segundos. Duraciones más largas ralentizan el aumento del tráfico. Rango: [30, 900] |
|
Configuración del drenado de conexiones
Cuando un pod entra en estado Terminating, ALB lo elimina del grupo de servidores de backend. Sin el drenado de conexiones, las solicitudes en curso sobre conexiones existentes podrían fallar.
El drenado de conexiones mantiene abiertas las conexiones activas durante un período configurado, lo que permite completar las solicitudes en curso antes de que el pod quede fuera de línea.
Antes de que finalice el tiempo de espera del drenado, ALB no garantiza que el pod permanezca en buen estado. Configure spec.terminationGracePeriodSeconds en el pod o utilice un hook preStop para controlar la disponibilidad del pod durante el estado Terminating.
Consulte Desconexión fluida del servicio mediante el drenado de conexiones de ALB.
|
Anotación |
Descripción |
Valor predeterminado |
|
|
Habilita el drenado de conexiones: |
|
|
|
Tiempo máximo en segundos que ALB espera antes de cerrar las conexiones después de que un pod se elimina o falla una comprobación de salud. Rango: [0, 900] |
|