Una puerta de enlace de Alibaba Cloud Service Mesh (ASM) es un componente clave de Istio que gestiona el tráfico de entrada y salida en el borde de su service mesh. En producción, las puertas de enlace sin optimizar introducen latencia en cada salto de red y se convierten en puntos únicos de falla durante los eventos de escalado o las interrupciones regionales. Este tema explica cómo optimizar cada segmento de la ruta del tráfico, desde la resolución del Domain Name System (DNS) hasta el load balancer y los pods de la puerta de enlace, para reducir la latencia y eliminar el tiempo de inactividad.
Ruta del tráfico y objetivos de optimización
Cuando crea una puerta de enlace de ASM, este servicio despliega un Deployment istio-ingressgateway en el namespace istio-system de su clúster de Container Service for Kubernetes (ACK). Una instancia de Classic Load Balancer (CLB) se asocia automáticamente con este Deployment, y los pods de la puerta de enlace funcionan como servidores de backend de dicha instancia.

Una solicitud de servicio atraviesa cada uno de estos componentes:

Cada segmento de esta ruta afecta la latencia y la disponibilidad. Esto incluye la resolución DNS, el balanceo de carga, el reenvío de red y la terminación de Transport Layer Security (TLS). Las a continuación secciones explican cómo optimizar cada uno de ellos.
Reduzca la latencia
Despliegue en varias regiones para un acceso cercano
ASM gestiona clústeres de ACK en varias regiones. Esto permite que los clientes se conecten al clúster más cercano en lugar de enrutar las solicitudes a través de largas distancias. La resolución DNS inteligente asigna cada nombre de dominio a la dirección IP de la instancia de CLB más cercana al cliente. De esta manera, se reduce el tiempo de ida y vuelta y se distribuye el tráfico geográficamente.
También se admite el balanceo de carga entre regiones. Cuando una región se sobrecarga, el tráfico se traslada automáticamente a las regiones con mejor estado. Para obtener más información, consulte Use ASM to implement cross-region disaster recovery and load balancing.
Seleccione el complemento CNI Terway para el reenvío directo a los pods
El complemento de Container Network Interface (CNI) de su clúster de ACK determina cómo la instancia de CLB reenvía el tráfico a los pods de la puerta de enlace:
|
Complemento CNI |
Ruta del tráfico |
Impacto en la latencia |
|
Terway (recomendado) |
CLB reenvía el tráfico directamente a los pods de la puerta de enlace |
Menor latencia, ya que omite el salto adicional por NodePort |
|
Flannel |
CLB reenvía al Service de NodePort y luego NodePort enruta hacia los pods de la puerta de enlace |
Mayor latencia, porque añade un salto de red adicional |
Use el complemento CNI Terway para las cargas de trabajo de producción. El reenvío directo a los pods elimina la sobrecarga del enrutamiento basado en NodePort. Para ver una comparación detallada, consulte Terway and Flannel.
Escale con varias instancias de CLB
Si una sola instancia de CLB no logra manejar el volumen de tráfico de su puerta de enlace, asocie varias instancias de CLB a la misma puerta de enlace. Cada instancia distribuye el tráfico de forma independiente hacia los pods de la puerta de enlace, lo que aumenta el rendimiento total.
Consulte Access an ASM gateway by using multiple CLB instances.
Habilite la aceleración TLS
Las puertas de enlace de ASM en la edición comercial admiten la aceleración TLS basada en la tecnología Intel Multi-Buffer. En las pruebas de rendimiento, habilitar esta función mejoró las consultas por segundo (QPS) en un 80 %.
Nota: La mejora del 80 % en QPS se midió en pruebas internas de Alibaba Cloud. Las ganancias reales dependen de las características de su carga de trabajo, los tamaños de clave del certificado y la configuración de hardware.
Consulte Enable Multi-Buffer for TLS acceleration.
Elimine el tiempo de inactividad
Configure la recuperación ante desastres geográfica
Despliegue clústeres de ACK en varias regiones con redundancia geográfica activa. Si una región completa deja de funcionar, el tráfico conmuta por error automáticamente a los clústeres de otras regiones. Al combinar esto con la resolución DNS inteligente, se obtiene una recuperación ante desastres regional sin intervención manual.
Consulte Use ASM to implement cross-region disaster recovery and load balancing.
Agregue redundancia de CLB
Asocie varias instancias de CLB a una sola puerta de enlace de ASM. De este modo, si una instancia falla, las demás continúan atendiendo el tráfico. Así se elimina el load balancer como punto único de falla.
Consulte Access an ASM gateway by using multiple CLB instances.
Distribuya los pods de la puerta de enlace entre nodos y zonas
Distribuya los pods de la puerta de enlace entre distintos nodos y zonas de disponibilidad para protegerse contra interrupciones de nodo o de zona. Use reglas de antiafinidad de pods y restricciones de distribución de topología para controlar la ubicación.
A continuación se muestra un ejemplo de restricción de distribución de topología que distribuye los pods de la puerta de enlace de manera uniforme entre las zonas de disponibilidad:
apiVersion: apps/v1
kind: Deployment
metadata:
name: istio-ingressgateway
namespace: istio-system
spec:
template:
spec:
topologySpreadConstraints:
- maxSkew: 1
topologyKey: topology.kubernetes.io/zone
whenUnsatisfiable: DoNotSchedule
labelSelector:
matchLabels:
istio: ingressgateway
affinity:
podAntiAffinity:
preferredDuringSchedulingIgnoredDuringExecution:
- weight: 100
podAffinityTerm:
labelSelector:
matchLabels:
istio: ingressgateway
topologyKey: kubernetes.io/hostname
Para conocer el procedimiento de configuración completo, consulte Improve availability for the ingress gateway service of an ASM instance.
Habilite el apagado controlado para los servicios
Configure un hook previo a la detención en los pods del servicio para drenar las solicitudes en curso antes de que el pod finalice. Sin un apagado controlado, las solicitudes activas fallan o se pierden durante los eventos de escalado y las actualizaciones continuas.
Habilite el drenaje de conexiones en la instancia de CLB
Cuando la puerta de enlace de ASM escala horizontalmente, las conexiones existentes en la instancia de CLB deben conservarse durante un periodo configurable. Esto permite que las solicitudes en curso se completen. Habilite el drenaje de conexiones en la instancia de CLB para evitar la pérdida de tráfico durante las transiciones de los pods.
Lista de verificación para producción
Antes de pasar a producción, compruebe que completó las configuraciones a continuación. Además de los elementos de rendimiento y disponibilidad descritos anteriormente, configure HorizontalPodAutoscaler, PodDisruptionBudget y las solicitudes y límites de recursos en su Deployment de puerta de enlace. Esto le permitirá gestionar el escalado y las interrupciones de forma adecuada.
Rendimiento
|
Configuración |
Estado |
Notas |
|
Despliegue multirregión con DNS inteligente |
Obligatorio para usuarios distribuidos geográficamente |
Reduce la latencia entre el cliente y la puerta de enlace |
|
Complemento CNI Terway para reenvío directo a los pods |
Recomendado para todos los clústeres de producción |
Elimina el salto por NodePort |
|
Varias instancias de CLB |
Obligatorio cuando el tráfico supera la capacidad de una sola instancia |
Aumenta el rendimiento total |
|
Aceleración TLS (Intel Multi-Buffer) |
Recomendado en la edición comercial |
Mejora de hasta un 80 % en QPS |
Disponibilidad
|
Configuración |
Estado |
Notas |
|
Redundancia geográfica activa entre regiones |
Obligatorio para la recuperación ante desastres regional |
Conmutación por error automática con DNS inteligente |
|
Varias instancias de CLB |
Obligatorio para eliminar el punto único de falla del load balancer |
Proporciona redundancia de CLB |
|
Antiafinidad de pods y restricciones de distribución de topología |
Obligatorio |
Distribuye los pods entre nodos y zonas |
|
Hooks previos a la detención en los pods del servicio |
Obligatorio |
Drena las solicitudes en curso antes de finalizar |
|
Drenaje de conexiones en las instancias de CLB |
Obligatorio |
Evita la pérdida de tráfico durante el escalado |
|
|
Recomendado |
Escala automáticamente los pods de la puerta de enlace según la carga |
|
|
Recomendado |
Evita que las interrupciones voluntarias eliminen demasiados pods |
|
Solicitudes y límites de recursos |
Recomendado |
Evita la contención de recursos y las terminaciones OOM |