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-defaultn'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, etdal13, vous pourriez voir un servicerouter-defaultpour etdal10unrouter-dal12service pourdal12, mais aucunrouter-dal13service pourdal13. 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 nomrouter-default, et que les services de contrôleur Ingress des zones que vous ajoutez par la suite à votre cluster portent des noms tels querouter-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.
-
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 subnetspour 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. -
Utilisez la commande
ibmcloud ks cluster subnet addpour faire en sorte qu'un sous-réseau existant soit disponible pour votre cluster. -
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-resourcesDans 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 -
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 CLUSTERpour 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-ingresspour vérifier que le contrôleur Ingress manquant est déployé avec une adresse IP externe.
- Aucun sous-domaine Ingress : exécutez
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.
-
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 Ingress
router-<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 -
Créez le service de contrôleur Ingress dans votre cluster.
oc create -f router-<zone>.yaml -
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-ingressExemple 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 -
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 -
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