Clusters Classiques : Pourquoi le contrôleur Ingress se déploie-il dans une zone ?

Fournisseur d'infrastructure et version :

  • Classique
  • Red Hat OpenShift version 4

Lorsque vous exécutez oc get svc -n openshift-ingress, une ou plusieurs zones n'ont pas de contrôleur Ingress public.

  • Aucun service router-default n'est déployé ou il se peut qu'aucune adresse IP externe ne soit affectée au service. Par exemple, dans un cluster à une seule zone, vous pouvez voir s'afficher ce qui suit :
    NAME                                         TYPE           CLUSTER-IP      EXTERNAL-IP    PORT(S)                      AGE
    router-default                               LoadBalancer   172.21.47.119   <none>         80:32637/TCP,443:31719/TCP   26m
    router-internal-default                      ClusterIP      172.21.51.30    <none>         80/TCP,443/TCP,1936/TCP      26m
    
  • Si vous avez un cluster multizone, une zone n'a pas de service de contrôleur Ingress. Par exemple, dans un cluster multizone comportant des nœuds de travail dans dal10, dal12, et dal13, vous pourriez voir un service router-default pour et dal10 un router-dal12 service pour dal12, mais aucun router-dal13 service pour dal13. Notez que le service de contrôleur Ingress de la première zone dans laquelle vous disposez de nœuds de travail porte toujours le nom router-default, et que les services de contrôleur Ingress des zones que vous ajoutez par la suite à votre cluster portent des noms tels que router-dal12. Vous pouvez également voir qu'une zone n'a pas de service de contrôleur Ingress, mais qu'une autre zone dispose de deux ou plusieurs services de contrôleur Ingress.
    NAME                                         TYPE           CLUSTER-IP      EXTERNAL-IP    PORT(S)                      AGE
    router-default                               LoadBalancer   172.21.47.119   169.XX.XX.XX   80:32637/TCP,443:31719/TCP   26m
    router-dal12                                 LoadBalancer   172.21.47.119   169.XX.XX.XX   80:32637/TCP,443:31719/TCP   26m
    router-internal-default                      ClusterIP      172.21.51.30    <none>         80/TCP,443/TCP,1936/TCP      26m
    

Les services de routeur peuvent ne pas se déployer pour l'une des raisons suivantes :

  • Si aucun service de contrôleur d'entrée n'est déployé ou si des services de contrôleur n'ont pas été affectés à une adresse IP externe: Dans les clusters standards, la première fois que vous créez un cluster dans une zone, un réseau local virtuel public et un réseau local virtuel privé dans cette zone sont automatiquement mis à disposition pour vous dans votre compte d'infrastructure IBM Cloud. Dans cette zone, un sous-réseau public portable est requis sur le VLAN public que vous spécifiez et un sous-réseau privé portable est requis sur le VLAN privé que vous spécifiez. Pour Red Hat OpenShift on IBM Cloud, les VLAN sont limités à 40 sous-réseaux. Si le VLAN du cluster dans une zone a déjà atteint cette limite, le sous-domaine Ingress ne peut pas être provisionné et le contrôleur Ingress public par défaut ne peut pas non plus être provisionné. Pour connaître le nombre de sous-réseaux d'un VLAN, depuis la console d' IBM Cloud, sélectionnez Réseau > Gestion IP > VLAN. Cliquez sur le Numéro de VLAN du VLAN que vous avez utilisé pour créer votre cluster. Examinez la section Sous-réseaux pour voir s'il existe 40 sous-réseaux ou plus.

  • Si une zone n'a pas de service de contrôleur Ingress : Lorsque les services du contrôleur Ingress sont créés, ils sont automatiquement répartis entre les zones de votre cluster. Si le réseau de la première zone avec laquelle votre cluster a été créé n'est pas prêt lorsque les services du contrôleur Ingress sont créés, le service de contrôleur Ingress pour cette zone peut être placé dans une zone différente. Deux services de contrôleur Ingress peuvent être créés dans une zone, et aucun service de contrôleur Ingress n'est créé dans la zone initiale.

Résoudre les problèmes de réseau local virtuel pour les services de contrôleur Ingress qui n'ont pas d'adresse IP, ou les problèmes de service du contrôleur Ingress multi-zones pour les zones sans services de contrôleur Ingress.

Résolution des problèmes de réseau local virtuel

Pour résoudre les problèmes de réseau local virtuel pour les services de contrôleur qui n'ont pas d'adresse IP, procédez comme suit :

Option 1: si vous avez besoin d'un nouveau VLAN, demandez-en un en contactant le support IBM Cloud. Ensuite, créez un cluster qui utilise ce nouveau VLAN.

Option 2: si vous disposez d'un autre VLAN, vous pouvez configurer l'extension de VLAN dans votre cluster existant. Pour vérifier si la fonction VLAN Spanning est déjà activée, utilisez la commandeibmcloud ks vlan spanning get --region REGION. Vous pouvez ensuite ajouter de nouveaux noeuds worker au cluster qui utilise l'autre VLAN avec les sous-réseaux disponibles. Créez au moins deux nœuds de travail par zone. Désormais, les adresses IP sont disponibles pour que les contrôleurs Ingress puissent se déployer automatiquement.

Option 3: si vous n'utilisez pas tous les sous-réseaux du VLAN, vous pouvez réutiliser les sous-réseaux de ce VLAN en les ajoutant à votre cluster.

  1. Vérifie que le sous-réseau que vous voulez utiliser est disponible. Le compte d'infrastructure que vous utilisez peut être partagé entre plusieurs comptes IBM Cloud. Dans ce cas, même si vous exécutez la commande ibmcloud oc subnets pour voir les sous-réseaux avec les clusters liés (Bound Clusters), vous ne pourrez voir que les informations concernant vos clusters. Vérifiez avec le propriétaire du compte d'infrastructure que les sous-réseaux sont disponibles et qu'ils ne sont pas utilisés par un autre compte ou une autre équipe.

  2. Utilisez la commande ibmcloud ks cluster subnet add pour faire en sorte qu'un sous-réseau existant soit disponible pour votre cluster.

  3. Vérifiez que le sous-réseau a bien été créé et ajouté à votre cluster. Le CIDR du sous-réseau est répertorié dans la section Subnet VLANs.

    ibmcloud ks cluster get --cluster CLUSTER_NAME --show-resources
    

    Dans cet exemple de sortie, un deuxième sous-réseau a été ajouté au VLAN public 2234945 :

    Subnet VLANs
    VLAN ID   Subnet CIDR          Public   User-managed
    2234947   10.xxx.xx.xxx/29     false    false
    2234945   169.xx.xxx.xxx/29    true     false
    2234945   169.xx.xxx.xxx/29    true     false
    
  4. Vérifiez que les adresses IP portables du sous-réseau que vous avez ajoutées sont utilisées pour le contrôleur Ingress de votre cluster. Il peut s'écouler quelques minutes avant que les services puissent utiliser les adresses IP portables du nouveau sous-réseau.

    • Aucun sous-domaine Ingress : exécutez ibmcloud ks cluster get --cluster CLUSTER pour vérifier que le sous-domaine Ingress est renseigné.
    • Un contrôleur d'entrée ne se déploie pas dans une zone : Exécutez oc get svc -n openshift-ingress pour vérifier que le contrôleur Ingress manquant est déployé avec une adresse IP externe.

Résolution des problèmes de déploiement du service de contrôleur Ingress multi-zone

Créer un service de contrôleur Ingress dans la zone où aucun service de contrôleur Ingress n'a été déployé. Si un service de contrôleur Ingress en double a été initialement créé dans une zone différente, ne supprimezpas ce service.

  1. Créez un fichier YAML pour un service de contrôleur Ingress dans la zone où aucun service de contrôleur Ingress n'a été déployé. Nommez le service de contrôleur Ingressrouter-<zone>.

     apiVersion: v1
     kind: Service
     metadata:
       annotations:
         service.kubernetes.io/ibm-load-balancer-cloud-provider-ip-type: public
       finalizers:
       - service.kubernetes.io/load-balancer-cleanup
       labels:
         app: router
         ingresscontroller.operator.openshift.io/owning-ingresscontroller: default
         router: router-default
       name: router-<zone>
       namespace: openshift-ingress
     spec:
       externalTrafficPolicy: Cluster
       selector:
         ingresscontroller.operator.openshift.io/deployment-ingresscontroller: default
       sessionAffinity: None
       type: LoadBalancer
    
  2. Créez le service de contrôleur Ingress dans votre cluster.

    oc create -f router-<zone>.yaml
    
  3. Vérifiez que le service de contrôleur Ingress est créé dans la zone appropriée. Dans la sortie, obtenez l'adresse EXTERNAL IP.

    oc get svc router-<zone> -n openshift-ingress
    

    Exemple de sortie

    NAME                         TYPE           CLUSTER-IP       EXTERNAL-IP     PORT(S)                      AGE
    router-dal12                 LoadBalancer   172.21.57.132    169.XX.XX.XX    80/TCP,443/TCP,1940/TCP      3m
    
  4. Obtenez le sous-domaine pour votre contrôleur Ingress par défaut. Dans la sortie, recherchez le sous-domaine au format <cluster_name>-<random_hash>-0000.<region>.containers.appdomain.cloud.

    ibmcloud ks nlb-dns ls -c CLUSTER_NAME_OR_ID
    
  5. Enregistrez l'adresse IP du service de contrôleur Ingress avec le sous-domaine du contrôleur Ingress.

    ibmcloud ks nlb-dns add -c CLUSTER_NAME_OR_ID --ip ROUTER_SVC_IP --nlb-host ROUTER_SUBDOMAIN