Traffic Mirroring L7 avec Gateway API et Cilium : observer le traffic de prod sans risque
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
- Tester
- curl https://app-techledger.in.techledger.io/test
- Le backend app-prod seule repond aux clients

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
Aucun commentaire pour le moment.