istio-traffic-management

Par wshobson · agents

Configurez la gestion du trafic Istio, notamment le routage, l'équilibrage de charge, les circuit breakers et les déploiements canary. À utiliser lors de la mise en œuvre de politiques de trafic pour service mesh, de livraison progressive ou de patterns de résilience.

npx skills add https://github.com/wshobson/agents --skill istio-traffic-management

Gestion du trafic Istio

Guide complet de gestion du trafic Istio pour les déploiements de maillage de services en production.

Quand utiliser cette compétence

  • Configurer le routage de service à service
  • Implémenter des déploiements canary ou blue-green
  • Configurer les disjoncteurs et les retries
  • Configuration de l'équilibrage de charge
  • Mirroring du trafic pour les tests
  • Injection de défauts pour l'ingénierie du chaos

Concepts fondamentaux

1. Ressources de gestion du trafic

Ressource Objectif Portée
VirtualService Router le trafic vers les destinations Basée sur l'hôte
DestinationRule Définir les politiques après le routage Basée sur le service
Gateway Configurer l'ingress/egress Bord du cluster
ServiceEntry Ajouter des services externes Maillage entier

2. Flux de trafic

Client → Gateway → VirtualService → DestinationRule → Service
                   (routage)        (politiques)      (pods)

Modèles

Modèle 1 : Routage de base

apiVersion: networking.istio.io/v1beta1
kind: VirtualService
metadata:
  name: reviews-route
  namespace: bookinfo
spec:
  hosts:
    - reviews
  http:
    - match:
        - headers:
            end-user:
              exact: jason
      route:
        - destination:
            host: reviews
            subset: v2
    - route:
        - destination:
            host: reviews
            subset: v1
---
apiVersion: networking.istio.io/v1beta1
kind: DestinationRule
metadata:
  name: reviews-destination
  namespace: bookinfo
spec:
  host: reviews
  subsets:
    - name: v1
      labels:
        version: v1
    - name: v2
      labels:
        version: v2
    - name: v3
      labels:
        version: v3

Modèle 2 : Déploiement canary

apiVersion: networking.istio.io/v1beta1
kind: VirtualService
metadata:
  name: my-service-canary
spec:
  hosts:
    - my-service
  http:
    - route:
        - destination:
            host: my-service
            subset: stable
          weight: 90
        - destination:
            host: my-service
            subset: canary
          weight: 10
---
apiVersion: networking.istio.io/v1beta1
kind: DestinationRule
metadata:
  name: my-service-dr
spec:
  host: my-service
  trafficPolicy:
    connectionPool:
      tcp:
        maxConnections: 100
      http:
        h2UpgradePolicy: UPGRADE
        http1MaxPendingRequests: 100
        http2MaxRequests: 1000
  subsets:
    - name: stable
      labels:
        version: stable
    - name: canary
      labels:
        version: canary

Modèle 3 : Disjoncteur

apiVersion: networking.istio.io/v1beta1
kind: DestinationRule
metadata:
  name: circuit-breaker
spec:
  host: my-service
  trafficPolicy:
    connectionPool:
      tcp:
        maxConnections: 100
      http:
        http1MaxPendingRequests: 100
        http2MaxRequests: 1000
        maxRequestsPerConnection: 10
        maxRetries: 3
    outlierDetection:
      consecutive5xxErrors: 5
      interval: 30s
      baseEjectionTime: 30s
      maxEjectionPercent: 50
      minHealthPercent: 30

Modèle 4 : Retry et timeout

apiVersion: networking.istio.io/v1beta1
kind: VirtualService
metadata:
  name: ratings-retry
spec:
  hosts:
    - ratings
  http:
    - route:
        - destination:
            host: ratings
      timeout: 10s
      retries:
        attempts: 3
        perTryTimeout: 3s
        retryOn: connect-failure,refused-stream,unavailable,cancelled,retriable-4xx,503
        retryRemoteLocalities: true

Modèle 5 : Mirroring du trafic

apiVersion: networking.istio.io/v1beta1
kind: VirtualService
metadata:
  name: mirror-traffic
spec:
  hosts:
    - my-service
  http:
    - route:
        - destination:
            host: my-service
            subset: v1
      mirror:
        host: my-service
        subset: v2
      mirrorPercentage:
        value: 100.0

Modèle 6 : Injection de défauts

apiVersion: networking.istio.io/v1beta1
kind: VirtualService
metadata:
  name: fault-injection
spec:
  hosts:
    - ratings
  http:
    - fault:
        delay:
          percentage:
            value: 10
          fixedDelay: 5s
        abort:
          percentage:
            value: 5
          httpStatus: 503
      route:
        - destination:
            host: ratings

Modèle 7 : Passerelle d'ingress

apiVersion: networking.istio.io/v1beta1
kind: Gateway
metadata:
  name: my-gateway
spec:
  selector:
    istio: ingressgateway
  servers:
    - port:
        number: 443
        name: https
        protocol: HTTPS
      tls:
        mode: SIMPLE
        credentialName: my-tls-secret
      hosts:
        - "*.example.com"
---
apiVersion: networking.istio.io/v1beta1
kind: VirtualService
metadata:
  name: my-vs
spec:
  hosts:
    - "api.example.com"
  gateways:
    - my-gateway
  http:
    - match:
        - uri:
            prefix: /api/v1
      route:
        - destination:
            host: api-service
            port:
              number: 8080

Stratégies d'équilibrage de charge

apiVersion: networking.istio.io/v1beta1
kind: DestinationRule
metadata:
  name: load-balancing
spec:
  host: my-service
  trafficPolicy:
    loadBalancer:
      simple: ROUND_ROBIN # ou LEAST_CONN, RANDOM, PASSTHROUGH
---
# Hachage cohérent pour les sessions persistantes
apiVersion: networking.istio.io/v1beta1
kind: DestinationRule
metadata:
  name: sticky-sessions
spec:
  host: my-service
  trafficPolicy:
    loadBalancer:
      consistentHash:
        httpHeaderName: x-user-id
        # ou : httpCookie, useSourceIp, httpQueryParameterName

Bonnes pratiques

À faire

  • Commencer simple - Ajouter la complexité progressivement
  • Utiliser les subsets - Versionnez vos services clairement
  • Définir des timeouts - Toujours configurer des timeouts raisonnables
  • Activer les retries - Mais avec backoff et limites
  • Monitorer - Utiliser Kiali et Jaeger pour la visibilité

À ne pas faire

  • Ne pas trop retry - Peut causer des défaillances en cascade
  • Ne pas ignorer la détection d'outliers - Activer les disjoncteurs
  • Ne pas mirorer vers la production - Mirorer vers des environnements de test
  • Ne pas sauter le canary - Tester avec un petit pourcentage de trafic d'abord

Commandes de débogage

# Vérifier la configuration VirtualService
istioctl analyze

# Afficher les routes effectives
istioctl proxy-config routes deploy/my-app -o json

# Vérifier la découverte des endpoints
istioctl proxy-config endpoints deploy/my-app

# Déboguer le trafic
istioctl proxy-config log deploy/my-app --level debug

Skills similaires