Pourquoi mon application ne peut pas se connecter via un service d'équilibrage de charge réseau (NLB) ?
Résoudre les problèmes de connectivité liés à l'équilibreur de charge réseau (NLB) lorsque votre application n'est pas accessible via un service NLB.
Infrastructure classique
Vous avez exposé votre application en créant un service NLB dans votre cluster classique.
Lorsque vous avez essayé de vous connecter à votre application en utilisant l'adresse IP publique de l'équilibreur de charge de réseau, la connexion a échoué ou expiré.
Votre service de NLB peut ne pas fonctionner correctement pour l'une des raisons suivantes :
- Le cluster n'est pas encore complètement déployé.
- Le script de configuration pour votre service d'équilibreur de charge de réseau comporte des erreurs.
Vérifiez que vous avez configuré un cluster standard qui est entièrement déployé et qu'il comporte au moins deux noeuds worker pour garantir la haute disponibilité de de votre service NLB.
-
Répertoriez vos noeuds worker. Dans la sortie générée par votre interface de ligne de commande, vérifiez que la valeur Ready apparaît dans la zone Status pour vos noeuds worker et qu'une autre valeur que free est spécifiée dans la zone Machine Type.
ibmcloud ks worker ls --cluster CLUSTER_NAME_OR_ID -
Pour les équilibreurs de charge de réseau version 2.0 : vérifiez que vous avez rempli les prérequis pour les équilibreurs de charge de réseau 2.0.
-
Vérifiez que le fichier de configuration du service d'équilibreur de charge de réseau est correct.
- NLB version 2.0
apiVersion: v1 kind: Service metadata: name: myservice annotations: service.kubernetes.io/ibm-load-balancer-cloud-provider-enable-features: "ipvs" spec: type: LoadBalancer selector: <selector_key>:<selector_value> ports: - protocol: TCP port: 8080 targetPort: 8080 # Optional. By default, the `targetPort` is set to match the `port` value unless specified otherwise. externalTrafficPolicy: Local ``` 1. Vérifiez que vous avez défini **LoadBalancer** comme type de service. 2. Vérifiez que vous avez inclus l'annotation `service.kubernetes.io/ibm-load-balancer-cloud-provider-enable-features: "ipvs"`. 3. Dans la section `spec.selector` du service d'équilibrage de charge, vérifiez que `<selector_key>` et `<selector_value>` sont identiques à la paire clé / valeur que vous avez utilisée dans la section `spec.template.metadata.labels` de votre déploiement YAML. Si les libellés ne correspondent pas, la section des **nœuds finaux** de votre service d'équilibrage de charge affiche `<none>` et votre application n'est pas accessible à partir d'Internet. 4. Vérifiez que vous avez utilisé le **port** sur lequel votre application est en mode écoute. 5. Vérifiez que vous avez défini `externalTrafficPolicy` sur `Local`. * NLB version 1.0 ```yaml {: screen} apiVersion: v1 kind: Service metadata: name: myservice spec: type: LoadBalancer selector: <selector_key>:<selector_value> ports: - protocol: TCP port: 8080 targetPort: 8080 # Optional. By default, the `targetPort` is set to match the `port` value unless specified otherwise. ``` 1. Vérifiez que vous avez défini **LoadBalancer** comme type de service. 2. Dans la section `spec.selector` du service d'équilibrage de charge, vérifiez que `<selector_key>` et `<selector_value>` sont identiques à la paire clé / valeur que vous avez utilisée dans la section `spec.template.metadata.labels` de votre déploiement YAML. Si les libellés ne correspondent pas, la section **Nœuds finaux** de votre service d'équilibrage de charge affiche **Aucune** et votre application n'est pas accessible à partir d'Internet. 3. Vérifiez que vous avez utilisé le **port** sur lequel votre application est en mode écoute. -
Vérifiez votre service d'équilibreur de charge de réseau et passez en revue la section Events à la recherche d'éventuelles erreurs.
kubectl describe service <myservice>Recherchez les messages d'erreur suivants.
- Les clusters avec un noeud doivent utiliser les services de type NodePort
- Pour utiliser le service NLB, vous devez disposer d'un cluster standard avec au moins deux nœuds de travail.
- Aucun IP de fournisseur de cloud n'est disponible pour répondre à la demande de service NLB. Ajoutez un sous-réseau portable au cluster et réessayez.
- Ce message d'erreur indique qu'il ne reste plus d'adresses IP publiques portables à attribuer à votre service NLB. Pour savoir comment demander des adresses IP publiques portables pour votre cluster, voir la rubrique Ajout de sous-réseaux à des clusters. Dès lors que des adresses IP publiques portables sont disponibles pour le cluster, le service d'équilibreur de charge de réseau est automatiquement créé.
- L'adresse IP
<cloud-provider-ip>du fournisseur de cloud demandé n'est pas disponible. Les adresses IP de fournisseur de cloud suivantes sont disponibles:<available-cloud-provider-ips> - Vous avez défini une adresse IP publique portable pour votre équilibreur de charge YAML à l'aide de la section
loadBalancerIP, mais cette adresse IP publique portable n'est pas disponible dans votre sous-réseau public portable. Dans la sectionloadBalancerIPde votre script de configuration, supprimez l'adresse IP existante et ajoutez l'une des adresses IP publiques portables disponibles. Vous pouvez également supprimer la sectionloadBalancerIPde votre script de sorte qu'une adresse IP publique portable disponible puisse être allouée automatiquement. - Aucun noeud disponible pour les services NLB
- Vous n'avez pas assez de nœuds worker pour déployer un service NLB. Il se pourrait que vous ayez déployé un cluster standard avec plusieurs noeuds worker, mais que la mise à disposition des noeuds worker ait échoué.
- Répertoriez les nœuds worker disponibles en exécutant
kubectl get nodes. - Si au moins deux nœuds worker disponibles sont trouvés, listez les détails du noeud d'agent en exécutant
ibmcloud ks worker get --cluster <cluster_name_or_ID> --worker <worker_ID>. - Vérifiez que les ID des réseaux locaux virtuels publics et privés des postes de travail renvoyés par les commandes
kubectl get nodesetibmcloud ks worker getcorrespondent.
- Répertoriez les nœuds worker disponibles en exécutant
- Si vous utilisez un domaine personnalisé pour vous connecter à votre service d'équilibreur de charge de réseau, assurez-vous que votre domaine personnalisé est mappé à l'adresse IP publique de votre service d'équilibreur de charge de réseau.
- Identifiez l'adresse IP publique de votre service d'équilibreur de charge de réseau.
kubectl describe service <service_name> | grep "LoadBalancer Ingress" ``` 2. Assurez-vous que votre domaine personnalisé est mappé à l'adresse IP publique portable de votre service d'équilibreur de charge de réseau dans le pointeur (enregistrement PTR).