Après des années à gérer des clusters Kubernetes en entreprise, j'ai identifié un problème récurrent : la gestion des registries Docker. Entre les limitations de bande passante, les quotas des registries publics, et les politiques de sécurité d'entreprise, c'est rapidement devenu un cauchemar. C'est pour résoudre ce problème que j'ai développé Mutating Registry Webhook.
Dans un environnement Kubernetes moderne, chaque déploiement peut référencer des dizaines d'images Docker provenant de sources variées : Docker Hub, Google Container Registry, Quay.io, GitHub Container Registry... Cette diversité pose plusieurs problèmes :
Les approches classiques sont laborieuses et fragiles :
J'ai créé Mutating Registry Webhook pour automatiser complètement ce processus. C'est un webhook d'admission Kubernetes qui intercepte la création et la modification des Pods pour réécrire automatiquement les URLs des images selon vos règles.
Le système repose sur quatre composants clés :
Imaginons que vous voulez rediriger toutes les images Docker Hub vers votre registry interne. Vous créez simplement cette règle :
apiVersion: dev.flemzord.fr/v1alpha1
kind: RegistryRewriteRule
metadata:
name: docker-hub-to-ecr
spec:
rules:
# Redirect Docker Hub images to ECR pull-through cache
- match: '^docker\.io/(.*)'
replace: 'internal-registry.company.com/dockerhub/$1'
# Handle images without explicit registry (defaults to docker.io)
- match: '^([^/]+/[^/]+)$'
replace: 'internal-registry.company.com/dockerhub/$1'
Désormais, toute image comme docker.io/nginx:latest sera automatiquement réécrite en internal-registry.company.com/docker-hub/nginx:latest. Vos développeurs continuent à utiliser les URLs originales, le webhook s'occupe du reste.
Le système de règles est conçu pour être extrêmement flexible :
Exemple avancé avec plusieurs registries :
apiVersion: dev.flemzord.fr/v1alpha1
kind: RegistryRewriteRule
metadata:
name: multi-registry-routing
spec:
rules:
- match: '^(gcr\\.io|quay\\.io|ghcr\\.io)/(.*)$'
replace: 'cache.internal.com/$1/$2'
Un des aspects critiques était la performance. Le webhook doit traiter chaque Pod créé dans le cluster sans introduire de latence notable :
La sécurité est assurée par une intégration native avec cert-manager. Les certificats TLS sont automatiquement gérés et renouvelés, garantissant des communications sécurisées entre Kubernetes et le webhook.
L'installation est simple et rapide :
# Installer cert-manager (si pas déjà présent)
kubectl apply -f https://github.com/cert-manager/cert-manager/releases/download/v1.13.0/cert-manager.yaml
# Installer Mutating Registry Webhook
kubectl apply -f https://raw.githubusercontent.com/flemzord/mutating-registry-webhook/main/dist/install.yaml
Réduisez drastiquement votre bande passante en redirigeant toutes les images externes vers votre cache interne :
apiVersion: dev.flemzord.fr/v1alpha1
kind: RegistryRewriteRule
metadata:
name: enterprise-cache
spec:
rules:
- match: '^(?!internal-registry\\.)(.*)$'
replace: 'internal-registry.company.com/cache/$1'
Migrez progressivement d'un registry à un autre sans toucher au code :
apiVersion: dev.flemzord.fr/v1alpha1
kind: RegistryRewriteRule
metadata:
name: gradual-migration
spec:
rules:
- match: '^old-registry\\.company\\.com/(.*)$'
replace: 'new-registry.company.com/$1'
conditions:
namespaces: ['canary', 'staging']
Créez des environnements complètement isolés avec leurs propres registries :
apiVersion: dev.flemzord.fr/v1alpha1
kind: RegistryRewriteRule
metadata:
name: isolated-dev
spec:
rules:
- match: '^(.*)$'
replace: 'dev-registry.local/$1'
Le webhook expose des métriques Prometheus pour un monitoring complet :
Ces métriques permettent de suivre l'utilisation et d'identifier rapidement tout problème.
Mutating Registry Webhook transforme un problème complexe en solution simple et élégante. Plus besoin de modifier manuellement les références d'images dans les charts Helm, manifestes Kustomize ou Operators, de maintenir des scripts fragiles, ou de former les développeurs à utiliser des URLs spécifiques.
Le projet est open source et activement maintenu. J'accueille avec plaisir les contributions, suggestions et retours d'expérience. Si vous gérez des clusters Kubernetes en entreprise et que vous en avez assez de jongler avec les registries, essayez Mutating Registry Webhook.
Retrouvez le projet sur GitHub : github.com/flemzord/mutating-registry-webhook