Résolvez les problèmes de configuration du CLB, de réutilisation d'instance, d'accès NodePort et de mise à niveau du CCM dans les clusters ACK.
Index
Configuration du CLB
| Question | Résumé |
|---|---|
| Quelles instances CLB un cluster ACK crée-t-il par défaut ? | Deux instances CLB : serveur API et Nginx Ingress Controller |
| Comment choisir entre les politiques de trafic externe Local et Cluster ? | Comparaison des comportements des politiques de trafic |
| Pourquoi ma configuration CLB a-t-elle été modifiée ? | Le CCM écrase les modifications manuelles apportées dans la console CLB |
| Comment les poids des nœuds sont-ils calculés en mode Local ? | Formules de pondération selon la version du CCM |
| Comment activer la vidange de connexion pour un service LoadBalancer ? | Annotations pour la vidange de connexion |
| Comment lister toutes les instances CLB d'un cluster ? | Commande kubectl + jq pour lister tous les services LoadBalancer |
| Comment activer le renommage du CLB pour les anciennes versions du CCM ? | Ajout manuel de tags aux instances CLB créées par le CCM v1.9.3.10 ou antérieur |
Accès au CLB et cycle de vie
| Question | Résumé |
|---|---|
| Pourquoi une adresse IP CLB est-elle inaccessible depuis le cluster ? | Limitations de la couche 4 et comportement du mode Local |
| Quand les instances CLB sont-elles supprimées ? | Politiques de suppression pour les instances CLB créées par le CCM ou réutilisées |
| Que faire si je supprime accidentellement une instance CLB ? | Étapes de récupération pour les instances CLB du serveur API, de l'Ingress et des applications |
Réutilisation d'une instance CLB existante
| Question | Résumé |
|---|---|
| Pourquoi la réutilisation d'une instance CLB existante échoue-t-elle ? | Version du CCM, origine de l'instance et exigences VPC |
| Pourquoi les écouteurs ne sont-ils pas créés lors de la réutilisation d'une instance CLB existante ? | Annotation de remplacement forcé requise |
Dépannage du CLB
| Question | Résumé |
|---|---|
| Que faire si une instance CLB reste à l'état Pending ? | Vérifiez les événements et résolvez les erreurs |
| Que faire si un groupe de serveurs virtuels n'est pas mis à jour ? | Vérifiez les événements et résolvez les erreurs |
| Que faire si une annotation de service ne prend pas effet ? | Version du CCM, présence de l'annotation et syntaxe |
| Pourquoi aucun événement n'est affiché pour la synchronisation Service et LoadBalancer ? | Version du CCM antérieure à v1.9.3.276-g372aa98-aliyun |
Messages d'erreur de service
| Question | Résumé |
|---|---|
| Erreurs de quota et de ressources | Quota de serveurs backend, épuisement des adresses IP vSwitch, disponibilité des nœuds |
| Erreurs de configuration | Mode ENI, port cible, groupe de ressources, type d'adresse, méthode de facturation |
| Erreurs réseau | Incompatibilité VPC, limitation de l'API, conflits de groupes de serveurs virtuels |
| Erreurs de réutilisation du CLB | Réutilisation d'un CLB créé par le CCM, CLB introuvable, rattachement du CLB |
| Erreurs de facturation | Paiement en retard, solde insuffisant, arrêt des instances partagées |
NodePort et CCM
| Question | Résumé |
|---|---|
| Comment accéder à un service NodePort ? | Méthodes d'accès selon l'étendue du réseau |
| Comment configurer un écouteur pour un service NodePort ? | Changer le type en LoadBalancer |
| Comment configurer la plage de ports NodePort ? | ServiceNodePortRange et évitement des conflits de ports |
| Que faire si la mise à niveau du CCM échoue ? | Lien de dépannage |
| Comment ajouter les autorisations requises pour une mise à niveau du CCM dans un cluster ACK dédié ? | Autorisations RAM pour la version 2.11.2 et ultérieures |
| Comment activer la persistance de session pour un service Kubernetes ? | Lien externe |
Configuration du CLB
Quelles instances CLB un cluster ACK crée-t-il par défaut ?
Si le module complémentaire Nginx Ingress Controller est installé lors de la création du cluster, celui-ci crée deux instances CLB :
CLB du serveur API : endpoint du serveur API. Toutes les requêtes du cluster transitent par cette instance sur le port TCP 6443. Les backends sont les pods du serveur API ou les instances ECS master.
CLB du Nginx Ingress Controller : associé au service
nginx-ingress-controllerdans kube-system. Se lie dynamiquement aux pods Ingress Controller pour l'équilibrage de charge des requêtes externes. Écoute sur les ports TCP 80 et 443.
Comment choisir entre les politiques de trafic externe Local et Cluster ?
Les politiques de trafic externe Local et Cluster diffèrent selon le plugin réseau. Consultez Politiques de trafic externe : Local et Cluster.
Pourquoi ma configuration CLB a-t-elle été modifiée ?
Le CCM utilise une API déclarative et met automatiquement à jour la configuration du CLB en fonction de la définition du service. Les modifications directes apportées dans la console CLB peuvent être écrasées.
Ne modifiez pas les instances CLB gérées par Kubernetes dans la console CLB. Les modifications pourraient être perdues et rendre le service inaccessible. Utilisez plutôt les annotations de service. Consultez Utiliser des annotations pour configurer une instance Classic Load Balancer (CLB).
Comment les poids des nœuds sont-ils calculés en mode Local ?
L'exemple suivant utilise un pod d'application (app=nginx) déployé sur trois instances ECS et exposé via un service.

v1.9.3.276-g372aa98-aliyun et versions ultérieures
Le CCM définit le poids du nœud égal au nombre de pods sur ce nœud. Par exemple, si trois instances ECS hébergent respectivement 1, 2 et 3 pods, leurs poids sont de 1, 2 et 3. Le trafic est distribué selon un ratio de 1:2:3, ce qui permet un équilibrage de charge uniforme entre les pods.
Formule :


Entre v1.9.3.164-g2105d2e-aliyun et v1.9.3.276-g372aa98-aliyun
Antérieur à v1.9.3.164-g2105d2e-aliyun
Comment activer la vidange de connexion pour un service LoadBalancer ?
Ajoutez les annotations suivantes au service. Après la suppression d'un serveur backend, l'instance CLB continue de traiter les connexions existantes pendant la durée du délai de vidange.
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-connection-drainservice.beta.kubernetes.io/alibaba-cloud-loadbalancer-connection-drain-timeout
Comment lister toutes les instances CLB d'un cluster ?
-
Récupérez le nom, le namespace, l'adresse IP et le type d'adresse de chaque service LoadBalancer. Exemple de sortie :
kubectl get services -A -ojson | jq '.items[] | select(.spec.type == "LoadBalancer") | {name: .metadata.name, namespace: .metadata.namespace, ip: .status.loadBalancer.ingress[0].ip, lb_type: .metadata.annotations."service.beta.kubernetes.io/alibaba-cloud-loadbalancer-address-type"}'{ "name": "test", "namespace": "default", "ip": "192.168.*.*", "lb_type": "intranet" } { "name": "nginx-ingress-lb", "namespace": "kube-system", "ip": "47.97.*.*", "lb_type": "null" }
Comment activer le renommage du CLB pour les anciennes versions du CCM ?
Le CCM v1.9.3.10 et les versions ultérieures taguent automatiquement les instances CLB pour prendre en charge le renommage. Pour les instances CLB créées par des versions antérieures du CCM, ajoutez le tag manuellement.
Cette procédure s'applique uniquement aux instances CLB créées par le CCM v1.9.3.10 ou une version antérieure. Le type de service doit être LoadBalancer.
Connectez-vous au nœud master du cluster. Consultez Se connecter à un cluster ACK à l'aide de kubectl.
-
Affichez le type de service et l'adresse IP. Remplacez
${namespace}et${service}par le namespace et le nom du service réels.kubectl get svc -n ${namespace} ${service}# kubectl get svc -n ${namespace} ${service} nginx-local LoadBalancer 172.19.xxx.xxx 47.111.xxx.xxx 8900:31598/TCP 33d -
Générez le tag pour l'instance CLB :
kubectl get svc -n ${namespace} ${service} -o jsonpath="{.metadata.uid}"|awk -F "-" '{print "kubernetes.do.not.delete: "substr("a"$1$2$3$4$5,1,32)}'# kubectl get svc -n ${namespace} ${service} -o jsonpath="{.metadata.uid}"|awk -F "-" '{print "ku kubernetes.do.not.delete: xxx Connectez-vous à la console CLB. À l'aide de l'adresse IP obtenue à l'étape 2, recherchez l'instance CLB dans la région correspondante.
Ajoutez un tag à l'instance CLB en utilisant la clé et la valeur de l'étape 3 (éléments 1 et 2 de la figure précédente). Consultez Créer et gérer une instance CLB.
Accès au CLB et cycle de vie
Pourquoi une adresse IP CLB est-elle inaccessible depuis le cluster ?
Deux scénarios peuvent en être la cause.
Scénario 1 : CLB privé non créé par un service
Lorsqu'un pod accède à une instance CLB privée non créée par un service, l'accès échoue si le pod et un serveur backend se trouvent sur le même nœud. Il s'agit d'une limitation de la couche 4 : une instance ECS ne peut pas être à la fois un serveur backend et un client pour la même instance CLB.
Pour résoudre ce problème :
Modifiez l'adresse IP du CLB en une adresse IP publique.
Créez l'instance CLB via un service et définissez la politique de trafic externe sur Cluster. Kube-proxy intercepte alors le trafic lié au CLB depuis l'intérieur du cluster, contournant ainsi la limitation.
**Scénario 2 : externalTrafficPolicy: Local bloque l'accès interne**
Lorsqu'un service utilise externalTrafficPolicy: Local, l'accès interne à l'IP du CLB échoue depuis les nœuds sans pod backend. L'adresse CLB est destinée à un usage externe. Le trafic interne est intercepté par kube-proxy et routé localement (iptables ou IPVS). Si le nœud ne possède aucun pod backend local, la connexion échoue.
Consultez kube-proxy ajoute l'adresse external-lb aux règles iptables du nœud local.
Solutions (classées par recommandation) :
Accédez aux services en interne via ClusterIP ou le nom du service. Par exemple, le nom du service Ingress est
nginx-ingress-lb.kube-system. C'est l'approche recommandée.-
**Remplacez
externalTrafficPolicypar Cluster.** Cela transfère le trafic vers tous les nœuds mais active le SNAT, empêchant ainsi le backend de récupérer l'IP réelle du client.kubectl edit svc nginx-ingress-lb -n kube-system -
Utilisez le passthrough d'interface réseau élastique (ENI) sur les clusters Terway. Définissez
externalTrafficPolicysur Cluster et ajoutez l'annotationservice.beta.kubernetes.io/backend-type: "eni". Cela préserve l'IP source tout en permettant l'accès interne. Consultez Utiliser des annotations pour configurer une instance Classic Load Balancer (CLB).apiVersion: v1 kind: Service metadata: annotations: service.beta.kubernetes.io/backend-type: eni labels: app: nginx-ingress-lb name: nginx-ingress-lb namespace: kube-system spec: externalTrafficPolicy: Cluster
Quand les instances CLB sont-elles supprimées ?
Le comportement de suppression dépend du fait que le CCM ait créé l'instance CLB et de la manière dont elle a été associée au service.
| Opération de service | CLB créé par le CCM | CLB réutilisé |
|---|---|---|
| Supprimer le service | Le CLB est supprimé | Le CLB est conservé |
| Modifier le type de service de LoadBalancer à un autre type | Le CLB est supprimé | Le CLB est conservé |
Si le service réutilise une instance CLB existante (annotée avec service.beta.kubernetes.io/alibaba-cloud-loadbalancer-id: {your-slb-id}), la suppression du service ne supprime pas l'instance CLB. Sinon, la suppression du service entraîne également celle de l'instance CLB.
Ne modifiez pas un service pour transformer un CLB créé par le CCM en un CLB réutilisé. Cela dissocie le service du CLB créé automatiquement, empêchant sa suppression automatique lors de la suppression du service.
Que faire si je supprime accidentellement une instance CLB ?
Si l'instance CLB du serveur API est supprimée, elle ne peut pas être récupérée. Vous devez recréer le cluster. Pour obtenir des instructions, consultez Créer un cluster ACK Pro.
Scénario 1 : Suppression du CLB Ingress
Les étapes suivantes utilisent Nginx Ingress comme exemple.
Connectez-vous à la console ACK. Dans le volet de navigation de gauche, cliquez sur Clusters.
Sur la page Clusters, trouvez le cluster cible et cliquez sur son nom. Dans le volet de navigation de gauche, choisissez Network > Services.
-
Sélectionnez kube-system dans la liste déroulante Namespace.
Si nginx-ingress-lb apparaît dans la liste, cliquez sur Edit YAML dans la colonne Actions. Supprimez le champ
status.loadBalanceret son contenu, puis cliquez sur OK. Le CCM reconstruit l'instance CLB.-
Si nginx-ingress-lb n'apparaît pas, cliquez sur Create from YAML et utilisez le modèle suivant : ``
yaml apiVersion: v1 kind: Service metadata: labels: app: nginx-ingress-lb name: nginx-ingress-lb namespace: kube-system spec: externalTrafficPolicy: Local ports: selector: app: ingress-nginx type: LoadBalancer``name: http port: 80 protocol: TCP targetPort: 80
name: https port: 443 protocol: TCP targetPort: 443
Scénario 2 : Suppression du CLB spécifique à l'application
Si le service n'est plus nécessaire, supprimez-le.
-
Si le service est toujours utilisé :
Connectez-vous à la console ACK. Dans le volet de navigation de gauche, cliquez sur Clusters.
Sur la page Clusters, trouvez le cluster cible et cliquez sur son nom. Dans le volet de navigation de gauche, choisissez Network > Services.
Dans la liste déroulante Namespace, cliquez sur All Namespaces, puis trouvez le service cible.
Dans la colonne Actions, cliquez sur Edit YAML. Supprimez le contenu de
status.loadBalanceret cliquez sur OK. Le CCM reconstruit l'instance CLB.
Réutilisation d'une instance CLB existante
Pourquoi la réutilisation d'une instance CLB existante échoue-t-elle ?
Vérifiez les points suivants dans l'ordre :
Version du CCM : Les versions antérieures à v1.9.3.105-gfd4e547-aliyun ne prennent pas en charge la réutilisation des instances CLB. Pour obtenir des instructions de mise à niveau, consultez Mettre à niveau le composant CCM.
Origine de l'instance : Les instances CLB créées par le cluster ne peuvent pas être réutilisées.
CLB du serveur API : L'instance CLB du serveur API ne peut pas être réutilisée.
Incompatibilité VPC : Une instance CLB orientée vers le réseau privé doit se trouver dans le même cloud privé virtuel (VPC) que le cluster. La réutilisation inter-VPC n'est pas prise en charge.
Pourquoi les écouteurs ne sont-ils pas créés lors de la réutilisation d'une instance CLB existante ?
Vérifiez que l'annotation service.beta.kubernetes.io/alibaba-cloud-loadbalancer-force-override-listeners est définie sur "true". Sans cela, les écouteurs ne sont pas créés.
Le CCM n'écrase pas les écouteurs des instances CLB existantes par défaut :
L'écrasement des écouteurs actifs peut provoquer des interruptions de service.
Le CCM prend en charge un nombre limité de configurations backend. Pour des configurations complexes, créez les écouteurs dans la console CLB. Ne forcez le remplacement des écouteurs que lorsque leurs ports ne sont plus utilisés.
Dépannage du CLB
Que faire si une instance CLB reste à l'état Pending ?
Exécutez
kubectl -n {your-namespace} describe svc {your-svc-name}pour vérifier les messages d'événement.Résolvez les erreurs signalées dans les événements. Consultez Messages d'erreur de service et solutions pour obtenir des conseils.
Si aucun événement n'apparaît, consultez Pourquoi aucun événement n'est affiché pour la synchronisation Service et LoadBalancer ?
Que faire si un groupe de serveurs virtuels n'est pas mis à jour ?
Exécutez
kubectl -n {your-namespace} describe svc {your-svc-name}pour vérifier les messages d'événement.Résolvez les erreurs signalées dans les événements. Consultez Messages d'erreur de service et solutions pour obtenir des conseils.
Si aucun événement n'apparaît, consultez Pourquoi aucun événement n'est affiché pour la synchronisation Service et LoadBalancer ?
Que faire si une annotation de service ne prend pas effet ?
Exécutez
kubectl -n {your-namespace} describe svc {your-svc-name}pour vérifier la présence d'événements d'erreur. Si des erreurs existent, consultez Messages d'erreur de service et solutions.-
Si aucune erreur n'apparaît, vérifiez les points suivants :
Version du CCM : Vérifiez que la version du CCM prend en charge l'annotation. Consultez Utiliser des annotations pour configurer une instance Classic Load Balancer (CLB).
Présence de l'annotation : Connectez-vous à la console ACK. Sur la page Services, cliquez sur le nom du service et confirmez que l'annotation existe. Si elle est manquante, ajoutez-la. Consultez Utiliser des annotations pour configurer une instance Classic Load Balancer (CLB).
Syntaxe de l'annotation : Vérifiez que la clé et la valeur de l'annotation sont correctes.
Pour afficher la liste des services, consultez Gérer les services.
Pourquoi aucun événement n'est affiché pour la synchronisation Service et LoadBalancer ?
Si kubectl -n {your-namespace} describe svc {your-svc-name} n'affiche aucun événement, vérifiez la version du CCM :
Antérieure à v1.9.3.276-g372aa98-aliyun : Les événements ne sont pas pris en charge. Mettez à niveau le CCM. Pour obtenir des instructions de mise à niveau, consultez Mettre à niveau le composant CCM.
v1.9.3.276-g372aa98-aliyun et versions ultérieures : Soumettre un ticket pour une enquête approfondie.
Messages d'erreur de service et solutions
Messages d'erreur de service courants organisés par catégorie.
Erreurs de quota et de ressources
| Message d'erreur | Description et solution |
|---|---|
The backend server number has reached to the quota limit of this load balancers |
L'instance CLB a atteint son quota de serveurs backend. Par défaut, une instance CLB prend en charge jusqu'à 200 serveurs backend. Pour résoudre ce problème : - Demandez une augmentation de quota sur la page de gestion des quotas SLB. - Définissez externalTrafficPolicy: Local. Le mode Cluster consomme rapidement le quota. Si vous utilisez le mode Cluster, ajoutez l'annotation service.beta.kubernetes.io/alibaba-cloud-loadbalancer-backend-label pour limiter les nœuds backend. Consultez Utiliser des annotations pour configurer une instance CLB. - Lorsque plusieurs services réutilisent une instance CLB, les nombres de serveurs backend sont cumulatifs. Créez une instance CLB distincte pour le nouveau service. |
There are no available nodes for LoadBalancer |
L'instance CLB ne dispose d'aucun serveur backend. Vérifiez si le service est associé à un pod en cours d'exécution. - Si aucun pod n'est associé, associez le service à un pod d'application. - Si le pod est défectueux, effectuez un dépannage. - Si le pod s'exécute sur un nœud master, expulsez-le vers un nœud worker. |
Status Code: 400 Code: VSwitchAvailableIpNotExist Message: The specified VSwitch has no available ip. |
Le vSwitch ne dispose d'aucune adresse IP disponible. Utilisez service.beta.kubernetes.io/alibaba-cloud-loadbalancer-vswitch-id: "${YOUR_VSWITCH_ID}" pour spécifier un autre vSwitch dans le même VPC. |
Erreurs de configuration
| Message d'erreur | Description et solution |
|---|---|
The loadbalancer does not support backend servers of eni type |
Les instances CLB partagées ne prennent pas en charge les backends ENI. Ajoutez l'annotation service.beta.kubernetes.io/alibaba-cloud-loadbalancer-spec: "slb.s1.small" pour utiliser une instance CLB haute performance. Vérifiez la compatibilité de la version du CCM. Consultez Utiliser des annotations pour configurer une instance CLB. |
The specified Port must be between 1 and 65535. |
Le mode ENI ne prend pas en charge une valeur de chaîne pour targetPort. Modifiez la valeur de targetPort dans le YAML du service en un entier, ou mettez à niveau le CCM. Pour obtenir des instructions de mise à niveau, consultez Mettre à niveau le composant CCM. |
can not change ResourceGroupId once created |
Le groupe de ressources d'une instance CLB ne peut pas être modifié après sa création. Supprimez l'annotation service.beta.kubernetes.io/alibaba-cloud-loadbalancer-resource-group-id:"rg-xxxx" du service. |
can not find eniid for ip x.x.x.x in vpc vpc-xxxx |
L'adresse IP de l'ENI est introuvable dans le VPC. Vérifiez si le service possède l'annotation service.beta.kubernetes.io/backend-type: eni. Si le cluster utilise le plugin réseau Flannel, le mode ENI n'est pas pris en charge. Supprimez l'annotation. |
The operation is not allowed because the instanceChargeType of loadbalancer is PayByCLCU. ou User does not have permission modify InstanceChargeType to spec. |
La méthode de facturation de l'instance CLB ne peut pas être modifiée de paiement à l'utilisation à paiement par spécification. - Supprimez l'annotation service.beta.kubernetes.io/alibaba-cloud-loadbalancer-spec . - Si le service possède l'annotation service.beta.kubernetes.io/alibaba-cloud-loadbalancer-instance-charge-type , définissez sa valeur sur PayByCLCU . |
alicloud: can not change LoadBalancer AddressType once created. delete and retry |
Le type d'adresse CLB ne peut pas être modifié après sa création. Supprimez et recréez le service. |
Erreurs réseau
| Message d'erreur | Description et solution |
|---|---|
Status Code: 400 Code: NetworkConflict |
L'instance CLB interne réutilisée ne se trouve pas dans le même VPC que le cluster. Assurez-vous que l'instance CLB et le cluster se trouvent dans le même VPC. |
Status Code: 400 Code: Throttlingxxx |
L'API CLB est limitée. 1. Connectez-vous à la page de gestion des quotas SLB et vérifiez que votre quota CLB est suffisant. 2. Exécutez kubectl -n {your-namespace} describe svc {your-svc-name} pour vérifier les erreurs de service. Résolvez toutes les erreurs conformément à ce tableau. |
Status Code: 400 Code: RspoolVipExist Message: there are vips associating with this vServer group. |
Un écouteur associé au groupe de serveurs virtuels ne peut pas être supprimé. 1. Vérifiez si l'annotation du service contient service.beta.kubernetes.io/alibaba-cloud-loadbalancer-id: {your-clb-id} . Si c'est le cas, l'instance CLB est réutilisée. 2. Supprimez l'écouteur correspondant au port du service dans la console CLB. |
Erreurs de réutilisation du CLB
| Message d'erreur | Description et solution |
|---|---|
alicloud: not able to find loadbalancer named [%s] in openapi, but it's defined in service.loaderbalancer.ingress. this may happen when you removed loadbalancerid annotation ou alicloud: can not find loadbalancer, but it's defined in service |
L'instance CLB est introuvable en fonction du service. Connectez-vous à la console CLB et recherchez l'instance CLB par l'EXTERNAL-IP du service dans la même région. 1. Si l'instance CLB est introuvable et que le service n'est plus nécessaire, supprimez le service. 2. Si l'instance CLB existe : - Si elle a été créée manuellement, ajoutez l'annotation service.beta.kubernetes.io/alibaba-cloud-loadbalancer-id . Consultez Utiliser des annotations pour configurer une instance CLB . - Si elle a été créée automatiquement par le CCM, vérifiez si l'instance CLB possède le tag kubernetes.do.not.delete . Si ce n'est pas le cas, ajoutez-le. Consultez Comment activer le renommage du CLB pour les anciennes versions du CCM ? |
SyncLoadBalancerFailed the loadbalancer xxx can not be reused, can not reuse loadbalancer created by kubernetes. |
Une instance CLB créée par le CCM ne peut pas être réutilisée. Vérifiez l'ID CLB dans l'annotation service.beta.kubernetes.io/alibaba-cloud-loadbalancer-id et résolvez le problème en fonction de l'état du service : - État Pending : Remplacez l'ID CLB par l'ID d'une instance CLB créée manuellement depuis la console CLB . - Non pending : Si l'IP CLB correspond à l'IP externe du service, supprimez l'annotation service.beta.kubernetes.io/alibaba-cloud-loadbalancer-id . Si les IP diffèrent, trouvez l'instance CLB correcte dans la console CLB par l'IP externe du service et mettez à jour l'annotation, ou remplacez l'ID CLB par une instance CLB créée manuellement et recréez le service. |
the loadbalancer lb-xxxxx can not be reused, service has been associated with ip [xxx.xxx.xxx.xxx], cannot be bound to ip [xxx.xxx.xxx.xxx] |
Le service est déjà attaché à une instance CLB et ne peut pas être attaché à une autre. Pour changer d'instance CLB, supprimez et recréez le service. La modification de l'ID CLB dans l'annotation service.beta.kubernetes.io/alibaba-cloud-loadbalancer-id seule ne fonctionne pas. |
Erreurs de facturation
| Message d'erreur | Description et solution |
|---|---|
ORDER.ARREARAGE Message: The account is arrearage. |
Votre compte présente un paiement en retard. |
PAY.INSUFFICIENT_BALANCE Message: Your account does not have enough balance. |
Le solde de votre compte est insuffisant. |
Status Code: 400 Code: ShareSlbHaltSales Message: The share instance has been discontinued. |
Les anciennes versions du CCM créent par défaut des instances CLB partagées, mais ces instances sont désormais obsolètes. Mettez à niveau le composant CCM . |
NodePort et CCM
Comment accéder à un service NodePort ?
Depuis l'intérieur du cluster (sur un nœud du cluster) : Utilisez ClusterIP + port, ou l'IP du nœud + NodePort du service. Le NodePort par défaut est supérieur à 30000.
Depuis l'extérieur du cluster (au sein du même VPC) : Utilisez l'adresse IP du nœud et le NodePort du service.
Depuis l'extérieur du VPC (depuis un autre VPC ou Internet) : Exposez le service en tant que type LoadBalancer et accédez-y via son endpoint externe.
Si la politique de trafic externe est Local, vérifiez que le nœud auquel vous accédez héberge un pod backend du service. Consultez Politiques de trafic externe : Local et Cluster .
Comment configurer un écouteur pour un service NodePort ?
Le CCM prend en charge la configuration des écouteurs uniquement pour les services LoadBalancer. Changez le type de service de NodePort à LoadBalancer.
Comment configurer la plage de ports NodePort ?
Le paramètre --service-node-port-range du serveur API (ServiceNodePortRange) contrôle la plage de ports pour les services NodePort et LoadBalancer. La plage par défaut est de 30000 à 32767. Dans les clusters ACK Pro, personnalisez les paramètres du plan de contrôle pour ajuster cette plage. Consultez Personnaliser les paramètres du plan de contrôle pour un cluster ACK Pro.
Gardez les points suivants à l'esprit :
Évitez les conflits de plage de ports. La plage NodePort ne doit pas chevaucher le paramètre noyau
net.ipv4.ip_local_port_range, qui contrôle les numéros de port locaux disponibles pour les applications sur le nœud. La valeur par défaut deip_local_port_rangeest de 32768 à 60999.Les plages par défaut sont sûres. Avec les paramètres ACK par défaut, ServiceNodePortRange (30000-32767) et
ip_local_port_range(32768-60999) ne se chevauchent pas. Si l'une des plages a été étendue et qu'elles se chevauchent désormais, des exceptions réseau sporadiques peuvent survenir. Dans les cas graves, les contrôles d'intégrité échouent et les nœuds passent hors ligne. Restaurez les valeurs par défaut ou ajustez les deux plages pour éliminer le chevauchement.Reconfigurez les services existants après les modifications. Après avoir ajusté la plage de ports, certains services NodePort ou LoadBalancer peuvent encore utiliser des ports dans la plage
ip_local_port_range. Exécutezkubectl edit <service-name>et modifiez le champspec.ports.nodePortpour utiliser un NodePort inutilisé.
Que faire si la mise à niveau du CCM échoue ?
Consultez L'échec de la vérification de mise à niveau de Cloud Controller Manager (CCM) .
Comment ajouter les autorisations requises pour une mise à niveau du CCM dans un cluster ACK dédié ?
Les versions ultérieures du CCM introduisent des API Alibaba Cloud qui nécessitent des autorisations supplémentaires de Resource Access Management (RAM). Par exemple, la version 2.11.2 ajoute la gestion des routes pour les réseaux Flannel, et la version 2.12.1 ajoute la gestion par lots pour Network Load Balancer (NLB).
Avant de mettre à niveau vers la version 2.11.2 ou ultérieure dans un cluster ACK dédié, accordez les autorisations requises au rôle RAM du cluster :
Connectez-vous à la console ACK . Dans le volet de navigation de gauche, cliquez sur Clusters .
Sur la page Clusters , trouvez le cluster cible et cliquez sur son nom. Dans le volet de navigation de gauche, cliquez sur Cluster Information .
Cliquez sur l'onglet Basic Information , puis cliquez sur le nom du rôle pour Master RAM Role .
-
Dans la console RAM, cliquez sur Permissions > Policies dans le volet de navigation de gauche. Trouvez la stratégie personnalisée qui commence par
k8sMasterRolePolicy-Ccm-et cliquez sur le nom de la stratégie.Pour les clusters plus anciens, cette stratégie peut ne pas exister. Sélectionnez plutôt une stratégie personnalisée dont le nom commence par
k8sMasterRolePolicy-. -
Cliquez sur Edit Policy Document et ajoutez l'autorisation
nlb:ListAsynJobsaux autorisations NLB. Pour les clusters Flannel, ajoutez également les autorisationsvpc:CreateRouteEntriesetvpc:DeleteRouteEntriesaux autorisations VPC."nlb:ListServerGroupServers", "nlb:GetJobStatus", "nlb:LoadBalancerLeaveSecurityGroup", "nlb:LoadBalancerJoinSecurityGroup", "nlb:ListAsynJobs" ], "Resource": "*", "Effect": "Allow" },}, { "Action": [ "vpc:Describe*", "vpc:DeleteRouteEntry", "vpc:CreateRouteEntry", "vpc:CreateRouteEntries", "vpc:DeleteRouteEntries" ], "Resource": "*", "Effect": "Allow" } ] } Soumettez les modifications et procédez à la mise à niveau du CCM.


