Klassische Cluster: Warum wird der Ingress-Controller nicht in einer Zone bereitgestellt?
Infrastrukturprovider und Version:
- Klassisch
- Red Hat OpenShift Version 4
Wenn Sie oc get svc -n openshift-ingress ausführen, verfügt mindestens eine Zone über keinen öffentlichen Ingress-Controller.
- Der Service
router-defaultwurde nicht bereitgestellt oder der Service verfügt möglicherweise nicht über eine externe IP-Adresse. In einem Einzelzonencluster wird möglicherweise Folgendes angezeigt: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 - Wenn Sie über einen Cluster mit mehreren Zonen verfügen, verfügt eine Zone über keinen Ingress-Controllerservice. Beispiel: In einem Multizonen-Cluster mit Worker-Knoten in
dal10,dal12, und könnten Sie einen Dienstrouter-defaultfür unddal10einenrouter-dal12Dienst für sehendal13``dal12, jedoch keinenrouter-dal13Dienst fürdal13. Beachten Sie, dass der Ingress-Controller-Dienst in der ersten Zone, in der sich Ihre Worker-Knoten befinden, immer den Namen trägtrouter-default, während Ingress-Controller-Dienste in den Zonen, die Sie Ihrem Cluster später hinzufügen, Namen wie habenrouter-dal12. Möglicherweise sehen Sie auch, dass eine Zone über keinen Ingress-Controllerservice verfügt, aber eine andere Zone über mindestens zwei Ingress-Controllerservices.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
Router-Services werden aus einem der folgenden Gründe bereitgestellt:
-
Wenn keine Ingress-Controllerservices bereitgestellt werden oder den Ingress-Controllerservices keine externe IP-Adresse zugeordnet ist: In Standardclustern werden bei der ersten Erstellung eines Clusters in einer Zone automatisch ein öffentliches VLAN und ein privates VLAN in dieser Zone für Sie in Ihrem IBM Cloud-Infrastrukturkonto bereitgestellt. In dieser Zone wird ein öffentliches portables Subnetz auf dem von Ihnen angegebenen öffentlichen VLAN und ein privates portables Subnetz auf dem von Ihnen angegebenen privaten VLAN angefordert. Bei Red Hat OpenShift on IBM Cloud gilt für VLANs ein Limit von 40 Teilnetzen. Wenn das VLAN des Clusters in einer Zone diese Grenze bereits erreicht hat, schlägt die Bereitstellung der Ingress-Subdomain fehl, und die Bereitstellung des standardmäßigen öffentlichen Ingress-Controllers schlägt ebenfalls fehl. Um anzuzeigen, wie viele Subnetze ein VLAN umfasst, wählen Sie in der Infrastrukturkonsole von IBM Cloud die Option Netzwerk > IP-Verwaltung > VLANs aus. Klicken Sie auf die VLAN-Nummer des VLANs, mit dem Sie Ihren Cluster erstellt haben. Überprüfen Sie den Abschnitt Teilnetze, um zu sehen, ob mehr als 40 Teilnetze vorhanden sind.
-
Wenn eine Zone über keinen Ingress-Controllerservice verfügt: Wenn Ihre Ingress-Controllerservices erstellt werden, werden sie automatisch auf die Zonen in Ihrem Cluster verteilt. Wenn das Netz für die erste Zone, mit der Ihr Cluster erstellt wurde, beim Erstellen der Ingress-Controllerservices nicht bereit ist, wird der Ingress-Controllerservice für diese Zone möglicherweise in einer anderen Zone platziert. In einer Zone können zwei Ingress-Controllerservices erstellt werden und in der ursprünglichen Zone wird kein Ingress-Controllerservice erstellt.
Beheben Sie VLAN-Probleme für Ingress-Controllerservices, die über keine IP-Adresse verfügen, oder Probleme mit dem Ingress-Controllerservice für mehrere Zonen ohne Ingress-Controllerservices.
VLAN-Probleme beheben
So beheben Sie VLAN-Probleme für Ingress-Controllerservices ohne IP-Adresse:
Option 1: Wenn Sie ein neues VLAN benötigen, bestellen Sie dieses, indem Sie sich an den IBM Cloud-Support wenden. Erstellen Sie dann einen Cluster, der dieses neue VLAN verwendet.
Option 2: Wenn Ihnen ein weiteres VLAN zur Verfügung steht, können Sie in Ihrem bestehenden Cluster ein VLAN-Spanning einrichten. Um zu überprüfen, ob VLAN-Spanning
bereits aktiviert ist, verwenden Sie den Befehlibmcloud ks vlan spanning get --region REGION. Anschließend können Sie dem Cluster neue
Workerknoten hinzufügen, die das andere VLAN mit verfügbaren Teilnetzen verwenden. Erstellen Sie mindestens zwei Worker-Knoten pro Zone. Jetzt sind IP-Adressen verfügbar, sodass die Ingress-Controller automatisch bereitgestellt werden können.
Option 3: Wenn Sie nicht alle Subnetze im VLAN nutzen, können Sie Subnetze im VLAN wiederverwenden, indem Sie sie Ihrem Cluster hinzufügen.
-
Prüfen Sie, ob das Teilnetz, das Sie verwenden möchten, verfügbar ist. Das Infrastrukturkonto, das Sie verwenden, wird möglicherweise von mehreren IBM Cloud-Konten gemeinsam verwendet. In diesem Fall können Sie nur Informationen zu Ihren Clustern anzeigen, selbst wenn Sie den Befehl
ibmcloud oc subnetsausführen, um Teilnetze mit gebundenen Clustern zu sehen. Besprechen Sie sich mit dem Eigner des Infrastrukturkontos, um sicherzustellen, dass die Teilnetze verfügbar sind und nicht von einem anderen Konto oder Team verwendet werden. -
Verwenden Sie den Befehl
ibmcloud ks cluster subnet add, um ein vorhandenes Teilnetz für Ihren Cluster verfügbar zu machen. -
Überprüfen Sie, ob das Teilnetz erfolgreich erstellt und zu Ihrem Cluster hinzugefügt wurde. Das Teilnetz-CIDR wird im Abschnitt für Teilnetz-VLANs aufgeführt.
ibmcloud ks cluster get --cluster CLUSTER_NAME --show-resourcesIn dieser Beispielausgabe wurde dem öffentlichen VLAN
2234945ein zweites Teilnetz hinzugefügt: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 -
Bestätigen Sie, dass die portierbaren IP-Adressen aus dem Teilnetz, das Sie hinzugefügt haben, für den Ingress-Controller in Ihrem Cluster verwendet werden. Es kann einige Minuten dauern, bis die Services die portierbaren IP-Adressen aus dem neuen Teilnetz verwenden.
- Keine Ingress-Unterdomäne: Führen Sie
ibmcloud ks cluster get --cluster CLUSTERaus, um zu überprüfen, ob Ingress-Unterdomäne gefüllt ist. - Ein Ingress-Controller wird nicht in einer Zone bereitgestellt: Führen Sie
oc get svc -n openshift-ingressaus, um sicherzustellen, dass der fehlende Ingress-Controller mit einer externen IP-Adresse bereitgestellt wird.
- Keine Ingress-Unterdomäne: Führen Sie
Probleme bei der Bereitstellung des Ingress-Controllerservice für mehrere Zonen beheben
Erstellen Sie einen Ingress-Controller-Dienst in der Zone, in der noch kein Ingress-Controller-Dienst bereitgestellt wurde. Wenn ein doppelter Ingress-Controllerservice anfänglich in einer anderen Zone erstellt wurde, löschen Sie diesen Ingress-Controllerservice nicht.
-
Erstellen Sie eine YAML-Datei für einen Ingress-Controller-Dienst in der Zone, in der kein Ingress-Controller-Dienst bereitgestellt wurde. Geben Sie dem Ingress-Controllerservice den Namen
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 -
Erstellen Sie den Ingress-Controllerservice in Ihrem Cluster.
oc create -f router-<zone>.yaml -
Bestätigen Sie, dass der Ingress-Controllerservice in der richtigen Zone erstellt wurde. Rufen Sie in der Ausgabe die externe IP-Adresse (EXTERNAL IP) ab.
oc get svc router-<zone> -n openshift-ingressBeispielausgabe
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 -
Rufen Sie die Unterdomäne für Ihren Ingress-Standardcontroller ab. Suchen Sie in der Ausgabe nach der Unterdomäne, die wie
<cluster_name>-<random_hash>-0000.<region>.containers.appdomain.cloudformatiert ist.ibmcloud ks nlb-dns ls -c CLUSTER_NAME_OR_ID -
Registrieren Sie die IP-Adresse des Ingress-Controllerservice bei der Unterdomäne Ihres Ingress-Controllers.
ibmcloud ks nlb-dns add -c CLUSTER_NAME_OR_ID --ip ROUTER_SVC_IP --nlb-host ROUTER_SUBDOMAIN