Composant optionnel : présent uniquement si le cluster est hébergé sur un cloud provider (AWS, GCP, Azure…). Dans un déploiement Nginx, il crée automatiquement le Load Balancer externe pour exposer le service.
Rôle du Cloud Controller Manager
Le Cloud Controller Manager (CCM) joue le rôle de pont entre les APIs des plateformes cloud (ex : AWS, Azure, GCP) et un cluster Kubernetes déployé dans le cloud. Il permet aux composants Kubernetes de fonctionner indépendamment tout en offrant aux fournisseurs cloud un point d’intégration via des plugins. Grâce à cette architecture, les clusters Kubernetes peuvent automatiquement gérer des ressources cloud externes : instances, load balancers, volumes de stockage, etc.

Fonctionnement général
- Sépare la logique spécifique au cloud de la logique native Kubernetes.
- Intègre Kubernetes avec les principaux fournisseurs cloud à travers des plugins modulaires.
- Permet de provisionner et gérer automatiquement des ressources cloud en fonction des besoins du cluster.
Principaux contrôleurs du Cloud Controller Manager
| Contrôleur | Rôle principal |
|---|---|
| Node Controller | Synchronise les informations des nœuds avec l’API du fournisseur cloud (labels, annotations, santé, etc). |
| Route Controller | Configure les routes réseau entre les nœuds pour assurer la communication inter-pod multi-nœud. |
| Service Controller | Déploie des Load Balancers cloud pour les services Kubernetes, attribue des IP, gère le routage. |
Exemples d’utilisation typiques
- Déploiement d’un service LoadBalancer : création automatique d’un Load Balancer cloud relié au service Kubernetes correspondant.
- Provisionnement de volumes persistants : création et attachement automatique de volumes cloud (EBS, Disk, etc.) pour les pods.
- Synchronisation dynamique : gestion automatisée de l’ajout, de la suppression ou du marquage de nœuds cloud selon l’état réel du cluster.
Récapitulatif synthétique
| Élément clé | Description |
|---|---|
| Intégration cloud-native | Gère la communication entre Kubernetes et les APIs des plateformes cloud |
| Extensibilité | Supporte les plugins pour différents providers (AWS, GCP, Azure, etc.) |
| Contrôleurs intégrés | Node Controller, Route Controller, Service Controller |
| Exemples | Provisionnement d’instances/nœuds, de LoadBalancers, de volumes de stockage (PV) |
| Gestion du cycle de vie | Supervise toutes les ressources cloud nécessaires au fonctionnement du cluster Kubernetes |
Résumé du fonctionnement général
- CCM détecte les besoins du cluster concernant des ressources cloud (nœuds, routes, services…).
- Communique avec les APIs du cloud provider pour provisionner ou modifier ces ressources.
- Met à jour Kubernetes pour refléter la réalité du cloud.
- Garde une synchronisation continue entre l’état désiré et l’état réel des ressources cloud du cluster.
Exemple d’utilisation d’AWS EKS avec le Cloud Controller Manager
Imaginons que vous déployez une application web (par exemple, Nginx) sur un cluster Kubernetes EKS, et souhaitez la rendre accessible via un Load Balancer AWS. Voici comment les composants de Kubernetes et le Cloud Controller Manager (CCM) d’AWS interagissent :
- Création du cluster EKS
- AWS gère le Control Plane Kubernetes (API server, etcd, controlleurs…).
- Le CCM d’AWS s’intègre au plan de contrôle pour automatiser la gestion des ressources cloud : nodes EC2, volumes EBS, Load Balancers, etc. Le CCM fonctionne majoritairement “en arrière-plan”, sans intervention manuelle nécessaire sur EKS.linkedin.com+1
- Déploiement de l’application (exemple Nginx)
-
Vous appliquez un manifeste Kubernetes type Deployment :
textapiVersion: apps/v1 kind: Deployment metadata: name: nginx-deployment labels: app: nginx spec: replicas: 3 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx:latest ports: - containerPort: 80 -
Puis, vous exposez ce déploiement à l’aide d’un Service de type LoadBalancer :
textapiVersion: v1 kind: Service metadata: name: nginx-service spec: type: LoadBalancer ports: - port: 80 targetPort: 80 selector: app: nginx -
Après application (
kubectl apply ...), le CCM : -
Surveille la création du Service de type LoadBalancer.
-
Crée automatiquement un Load Balancer AWS (ex. : ELB, NLB, ALB) et attribue une IP publique à votre service.aws.amazon.com+1
Ce que fait le Cloud Controller Manager EKS dans ce scénario
| Action | Ressource AWS impliquée | Contrôleur responsable (dans CCM) |
|---|---|---|
| Création d’un node worker | Instance EC2 | Node Controller |
| Synchronisation node/cluster | ENI, VPC, Route 53 | Node Controller |
| Provisionnement d’un load balancer | ELB, NLB, ALB | Service Controller |
| Attribution route réseau | Routes dans le VPC AWS | Route Controller |
| Provisionnement volume persistant | EBS | Persistent Volume Controller (CSI) |
Points importants à retenir
- Quand un pod est créé, il est planifié sur un worker. Si des volumes sont requis, c’est le CCM qui provisionne et attache dynamiquement un volume EBS.
- Si un Service de type LoadBalancer est déployé, le CCM crée et configure un Load Balancer AWS qui route le trafic externe vers les pods Kubernetes.
- Lors de l’ajout ou la suppression d’instances, le CCM synchronise automatiquement l’état des nodes Kubernetes avec ceux du cloud AWS (labels, santé, routes…).
- EKS automatise ces actions et fournit transparence et robustesse, tout en permettant d’utiliser les APIs AWS depuis les pods via IAM et services accounts pour la sécurité fine.
Exemple visuel du cycle dans EKS
| Étape | Action |
|---|---|
| Déploiement des manifestes | kubectl apply |
| CCM détecte le Service LB | Crée un Load Balancer AWS |
| CCM synchronise les nodes | Met à jour leur état/info |
| CCM provisionne le stockage | Crée un volume EBS partagé |
Vous pouvez ainsi, sans action manuelle sur AWS, bénéficier de la gestion automatisée des ressources cloud via le Cloud Controller Manager d’EKS.aws.amazon.com+2
Pour tester ce scénario :
- Créez un cluster EKS (console AWS/EKSCTL/Terraform).
- Déployez un simple Deployment + Service type LoadBalancer.
- Observez la création du Load Balancer dans la console AWS et l’affichage d’une adresse IP/hostname externe utilisable.