Clusters VPC : pourquoi un service Kubernetes LoadBalancer échoue-t-il sans adresse IP ?

Cloud privé virtuel

Vous avez rendu votre application accessible en créant un service « Kubernetes » LoadBalancer dans votre cluster VPC, mais le service ne parvient pas à se provisionner car aucune adresse IP n'est disponible sur vos sous-réseaux.

Vous avez exposé votre application en créant un service Kubernetes LoadBalancer dans votre cluster VPC.

Lorsque vous exécutez oc describe svc <kubernetes_lb_service_name>, un message d'avertissement s'affiche dans la section Événements similaire à l'un des suivants :

The subnet with ID(s) '<subnet_id>' has insufficient available ipv4 addresses.

Lorsque vous créez un service Kubernetes LoadBalancer dans votre cluster, un équilibreur de charge VPC est automatiquement créé dans votre VPC.

L'équilibreur de charge VPC place une adresse IP flottante pour votre service Kubernetes LoadBalancer derrière un nom d'hôte auquel vous pouvez accéder via votre application.

Dans les clusters de VPC, les noeuds worker et les services se voient affecter des adresses IP provenant des mêmes sous-réseaux. Le routage de trafic est activé entre les sous-réseaux, de sorte que lorsque toutes les adresses IP d'un sous-réseau pour une zone sont utilisées par des noeuds d'agent ou des services, vous pouvez toujours créer de nouveaux noeuds worker ou services dans cette zone car ils utilisent des adresses IP provenant de sous-réseaux dans d'autres zones. Toutefois, si toutes les adresses IP de tous les sous-réseaux sont utilisées, un nouveau service LoadBalancer Kubernetes ne peut pas être mis à disposition avec succès.

Une fois que vous avez créé un sous-réseau VPC, vous ne pouvez pas le redimensionner ou modifier sa plage d'adresses IP.

A la place, vous devez créer un sous-réseau VPC plus grand dans une ou plusieurs zones où vous disposez de noeuds worker. Ensuite, vous créez un nouveau pool de workers en utilisant les sous-réseaux les plus vastes.

  1. Créez un nouveau sous-réseau VPC au sein du même VPC et dans une ou plusieurs zones où votre cluster dispose de nœuds de travail. Prenez soin de créer un sous-réseau qui peut prendre en charge le nombre de noeuds worker et de services que vous prévoyez de créer dans votre cluster. La taille de routage CIDR par défaut de chaque sous-réseau VPC est /24, qui peut prendre en charge jusqu'à 253 noeuds worker et services. Pour vérifier le VPC et les zones de votre cluster, exécutez la commande « ibmcloud oc cluster get --cluster <cluster_name_or_ID> ».

  2. Créez un pool de noeuds worker dans votre cluster.

    ibmcloud oc worker-pool create vpc-gen2 --name <name> --cluster <cluster_name_or_ID> --flavor <flavor> --size-per-zone <number_of_worker_nodes> --label <key>=<value>
    
  3. À l'aide des identifiants des nouveaux sous-réseaux que vous avez créés à l'étape précédente, ajoutez les zones au pool de travailleurs. Répétez cette commande pour chaque zone et chaque sous-réseau.

    ibmcloud oc zone add vpc-gen2 --zone <zone> --subnet-id <subnet_id> --cluster <cluster_name_or_ID> --worker-pool <worker_pool_name>
    
  4. Au bout de quelques minutes, vérifiez que votre service LoadBalancer a bien été mis à disposition sur l'un des nouveaux sous-réseaux. Si le service est correctement mis en service, la section « Événements » n'affiche aucun événement de type « Warning » ou « Error ».

    oc describe svc <kubernetes_lb_service_name>