Aller au contenu principal
Sommaire de la formation

Traffic Mirroring L7 avec Gateway API et Cilium : observer le traffic de prod sans risque

coolibra124 vues

Traffic Mirroring L7

 

La ressource HTTPRoute permet de dupliquer les requêtes vers plusieurs backends. Ceci est utile pour tester de nouveaux services avec du trafic de production.

Les requêtes dupliquées ne seront envoyées qu'à un seul endpoint du backendRef, et les réponses de ce backend DOIVENT être ignorées par la Gateway.

La duplication des requêtes est particulièrement utile dans le cadre d'un déploiement blue-green. Elle permet d'évaluer l'impact sur les performances de l'application sans affecter les réponses aux clients.

Avec Cilium et Gateway API via un objet HTTPRoute, Kubernetes propose une approche élégante :

  • le trafic continue vers l’application prod

  • une copie de la requtte est envoyée vers une application shadow (preprod)

  • le client ne voit strictement aucun changement

  • inspection du trafic réel
  • headers, payloads, patterns
  • IDS / WAF passif

  • aucune latence ajoutée

  • aucun point de défaillance

  • tester une nouvelle version avant bascullement en prod

  • comparer comportement réel d'une nouvelle version de l'application

  • rollback instantané

 

Architecture de la démo

 

Deploiement de l'application et test de traffic

Créer le fichier app-mirroring.yaml avec les yaml suivants

  • Namespace
apiVersion: v1
kind: Namespace
metadata:
  name: app-techledger

 

  • Application de production (app-prod)

Cette application représente votre service réel.

---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: app-prod
  namespace: app-techledger
spec:
  replicas: 1
  selector:
    matchLabels:
      app: app-prod
  template:
    metadata:
      labels:
        app: app-prod
    spec:
      containers:
      - name: app
        image: hashicorp/http-echo
        args:
        - "-text=BACKEND PROD RECEIVED REQUEST"
        - "-listen=:8080"
---
apiVersion: v1
kind: Service
metadata:
  name: app-prod
  namespace: app-techledger
spec:
  selector:
    app: app-prod
  ports:
  - port: 80
    targetPort: 8080

 

  • Application preprod (app-preprod)

Une vaersion v2 de de la meme application. Elle ne sert jamais de réponse client. Elle observe et trace les logs.

---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: app-preprod
  namespace: app-techledger
spec:
  replicas: 1
  selector:
    matchLabels:
      app: app-preprod
  template:
    metadata:
      labels:
        app: app-preprod
    spec:
      containers:
      - name: app
        image: hashicorp/http-echo
        args:
        - "-text=MIRROR TRAFFIC RECEIVED"
        - "-listen=:8080"
---
apiVersion: v1
kind: Service
metadata:
  name: app-preprod
  namespace: app-techledger
spec:
  selector:
    app: app-preprod
  ports:
  - port: 80
    targetPort: 8080

 

  • HTTPRoute avec RequestMirror

Même requête, deux destinations, zéro impact utilisateur.

---
apiVersion: gateway.networking.k8s.io/v1
kind: HTTPRoute
metadata:
  annotations:
    external-dns.alpha.kubernetes.io/hostname: app-techledger.in.techledger.io
  name: mirror-route
  namespace: app-techledger
spec:
  hostnames:
  - "app-techledger.in.techledger.io"
  parentRefs:
  - group: gateway.networking.k8s.io
    kind: Gateway
    name: public-gateway
    namespace: cilium-system
  rules:
  - matches:
    - path:
        type: PathPrefix
        value: /
    backendRefs:
    - group: ""
      kind: Service
      name: app-prod
      port: 80
    filters:
    - type: RequestMirror
      requestMirror:
        backendRef:
          group: ""
          kind: Service
          name: app-preprod
          port: 80

 

  • Appliquer sur le cluster
kubectl apply -f app-mirroring.yaml

 

 

 

Conclusion

Le traffic mirroring avec Gateway API et Cilium apporte une capacité longtemps réservée aux meshes complexes, mais :

  • sans sidecar

  • sans lock‑in

  • avec des primitives Kubernetes standards

C’est un outil puissant pour sécuriser, observer et faire évoluer les app cloud natives.

 

Commentaires

Connectez-vous pour rejoindre la discussion.

Aucun commentaire pour le moment.