Le Cloud Controller Manager (CCM) vous permet d'associer une instance Server Load Balancer (SLB) existante à des services dans un ou plusieurs clusters ACK, ainsi qu'à des points de terminaison externes. En utilisant une seule instance SLB comme point d'entrée unifié, vous évitez de provisionner un équilibreur de charge par cluster. Cette approche est particulièrement utile pour la reprise après sinistre, la haute disponibilité ou l'isolation de sécurité entre les clusters.
Cette rubrique couvre deux scénarios :
Scénario 1 : Répartir le trafic entre un service interne au cluster et un point de terminaison externe (par exemple, une instance Elastic Compute Service (ECS)).
Scénario 2 : Répartir le trafic entre des services hébergés dans différents clusters ACK.
Prérequis
Avant de commencer, assurez-vous d'avoir :
Une instance Classic Load Balancer (CLB) ou Network Load Balancer (NLB) créée dans la même région que votre cluster ACK.
-
Le composant Cloud Controller Manager installé dans le cluster, avec la version requise (pour mettre à jour, consultez la section Gérer les composants) :
Instances CLB : v2.0.1 ou ultérieure
Instances NLB : v2.9.1 ou ultérieure
Un client kubectl connecté au cluster ACK (pour obtenir les instructions, consultez la page Obtenir le fichier kubeconfig d'un cluster et utiliser kubectl pour se connecter au cluster).
Scénario 1 : Répartir le trafic vers un service du cluster et un point de terminaison externe
Associez un service interne au cluster et un point de terminaison externe à la même instance SLB. L'instance SLB achemine le trafic vers les deux cibles. Lors de la mise à l'échelle des pods, ceux-ci sont automatiquement ajoutés ou supprimés du groupe de serveurs virtuels (vServer group), sans affecter le point de terminaison externe.
Étape 1 : Récupérer l'ID de l'instance SLB
Connectez-vous à la console CLB ou à la console NLB et notez l'ID de votre instance SLB existante.
Étape 2 : Créer un service en utilisant l'instance SLB existante
Utiliser la console ACK
Dans la console ACK, créez un service avec les paramètres suivants :
Définissez le paramètre Service Type sur SLB.
Sélectionnez l'option Use Existing Resource, puis choisissez l'instance SLB dans la liste déroulante.
Cochez l'option Overwrite Existing Listeners.
Utiliser kubectl
Ajoutez les annotations suivantes à la définition YAML de votre service :
apiVersion: v1
kind: Service
metadata:
annotations:
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-id: <LB_ID> # The ID of the existing SLB instance.
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-force-override-listeners: "true" # Set to true so CCM automatically creates listeners and vServer groups.
labels:
#...
name: #...
spec:
#...
Après la création du service, le CCM crée un groupe de serveurs virtuels et un écouteur pour le port du service sur l'instance SLB.
Étape 3 : Ajouter le point de terminaison externe au groupe de serveurs virtuels
Connectez-vous à la console CLB ou à la console NLB et ajoutez votre point de terminaison externe (par exemple, une instance ECS) au groupe de serveurs virtuels créé par le CCM. Pour plus d'instructions, consultez les pages Créer et gérer un groupe de serveurs virtuels CLB et Créer et gérer un groupe de serveurs virtuels.
Une fois le point de terminaison externe ajouté, les pods du cluster et le point de terminaison externe apparaissent tous deux dans le groupe de serveurs virtuels. Vous pouvez alors définir leurs poids relatifs.
Scénario 2 : Répartir le trafic entre des services de différents clusters ACK
Associez des services provenant de différents clusters ACK à la même instance SLB. Le CCM de chaque cluster maintient la synchronisation du groupe de serveurs virtuels lors de la mise à l'échelle des pods, sans affecter les serveurs backend enregistrés par les autres clusters.
Restrictions
Examinez les contraintes suivantes avant de commencer :
Tous les services partageant l'instance SLB doivent utiliser le même port.
Les services déployés dans le même namespace sur différents clusters doivent avoir des noms différents.
Si vous définissez les poids de trafic à l'aide de l'annotation
alibaba-cloud-loadbalancer-weight, gérez les poids uniquement via cette annotation. Ne modifiez pas les poids dans la console SLB, car les modifications effectuées dans la console ne sont pas synchronisées avec les services.
Étape 1 : Créer manuellement un écouteur et un groupe de serveurs virtuels
Connectez-vous à la console CLB ou à la console NLB et créez manuellement un écouteur et un groupe de serveurs virtuels pour l'instance SLB. Pour plus d'instructions, consultez les pages Écouteurs CLB, Créer et gérer un groupe de serveurs virtuels CLB, Écouteurs NLB et Créer et gérer un groupe de serveurs.
La création manuelle de l'écouteur et du groupe de serveurs virtuels est nécessaire pour permettre à tous les clusters de partager le même groupe. Le CCM de chaque cluster enregistrera ses propres pods dans ce groupe partagé.
Étape 2 : Créer les services avec des annotations de groupe de serveurs virtuels partagés
Dans chaque cluster, créez un service en utilisant les annotations ci-dessous. Tous les services doivent référencer la même instance SLB et le même groupe de serveurs virtuels.
apiVersion: v1
kind: Service
metadata:
annotations:
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-id: "<YOUR_LB_ID>" # The ID of the shared SLB instance.
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-vgroup-port: "<YOUR_VGROUP_ID>:<PORT>" # The vServer group ID and the Service port, separated by a colon.
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-weight: "100" # (Optional) Traffic weight for backend pods of this Service. Valid values: 1–1000. Default: 100.
labels:
#...
name: #...
spec:
#...
Référence des annotations
| Annotation | Type | Par défaut | Description |
|---|---|---|---|
alibaba-cloud-loadbalancer-id |
string | — | ID de l'instance SLB existante. Le CCM associe le service à cette instance au lieu d'en créer une nouvelle. |
alibaba-cloud-loadbalancer-vgroup-port |
string | — | Mappe le port du service à un groupe de serveurs virtuels : <vgroup-id>:<port>. Pour plusieurs mappages port-vers-groupe de serveurs virtuels, séparez-les par des virgules, par exemple : "<VGROUP_ID_1>:80, <VGROUP_ID_2>:443". |
alibaba-cloud-loadbalancer-weight |
integer | 100 | Poids du trafic pour tous les pods backend de ce service. Valeurs valides : 1–1000. Lorsqu'elle est définie, le CCM utilise cette valeur pour enregistrer les poids des pods dans le groupe de serveurs virtuels. Gérez les poids uniquement via cette annotation, et non dans la console SLB. |
Après avoir appliqué les définitions YAML des services, les pods de chaque cluster apparaissent dans le groupe de serveurs virtuels partagé visible dans la console SLB. Lorsqu'une application est mise à l'échelle, ses pods sont automatiquement ajoutés ou supprimés du groupe, sans affecter les pods appartenant à d'autres services.
Étapes suivantes
Pour la liste complète des annotations relatives aux instances CLB et NLB, consultez les pages Utiliser des annotations pour configurer des instances CLB et Utiliser des annotations pour configurer des instances NLB.
Pour les notes de version du Cloud Controller Manager, consultez la page Cloud Controller Manager.