Distribución de tráfico

La anotación networking.istio.io/traffic-distribution controla cómo ztunnel distribuye el tráfico entre los endpoints disponibles. Es útil para mantener el tráfico local y reducir la latencia y los costos entre zonas.

Valores soportados

ValorComportamiento
PreferSameZonePrioriza los endpoints por proximidad: red, región, zona y subzona. El tráfico va primero a los endpoints más cercanos y disponibles.
PreferCloseAlias obsoleto de PreferSameZone. Consulta la propuesta de mejora de Kubernetes 3015.
PreferSameNodePrefiere endpoints en el mismo nodo que el cliente.
(sin definir)Sin preferencia de localidad. El tráfico se distribuye entre todos los endpoints disponibles.

Aplicar la anotación

La anotación puede aplicarse a:

  • Service: Afecta el tráfico hacia ese servicio específico
  • Namespace: Establece el valor por defecto para todos los servicios del namespace
  • ServiceEntry: Afecta el tráfico hacia servicios externos

Precedencia

Cuando se configuran múltiples niveles, el más específico prevalece:

  1. Campo spec.trafficDistribution (solo en Service)
  2. Anotación en Service/ServiceEntry
  3. Anotación en Namespace
  4. Comportamiento por defecto (sin preferencia de localidad)

Ejemplos

Configuración por servicio

Aplica a un servicio único:

apiVersion: v1
kind: Service
metadata:
  name: my-service
  annotations:
    networking.istio.io/traffic-distribution: PreferSameZone
spec:
  selector:
    app: my-app
  ports:
  - port: 80

Configuración a nivel de namespace

Aplica a todos los servicios de un namespace:

apiVersion: v1
kind: Namespace
metadata:
  name: my-namespace
  annotations:
    networking.istio.io/traffic-distribution: PreferSameZone

Los servicios del namespace heredan esta configuración a menos que tengan su propia anotación.

Anular el valor por defecto del namespace

Un servicio puede anular la configuración del namespace con su propia anotación:

apiVersion: v1
kind: Namespace
metadata:
  name: my-namespace
  annotations:
    networking.istio.io/traffic-distribution: PreferSameZone
---
apiVersion: v1
kind: Service
metadata:
  name: different-service
  namespace: my-namespace
  annotations:
    networking.istio.io/traffic-distribution: PreferSameNode
spec:
  selector:
    app: different-app
  ports:
  - port: 80

Los servicios sin anotación heredan la configuración del namespace.

Comportamiento

PreferSameZone

Con PreferSameZone, ztunnel categoriza los endpoints por localidad y enruta hacia los más cercanos disponibles:

  1. Misma red, región, zona y subzona
  2. Misma red, región y zona
  3. Misma red y región
  4. Misma red
  5. Cualquier endpoint disponible

Si todos los endpoints de una localidad más cercana dejan de estar disponibles, el tráfico hace failover automáticamente al siguiente nivel.

Por ejemplo, un servicio con endpoints en las zonas us-west, us-west y us-east:

  • Un cliente en us-west envía todo el tráfico a los dos endpoints de us-west
  • Si un endpoint de us-west falla, el tráfico va al endpoint de us-west restante
  • Si ambos endpoints de us-west fallan, el tráfico hace failover a us-east

PreferSameNode

Con PreferSameNode, ztunnel prefiere los endpoints que se ejecutan en el mismo nodo de Kubernetes que el cliente. Esto minimiza los saltos de red y la latencia para la comunicación dentro del mismo nodo.

Relación con trafficDistribution de Kubernetes

Kubernetes 1.31 introdujo el campo spec.trafficDistribution en los Service. Esta anotación de Istio proporciona la misma funcionalidad con beneficios adicionales:

spec.trafficDistributionAnotación
Versión de Kubernetes1.31+Cualquiera
ServiceSíSí
ServiceEntryNoSí
NamespaceNoSí

Cuando se establecen tanto el campo spec como la anotación en un Service, el campo spec tiene precedencia.

Los waypoints configuran esta anotación automáticamente.

Ver también

¿Fue útil esta información?
¿Tienes alguna sugerencia para mejorar?

¡Gracias por tus comentarios!