IBM Cloud Docs
Apps über Routen in Red Hat OpenShift 4 zugänglich machen

Apps über Routen in Red Hat OpenShift 4 zugänglich machen

Machen Sie Services in Ihrem Cluster mit Red Hat® OpenShift® on IBM Cloud® unter der externen IP-Adresse des Routers zugänglich, indem Sie ein Route verwenden.

Diese Informationen gelten für Cluster, auf denen Red Hat OpenShift Version 4 ausgeführt wird.

Sie wissen nicht, ob Sie Red Hat OpenShift-Routen oder Ingress verwenden sollen? Lesen Sie in diesem Fall die Informationen unter Lastausgleichslösung auswählen.

Übersicht

Standardmäßig wird ein Red Hat OpenShift Ingress-Controller in Ihrem Cluster bereitgestellt, der als Ingress-Endpunkt für externen Netzwerkverkehr fungiert.

Sie können den Red Hat OpenShift Ingress-Controller verwenden, um Routen für Ihre Anwendungen zu erstellen. Routen wird ein öffentlich oder privat zugänglicher Hostname aus der Unterdomäne des Ingress-Controllers zugeordnet, den externe Clients zum Senden von Anforderungen an Ihre App verwenden können. Sie können nicht gesicherte oder gesicherte Routen erstellen, indem Sie das TLS-Zertifikat des Ingress-Controllers zum Sichern Ihres Hostnamens verwenden. Wenn externe Anforderungen Ihren Hostnamen erreichen, vermittelt der Ingress-Controller Ihre Anfrage und leitet sie an die private IP-Adresse weiter, auf der Ihre App empfangsbereit ist.

Welcher Typ von Ingress-Controller standardmäßig erstellt wird, hängt vom Infrastrukturprovider Ihres Clusters und von der Konfiguration Ihres Serviceendpunkts ab.

  • Klassische Cluster / VPC-Cluster mit öffentlichem Cloud-Service-Endpunkt: Ihr Cluster wird standardmäßig mit einem öffentlichen Ingress-Controller erstellt. Der Ingress-Controller weist öffentlich zugängliche Routen für Ihre Apps zu und ist empfangsbereit für Anforderungen an Ihre Apps in der öffentlichen Hostnetzschnittstelle. Wenn eine Anforderung empfangen wird, leitet der Ingress-Controller die Anforderung an die private IP-Adresse, an der die App empfangsbereit ist. Wenn Sie Ihre Apps privat zugänglich machen möchten, müssen Sie zuerst einen privaten Ingress-Controller und anschließend private Routen erstellen.
  • VPC-Cluster nur mit privatem Cloud-Service-Endpunkt: Ihr Cluster wird standardmäßig mit einem privaten Ingress-Controller erstellt. Der Ingress-Controller ordnet privat zugängliche Routen für Ihre Apps zu und überwacht die Netzschnittstelle des privaten Hosts. Nur Clients, die mit Ihrem privaten VPC-Netz verbunden sind, können auf Apps zugreifen, die von einer privaten Route zugänglich gemacht werden. Wenn Sie Ihre Apps öffentlich zugänglich machen möchten, müssen Sie zuerst einen öffentlichen Ingress-Controller und anschließend öffentliche Routen erstellen.

Wenn Sie über einen Cluster mit mehreren Zonen verfügen, wird in Ihrem Cluster ein Ingress-Hochverfügbarkeitscontroller bereitgestellt und in jeder Zone wird ein Ingress-Controllerservice erstellt. Pro Zone sind zwei Workerknoten erforderlich, sodass die beiden Replikate des Ingress-Controllers ordnungsgemäß bereitgestellt und aktualisiert werden können. Beachten Sie, dass der Ingress-Controllerservice in der ersten Zone, in der Sie über Workerknoten verfügen, immer den Namen router-default hat und Ingress-Controllerservices in den Zonen, die Sie später zu Ihrem Cluster hinzufügen, Namen wie router-dal12 haben.

  • Führen Sie oc get svc -n openshift-ingress aus, um die Ingress-Controllerservices in jeder Zone Ihres Clusters anzuzeigen.
  • Um die Unterdomäne des Ingress-Controllers für Ihren Cluster und die IP-Adressen für den Ingress-Controllerservice in jeder Zone anzuzeigen, führen Sie ibmcloud oc nlb-dns ls -c <cluster_name_or_ID> aus und suchen Sie nach der Unterdomäne, die wie <cluster_name>-<random_hash>-0000.<region>.containers.appdomain.cloud formatiert ist.

In Ihrem Dashboard für die VPC-Infrastruktur meldet die VPC-Lastausgleichsfunktion nur die beiden Workerknoten in einwandfreiem Zustand, auf denen die Replikate des Ingress-Controllers ausgeführt werden, da diese Workerknoten als Listener für die VPC-Lastausgleichsfunktion konfiguriert sind. Obwohl nur für die Listener-Workerknoten ein einwandfreier Zustand gemeldet wird, wird der Back-End-Pool des Listeners mit Workerknoten von Red Hat OpenShift on IBM Cloud aktuell gehalten, sodass alle Workerknoten in Ihrem Cluster weiterhin Anforderungen von der VPC-Lastausgleichsfunktion empfangen können.

Datenfluss in einem klassischen Einzelzonencluster

Das folgende Diagramm zeigt, wie ein Router Netzverkehr vom Internet an eine App in einem klassischen Einzelzonencluster überträgt.

Eine Anwendung in einem Cluster mit einer einzigen Zone Red Hat OpenShift mit Hilfe eines
bereitstellen*Eine Anwendung in einem Cluster mit einer einzigen Zone mit Hilfe eines Routers

  1. Eine Anforderung an Ihre App verwendet den Hostnamen für die Route, den Sie für Ihre App festgelegt haben.

  2. Ein DNS-Service löst die Unterdomäne in die portierbare öffentliche IP-Adresse eines Router-Service auf.

  3. Der Router empfängt die Anforderung und leitet sie über das private Netz an die private IP-Adresse des App-Pods weiter. Die Quellen-IP-Adresse des Anforderungspakets wird in die öffentliche IP-Adresse des Workerknotens geändert, auf dem der Router-Pod ausgeführt wird. Wenn mehrere App-Instanzen im Cluster bereitgestellt werden, sendet der Router die Anforderungen zwischen den App-Pods.

  4. Wenn die App ein Antwortpaket zurückgibt, verwendet sie die IP-Adresse des Workerknotens, auf dem sich der Router, der die Clientanforderung weitergeleitet hat, befindet. Der Router sendet daraufhin das Antwortpaket über den Lastausgleichsservice an den Client.

Datenfluss in einem klassischen Mehrzonencluster

Das folgende Diagramm zeigt, wie ein Router den Netzverkehr vom Internet an eine App in einem klassischen Cluster mit mehreren Zonen überträgt.

Eine Anwendung in einem Red Hat OpenShift Cluster über einen
bereitstellen*Eine Anwendung in einem Multizonen-Cluster über einen Router

  1. Eine Anforderung an Ihre App verwendet den Hostnamen für die Route, den Sie für Ihre App festgelegt haben.

  2. Ein DNS-Service löst die Routenunterdomäne in die portierbare öffentliche IP-Adresse eines Router-Service auf, der von der MZLB (Mehrzonenlastausgleichsfunktion) als in einwandfreiem Zustand gemeldet wurde. Die MZLB überprüft fortlaufend die portierbaren öffentlichen IP-Adressen der Services, die den Router in jeder Zone Ihres Clusters zugänglich machen. Anforderungen werden von den Router-Services in verschiedenen Zonen in einem Umlaufzyklus bearbeitet.

  3. Nach Auflösung der IP-Adresse des Routerservice empfängt der Router die Anforderung.

  4. Der Router leitet die Anforderung über das private Netz an die private IP-Adresse des App-Pods weiter. Die Quellen-IP-Adresse des Anforderungspakets wird in die öffentliche IP-Adresse des Workerknotens geändert, auf dem der Router-Pod ausgeführt wird. Jeder Router sendet Anforderungen an die App-Instanzen in der eigenen Zone und an App-Instanzen in anderen Zonen weiter. Wenn mehrere App-Instanzen in einer Zone bereitgestellt sind, alterniert der Router Anforderungen zwischen den App-Pods.

  5. Wenn die App ein Antwortpaket zurückgibt, verwendet sie die IP-Adresse des Workerknotens, auf dem sich der Router, der die Clientanforderung weitergeleitet hat, befindet. Der Router sendet daraufhin das Antwortpaket über den Lastausgleichsservice an den Client.

Datenfluss in einem VPC-Mehrzonencluster mit Public-Cloud-Serviceendpunkt

Wenn Sie einen VPC-Cluster mit mehreren Zonen mit aktiviertem öffentlichen Cloud-Serviceendpunkt erstellen, wird standardmäßig ein öffentlicher Ingress-Controller erstellt. Der Ingress-Controller weist öffentlich zugängliche Routen für Ihre Apps zu und ist empfangsbereit für Anforderungen an Ihre Apps in der öffentlichen Hostnetzschnittstelle.

Das folgende Diagramm zeigt, wie ein Ingress-Controller den Netzverkehr aus dem Internet an eine App in einem VPC-Cluster mit mehreren Zonen überträgt.

Eine Anwendung in einem VPC-Cluster mit mehreren Zonen mit Hilfe eines
bereitstellen*Eine Anwendung in einem VPC-Cluster mit mehreren Zonen mit Hilfe eines Ingress-Controllers

  1. Eine Anforderung an Ihre App verwendet den Hostnamen für die Route, den Sie für Ihre App festgelegt haben.

  2. Ein DNS-Service löst die Routenunterdomäne in den Hostnamen der VPC-Lastausgleichsfunktion auf, der den Services für den Ingress-Controller zugeordnet ist. In VPC-Clustern sind die externen IP-Adressen Ihrer Ingress-Controller-Services variabel und werden hinter einem von VPC zugewiesenen Hostnamen aufbewahrt.

  3. Die VPC-Lastausgleichsfunktion löst den VPC-Hostnamen in eine verfügbare externe IP-Adresse eines Ingress-Controllerservice auf, der als in einwandfreiem Zustand gemeldet wurde. Die VPC-Lastausgleichsfunktion überprüft kontinuierlich die externen IP-Adressen der Services, die den Ingress-Controller in jeder Zone in Ihrem Cluster zugänglich machen.

  4. Basierend auf der aufgelösten IP-Adresse sendet die VPC-Lastausgleichsfunktion die Anforderung an einen Ingress-Controllerservice.

  5. Der Ingress-Controller leitet die Anforderung über das private Netz an die private IP-Adresse des App-Pods weiter. Die Quellen-IP-Adresse des Anforderungspakets wird in die IP-Adresse des Workerknotens geändert, auf dem der Pod des Ingress-Controllers ausgeführt wird. Jeder Ingress-Controller sendet Anforderungen an die App-Instanzen in seiner eigenen Zone und an App-Instanzen in anderen Zonen. Wenn mehrere App-Instanzen in einer Zone bereitgestellt werden, alterniert der Ingress-Controller zusätzlich Anforderungen zwischen App-Pods.

  6. Wenn die App ein Antwortpaket zurückgibt, verwendet sie die IP-Adresse des Workerknotens, auf dem sich der Ingress-Controller befindet, der die Clientanforderung weitergeleitet hat. Der Ingress-Controller sendet dann das Antwortpaket über die VPC-Lastausgleichsfunktion an den Client.

Datenfluss in einem VPC-Mehrzonencluster nur mit Private-Cloud-Serviceendpunkt

Wenn Sie einen VPC-Cluster mit mehreren Zonen nur mit dem privaten Cloud-Serviceendpunkt erstellen, wird standardmäßig ein privater Ingress-Controller erstellt. Der Ingress-Controller ordnet privat zugängliche Routen für Ihre Apps zu und überwacht die Netzschnittstelle des privaten Hosts. Nur Clients, die mit Ihrem privaten VPC-Netz verbunden sind, können auf Apps zugreifen, die von einer privaten Route zugänglich gemacht werden.

Das folgende Diagramm zeigt, wie ein Ingress-Controller den Netzverkehr von privaten Netzen an eine App in einem VPC-Cluster mit mehreren Zonen überträgt.

Eine Anwendung in einem privaten VPC-Cluster mit mehreren Zonen mit Hilfe eines Ingress-Controllers bereitstellen
Eine Anwendung in einem privaten VPC-Cluster mit mehreren Zonen mit Hilfe eines Ingress-Controllers bereitstellen

  1. Ein Client, der mit Ihrem privaten VPC-Netz verbunden ist, sendet mithilfe der privaten Route der App eine Anforderung an Ihre App. Sie können zum Beispiel die Virtual Private Cloud VPN, IBM Cloud Transit Gateway oder IBM Cloud Direct Link verwenden, um Anforderungen von einem lokalen Netz, einer anderen VPC oder klassischen IBM Cloud-Infrastruktur an Apps zuzulassen, die in Ihrem Cluster ausgeführt werden.

  2. Ein DNS-Service löst die Routenunterdomäne in den Hostnamen der VPC-Lastausgleichsfunktion auf, der den Services für den Ingress-Controller zugeordnet ist. In VPC-Clustern sind die IP-Adressen der Ingress-Controllerservices variabel und werden hinter einem von VPC zugewiesenen Hostnamen aufbewahrt. Beachten Sie, dass der DNS-Datensatz für die Route-Unterdomäne zwar im öffentlichen DNS-System registriert ist, die Server für die DNS-Auflösung aber auch von der VPC erreichbar sein müssen.

  3. Die private VPC-Lastausgleichsfunktion löst den VPC-Hostnamen in eine verfügbare private IP-Adresse eines Ingress-Controllerservice auf, der als in einwandfreiem Zustand gemeldet wurde. Die VPC-Lastausgleichsfunktion überprüft kontinuierlich die IP-Adressen der Services, die den Ingress-Controller in jeder Zone in Ihrem Cluster zugänglich machen.

  4. Basierend auf der aufgelösten IP-Adresse sendet die VPC-Lastausgleichsfunktion die Anforderung an einen Ingress-Controllerservice.

  5. Der Ingress-Controller leitet die Anforderung über das private Netz an die private IP-Adresse des App-Pods weiter. Die Quellen-IP-Adresse des Anforderungspakets wird in die IP-Adresse des Workerknotens geändert, auf dem der Pod des Ingress-Controllers ausgeführt wird. Jeder Ingress-Controller sendet Anforderungen an die App-Instanzen in seiner eigenen Zone und an App-Instanzen in anderen Zonen. Wenn mehrere App-Instanzen in einer Zone bereitgestellt werden, alterniert der Ingress-Controller zusätzlich Anforderungen zwischen App-Pods.

  6. Wenn die App ein Antwortpaket zurückgibt, verwendet sie die IP-Adresse des Workerknotens, auf dem sich der Ingress-Controller befindet, der die Clientanforderung weitergeleitet hat. Der Ingress-Controller sendet das Antwortpaket dann über die VPC-Lastausgleichsfunktion und über die IBM Cloud VPC-VPN, Transit Gateway oder Direct Link an den Client.

Routentypen und TLS-Terminierung

Red Hat OpenShift bietet je nach dem für Ihre App erforderlichen Typ der TLS-Terminierung vier verschieden Routentypen an. Jeder Routentyp wird für öffentliche und private Routen unterstützt.

Routentypen nach TLS-Terminierung
Routentyp Anwendungsfall
Einfach Wenn Sie die TLS-Verschlüsselung nicht benötigen, erstellen Sie eine einfache Route für die Handhabung von nicht verschlüsseltem HTTP-Datenverkehr.
Durchgriff Wenn Sie möchten, dass TLS-Verbindungen ohne Unterbrechung vom Client an Ihren App-Pod übergeben werden, erstellen Sie eine Durchgriffsroute. Der Router ist an der TLS-Terminierung für verschlüsselten HTTPS-Datenverkehr nicht beteiligt, sodass der App-Pod die TLS-Verbindung beenden muss. Dieser Typ kann auch für HTTP/2- und für Nicht-HTTP-TLS-Endpunkte verwendet werden.
Edge Wenn Ihr App-Pod auf einem nicht verschlüsselten HTTP-Endpunkt verfügbar ist, Sie jedoch den verschlüsselten HTTPS-Datenverkehr verarbeiten müssen, erstellen Sie eine Edge-Route. Die TLS-Verbindung zwischen dem Client und dem Router-Service wird beendet und die Verbindung zwischen dem Router-Service und Ihrem App-Pod wird entschlüsselt. Weitere Informationen finden Sie in der Dokumentation zur Edge-Route von Red Hat OpenShift.
Erneute Verschlüsselung Wenn Ihr App-Pod auf einem verschlüsselten HTTPS-Endpunkt verfügbar ist und Sie den HTTPS-Datenverkehr verarbeiten müssen, erstellen Sie eine Route mit erneuter Verschlüsselung. Die TLS-Verbindung zwischen dem Client und dem Router-Service wird beendet und es wird eine neue Verbindung zwischen dem Router-Service und Ihrem App-Pod erstellt. Weitere Informationen finden Sie in der Dokumentation zur Re-Encryption-Route unter Red Hat OpenShift.

Wenn Sie keine angepasste Domäne verwenden müssen, können Sie einen von IBM bereitgestellten Routenhostnamen im Format <service_name>-<project>.<cluster_name>-<random_hash>-0000.<region>.containers.appdomain.cloud verwenden.

Statusprüfungen des Ingress-Controllers

Ermöglichen Sie den Zugriff über Netzrichtlinien oder andere Firewallregeln, sodass Ihre Ingress-Controllerservices über die Statusprüfung des Ingress-Controllers erreichbar sind.

Klassisch: Wenn Sie Calico-Pre-DNAT-Netzrichtlinien oder eine andere angepasste Firewall zum Blockieren des eingehenden Datenverkehrs für Ihren Cluster verwenden, müssen Sie eingehenden Zugriff an Port 80 von der Red Hat OpenShift-Steuerebene und den IPv4-IP-Adressen von Akamai auf die IP-Adressen Ihrer Ingress-Controller-Services zulassen, damit die Red Hat OpenShift-Steuerebene den Status Ihrer Ingress-Controller überprüfen kann. Wenn Sie beispielsweise Calico Richtlinien verwenden, erstellen Sie eine Calico pre-DNAT-Richtlinie, um den eingehenden Zugriff auf Ihre Ingress-Controller von den Quell-IP-Adressen von Akamai zuzulassen, die zur Überprüfung des Zustands Ihrer Ingress-Controller auf Port 80 und den Subnetzen der Steuerungsebene für die Region, in der sich Ihr Cluster befindet, verwendet werden. Fahren Sie mit dem nächsten Schritt fort, um die IP-Adressen des Ingress-Controllerservice abzurufen.

VPC: Wenn Sie VPC-Sicherheitsgruppen oder VPC-Zugriffssteuerungslisten (Access Control Lists, ACLs) konfigurieren, um Ihr Clusternetz zu sichern, müssen Sie sicherstellen, dass Sie die Regeln erstellen, um den erforderlichen Datenverkehr über die Red Hat OpenShift IP-Adressen der Steuerebene zu ermöglichen. Alternativ können Sie eine Regel erstellen, die den gesamten eingehenden Datenverkehr an Port 80 zulässt, um den eingehenden Datenverkehr für Zustandsprüfungen des Ingress-Controllers zuzulassen.

Öffentliche Routen einrichten

Verwenden Sie einen öffentlichen Ingress-Controller, um Apps in Ihrem Cluster zugänglich zu machen.

Wie öffentliche Routen eingerichtet werden können, hängt vom Infrastrukturprovider Ihres Clusters und von Ihrem Serviceendpunkt-Setup ab.

Öffentliche Routen in klassischen Clustern oder VPC-Clustern mit Public-Cloud-Serviceendpunkt einrichten

Wenn Ihr Cluster auf einer klassischen Infrastruktur erstellt wurde oder wenn Ihr Cluster auf einer VPC-Infrastruktur erstellt wurde und Sie während der Clustererstellung den Endpunkt für den öffentlichen Cloud-Service aktiviert haben, wird Ihr Cluster standardmäßig mit einem öffentlichen Ingress-Controller erstellt. Mit diesem Ingress-Controller können Sie öffentliche Routen für Ihre App erstellen.

  1. Erstellen Sie einen Kubernetes Service ClusterIP für Ihre App-Bereitstellung. Der Service stellt eine interne IP-Adresse, an die der Ingress-Controller Datenverkehr senden kann, für die App bereit.

    oc expose deploy <app_deployment_name> --name my-app-svc
    
  2. Wählen Sie eine Domäne für Ihre App aus. Beachten Sie, dass Routen-URLs maximal 130 Zeichen lang sein dürfen. IBM-provided domain: Wenn Sie keine benutzerdefinierte Domäne verwenden müssen, wird ein Routen-Hostname im Format <service_name>-<project>.<cluster_name>-<random_hash>-0000.<region>.containers.appdomain.cloud. Angepasste Domäne: Um eine angepasste Domäne anzugeben, arbeiten Sie mit Ihrem DNS-Provider oder IBM Cloud® Internet Services.

    1. Rufen Sie die öffentliche IP-Adresse für den öffentlichen Ingress-Controllerservice in jeder Zone in der Spalte EXTERNAL-IP ab. Beachten Sie, dass der Ingress-Controllerservice in der ersten Zone, in der Sie über Workerknoten verfügen, immer den Namen router-default hat und Ingress-Controllerservices in den Zonen, die Sie später zu Ihrem Cluster hinzufügen, Namen wie router-dal12 haben.

      oc get svc -n openshift-ingress
      
    2. Erstellen Sie eine angepasste Domäne mit Ihrem DNS-Provider. Wenn Sie dieselbe Unterdomäne für mehrere Services in Ihrem Cluster verwenden wollen, können Sie eine Platzhalterunterdomäne wie beispielsweise *.example.com registrieren.

    3. Ordnen Sie Ihre angepasste Domäne der öffentlichen IP-Adresse des Ingress-Controllers zu, indem Sie die IP-Adresse als A-Datensatz hinzufügen.

  3. Richten Sie eine Route entsprechend dem Typ der von Ihrer App erforderten TLS-Terminierung ein. Wenn Sie keine benutzerdefinierte Domäne haben, lassen Sie die Option --hostname weg. Ein Routenhostname wird für Sie im Format <service_name>-<project>.<cluster_name>-<random_hash>-0000.<region>.containers.appdomain.cloud generiert. Wenn Sie eine Platzhalterunterdomäne registriert haben, geben Sie in jeder erstellten Route eine eindeutige Unterdomäne an. Beispielsweise können Sie in dieser Route --hostname svc1.example.com und in einer anderen Route --hostname svc2.example.com angeben.

    • Einfach:
      oc expose service <app_service_name> [--hostname <subdomain>]
      
    • Passthrough:
      oc create route passthrough --service <app_service_name> [--hostname <subdomain>]
      
      Müssen HTTP/2-Verbindungen verarbeitet werden? Nachdem Sie die Route erstellt haben, führen Sie oc edit route <app_service_name> aus und ändern Sie den targetPort-Wert der Route in https. Sie können die Route testen, indem Sie curl -I --http2 https://<route> --insecure ausführen.
    • Rand: Wenn Sie eine benutzerdefinierte Domäne verwenden, fügen Sie die Optionen --hostname, --cert und --key sowie optional die Option --ca-cert hinzu. Weitere Informationen zu den Anforderungen an TLS-Zertifikate finden Sie in der Dokumentation Red Hat OpenShift edge route.
      oc create route edge --service <app_service_name> [--hostname <subdomain> --cert <tls.crt> --key <tls.key> --ca-cert <ca.crt>]
      
    • Neu verschlüsseln: Wenn Sie eine benutzerdefinierte Domäne verwenden, fügen Sie die Optionen --hostname, --cert und --key sowie optional die Option --ca-cert hinzu. Weitere Informationen zu den Anforderungen an TLS-Zertifikate finden Sie in der Dokumentation Red Hat OpenShift re-encrypt route.
      oc create route reencrypt --service <app_service_name> --dest-ca-cert <destca.crt> [--hostname <subdomain> --cert <tls.crt> --key <tls.key> --ca-cert <ca.crt>]
      
  4. Vergewissern Sie sich, dass die Route für Ihren App-Service erstellt wurde.

    oc get routes
    
  5. Optional: Passen Sie die Standard-Routing-Regeln mit optionalen Konfigurationen an. Sie können zum Beispiel streckenspezifische HAProxy Anmerkungen verwenden.

Öffentliche Routen in VPC-Clustern nur mit einem Private-Cloud-Serviceendpunkt einrichten

Wenn Ihr Cluster in der VPC-Infrastruktur erstellt wird und Sie während der Clustererstellung nur den privaten Cloud-Serviceendpunkt aktiviert haben, wird Ihr Cluster standardmäßig nur mit einem privaten Router erstellt. Um Ihre Apps öffentlich zugänglich zu machen, müssen Sie zuerst eine öffentliche IngressController-Ressource erstellen und diese mit einer Unterdomäne konfigurieren. Der Ingress-Operator erstellt und konfiguriert automatisch einen neuen öffentlichen Ingress-Controller auf der Basis des IngressControllers, mit dem Sie öffentliche Routen für Ihre Apps erstellen können.

Beachten Sie, dass auch wenn Sie in den folgenden Schritten eine IngressController-Ressource erstellen, der IngressController nur zum Erstellen und Konfigurieren des erforderlichen Ingress-Controllers erforderlich ist. Nach der Erstellung des Ingress-Controllers verwenden Sie den Ingress-Controller direkt zum Erstellen von Routen.

  1. Bereiten Sie die Domäne vor, die Sie für Ihren Ingress-Controller verwenden wollen.

    • Angepasste Domäne: Arbeiten Sie mit Ihrem DNS-Provider (Domain Name Service) oder IBM Cloud-DNS, um eine angepasste Domäne zu registrieren. Wenn Sie dieselbe Unterdomäne für mehrere Services in Ihrem Cluster verwenden wollen, können Sie eine Platzhalterunterdomäne wie beispielsweise *.example.com registrieren. Wenn Sie eine angepasste Domäne verwenden, müssen Sie auch das Domänenzertifikat in Ihrer IngressController-Spezifikation angeben. Weitere Informationen finden Sie unter Angepasstes Standardzertifikat festlegen.
    • Von IBM bereitgestellte Domäne:
      1. Listen Sie die vorhandenen Unterdomänen in Ihrem Cluster auf. Kopieren Sie in der Spalte Unterdomäne der Ausgabe die Unterdomäne mit dem höchsten 000<n>-Wert.
        ibmcloud oc nlb-dns ls --cluster <cluster_name_or_id>
        
        In dieser Beispielausgabe hat die Unterdomäne mycluster-a1b2cdef345678g9hi012j3kl4567890-0002.us-south.containers.appdomain.cloud den höchsten 000<n>-Wert von 0002.
        Subdomain                                                                               Load Balancer Hostname                        Health Monitor   SSL Cert Status           SSL Cert Secret Name
        mycluster-a1b2cdef345678g9hi012j3kl4567890-0000.us-south.containers.appdomain.cloud     ["1234abcd-us-south.lb.appdomain.cloud"]      None             created                   mycluster-a1b2cdef345678g9hi012j3kl4567890-0000
        mycluster-a1b2cdef345678g9hi012j3kl4567890-0001.us-south.containers.appdomain.cloud     ["5678efgh-us-south.lb.appdomain.cloud"]      None             created                   mycluster-a1b2cdef345678g9hi012j3kl4567890-0001
        mycluster-a1b2cdef345678g9hi012j3kl4567890-0002.us-south.containers.appdomain.cloud     ["9012ijkl-us-south.lb.appdomain.cloud"]      None             created                   mycluster-a1b2cdef345678g9hi012j3kl4567890-0002
        
      2. Ändern Sie in der kopierten Unterdomäne den 000<n>-Wert in der Unterdomäne auf 000<n+1>. Zum Beispiel wird die Subdomain mycluster-a1b2cdef345678g9hi012j3kl4567890-0002.us-south.containers.appdomain.cloud in mycluster-a1b2cdef345678g9hi012j3kl4567890-0003.us-south.containers.appdomain.cloud geändert. Diese Unterdomäne werden Sie in späteren Schritten registrieren.
  2. Erstellen Sie eine YAML-Datei, die einen öffentlichen Ingress-Controller mit der Domäne aus Schritt 1 konfiguriert.

    apiVersion: operator.openshift.io/v1
    kind: IngressController
    metadata:
      name: public
      namespace: openshift-ingress-operator
    spec:
      # defaultCertificate: If you are using a custom domain, specify the domain certificate
        # name: custom-certs-default
      replicas: 2
      domain: <domain>
      endpointPublishingStrategy:
        loadBalancer:
          scope: External
        type: LoadBalancerService
    
  3. Erstellen Sie die IngressController-Ressource im openshift-ingress-operator-Namensbereich Ihres Clusters. Wenn Sie den IngressController erstellen, wird automatisch ein öffentlicher Ingress-Controller erstellt und im openshift-ingress-Namensbereich basierend auf den IngressController-Einstellungen bereitgestellt. Außerdem wird ein Ingress-Controllerservice erstellt, um den Ingress-Controller zugänglich zu machen.

    oc create -f public.yaml -n openshift-ingress-operator
    
  4. Rufen Sie den VPC-Hostnamen aus dem Feld EXTERNAL IP des Service router-public ab. In VPC-Clustern sind die externen IP-Adressen Ihrer Router-Services variabel und werden stattdessen hinter einem von der VPC zugeordneten Hostnamen verborgen.

    oc get svc router-public -n openshift-ingress
    

    Beispielausgabe

    NAME                         TYPE           CLUSTER-IP       EXTERNAL-IP                             PORT(S)                      AGE
    router-public                LoadBalancer   172.21.57.132    1234abcd-us-south.lb.appdomain.cloud    80/TCP,443/TCP,1940/TCP      3m
    
  5. Registrieren Sie den VPC-Hostnamen des Service bei der in Schritt 1 ausgewählten Domäne. Dieser Schritt stellt sicher, dass die IP-Adressen Ihrer Ingress-Controller-Services, die sich hinter dem VPC-Hostnamen befinden, mit der Domäne registriert werden, die Sie für den Ingress-Controller ausgewählt haben.

    • Angepasste Domäne: Stimmen Sie mit Ihrem DNS-Provider das Hinzufügen des VPC-Hostnamens für den Service als CNAME ab, der Ihrer angepassten Domäne zugeordnet wird.

    • Von IBM bereitgestellte Domäne: Erstellen Sie einen DNS-Eintrag für den VPC-Hostnamen des Service. Wenn Sie den folgenden Befehl ausführen, wird die in Schritt 2 angegebene Unterdomäne automatisch generiert und beim Ingress-Controllerservice registriert.

      ibmcloud oc nlb-dns create vpc-gen2 --cluster <cluster_name_or_ID> --lb-host <router_VPC_hostname>
      
  6. Optional: Wenn Sie das Ingress-Controller-Sharding verwenden möchten, damit bestimmte Routen von einem bestimmten Ingress-Controller verarbeitet werden, z. B. private Routen nur für einen privaten Router zugelassen werden, dann können Sie entweder Routenbezeichnungen oder Namensbereichsbezeichnungen verwenden, um die Sharding-Methode anzugeben. Um den Selektor während der Erstellungszeit hinzuzufügen, schließen Sie ihn in die ingresscontroller-YAML unter spec ein. Wenn Sie beispielsweise zulassen möchten, dass ein Ingress-Controller nur Ingress/Routen mit der Bezeichnung type=sharded verarbeitet, können Sie eine routeSelector hinzufügen. Weitere Informationen finden Sie unter Ingress-Controller-Sharding.

      routeSelector:
        matchLabels:
          type: sharded
    
    1. Um Selektoren zu einem vorhandenen Ingress-Controller hinzuzufügen, rufen Sie eine Liste der Ingress-Controller ab.

      oc get ingresscontroller -n openshift-ingress-operator
      
    2. Fügen Sie die Selektoren zu Ingress-Controllern hinzu, auf denen Sie Sharding verwenden möchten.

      oc patch  -n openshift-ingress-operator IngressController/<name>   --type='merge'   -p '{"spec":{"routeSelector":{"matchLabels":{"type":"sharded"}}}}'
      
    3. Beachten Sie, dass dem Standard-IngressController keine Selektoren hinzugefügt werden, sodass alle Routen weiterhin zum Standard-Ingress-Controller im Cluster zugelassen werden. Sie können die relevante Route oder Namensbereichsbezeichnungsselektoren verwenden, um dieses Verhalten zu ändern. Um beispielsweise den Standardrouter so anzupassen, dass Ingress/Routen mit der Bezeichnung type=sharded übersprungen werden, führen Sie den folgenden Patchbefehl aus.

      oc patch -n openshift-ingress-operator IngressController/default --type='merge'   -p '{"spec":{"routeSelector":{"matchExpressions":[{"key":"type","operator":"NotIn","values":["sharded"]}]}}}'
      

      Mehrere Routen und Ingresses im Cluster hängen vom standardmäßigen öffentlichen Ingress-Controller ab. Stellen Sie sicher, dass die Änderungen korrekt sind, bevor Sie den Standard-Ingress-Controller bearbeiten. Weitere Informationen zu finden Sie unter Ingress-Controller-Sharding.

  7. Erstellen Sie einen Kubernetes Service ClusterIP für Ihre App-Bereitstellung. Der Service stellt eine interne IP-Adresse, an die der Ingress-Controller Datenverkehr senden kann, für die App bereit.

    oc expose deploy <app_deployment_name> --name <app_service_name> -n <app_project>
    
  8. Richten Sie eine Route entsprechend dem Typ der von Ihrer App erforderten TLS-Terminierung ein. Wenn Sie die Option --hostname nicht angeben, wird der Hostname der Route für Sie im Format <app_service_name>-<app_project>.<router-subdomain> generiert.

    • Einfach:
      oc expose service <app_service_name> [--hostname <subdomain>]
      
    • Passthrough:
      oc create route passthrough --service <app_service_name> [--hostname <subdomain>]
      
      Müssen HTTP/2-Verbindungen verarbeitet werden? Nachdem Sie die Route erstellt haben, führen Sie oc edit route <app_service_name> aus und ändern Sie den targetPort-Wert der Route in https. Sie können die Route testen, indem Sie curl -I --http2 https://<route> --insecure ausführen.
    • Rand: Wenn Sie eine benutzerdefinierte Domäne verwenden, fügen Sie die Optionen --hostname, --cert und --key sowie optional die Option --ca-cert hinzu. Weitere Informationen zu den Anforderungen an TLS-Zertifikate finden Sie in der Dokumentation Red Hat OpenShift edge route.
      oc create route edge --service <app_service_name> [--hostname <subdomain> --cert <tls.crt> --key <tls.key> --ca-cert <ca.crt>]
      
    • Neu verschlüsseln: Wenn Sie eine benutzerdefinierte Domäne verwenden, fügen Sie die Optionen --hostname, --cert und --key sowie optional die Option --ca-cert hinzu. Weitere Informationen zu den Anforderungen an TLS-Zertifikate finden Sie in der Dokumentation Red Hat OpenShift re-encrypt route.
      oc create route reencrypt --service <app_service_name> --dest-ca-cert <destca.crt> [--hostname <subdomain> --cert <tls.crt> --key <tls.key> --ca-cert <ca.crt>]
      
  9. Vergewissern Sie sich, dass die Route für Ihre App erstellt wurde.

    oc get routes
    
  10. Optional: Passen Sie die Routing-Regeln des öffentlichen Ingress-Controllers mit optionalen Konfigurationenan. Sie können zum Beispiel streckenspezifische HAProxy Anmerkungen verwenden.

  11. Zum Erstellen von Routen für weitere Apps unter Verwendung derselben Unterdomäne können Sie die Schritte 7 bis 10 wiederholen, sodass die Route von demselben öffentlichen Ingress-Controller generiert wird. Wenn Sie Routen für weitere Apps unter Verwendung einer anderen Unterdomäne erstellen möchten, wiederholen Sie alle Schritte in diesem Abschnitt, um einen neuen öffentlichen Ingress-Controller mit einer anderen Domäne zu erstellen.

Private Routen einrichten

Verwenden Sie einen privaten Ingress-Controller, um Apps in Ihrem Cluster im privaten Netz zugänglich zu machen.

Wie private Routen eingerichtet werden können, hängt vom Infrastrukturprovider Ihres Clusters und von Ihrem Serviceendpunkt-Setup ab.

Private Routen in klassischen Clustern oder VPC-Clustern mit Public-Cloud-Serviceendpunkt einrichten

Wenn Ihr Cluster auf einer klassischen Infrastruktur erstellt wird oder wenn Ihr Cluster auf einer VPC-Infrastruktur erstellt wird und Sie während der Clustererstellung den Endpunkt für den öffentlichen Cloud-Service aktiviert haben, wird Ihr Cluster standardmäßig nur mit einem öffentlichen Ingress-Controller erstellt. Um Ihre Apps privat zugänglich zu machen, müssen Sie zuerst eine private IngressController-Ressource erstellen und den Controller mit einer Unterdomäne konfigurieren. Der Ingress-Operator erstellt automatisch einen neuen privaten Ingress-Controller, mit dem Sie private Routen für Ihre Apps erstellen können.

Beachten Sie, dass auch wenn Sie in den folgenden Schritten eine IngressController-Ressource erstellen, die IngressController-Ressource nur erforderlich ist, um den erforderlichen Ingress-Controller für Sie zu erstellen und zu konfigurieren. Nach der Erstellung des Ingress-Controllers verwenden Sie den Router direkt, um Routen zu erstellen.

  1. Bereiten Sie die Domäne vor, die Sie für Ihren Ingress-Controller verwenden wollen.

    • Angepasste Domäne in klassischen oder VPC-Clustern: Arbeiten Sie mit Ihrem DNS-Provider (Domain Name Service) oder IBM Cloud-DNS, um eine angepasste Domäne zu registrieren. Wenn Sie dieselbe Unterdomäne für mehrere Services in Ihrem Cluster verwenden wollen, können Sie eine Platzhalterunterdomäne wie beispielsweise *.example.com registrieren.
    • Von IBM bereitgestellte Domäne in VPC-Clustern:
      1. Listen Sie die vorhandenen Unterdomänen in Ihrem Cluster auf. Kopieren Sie in der Spalte Unterdomäne der Ausgabe die Unterdomäne mit dem höchsten 000<n>-Wert.
        ibmcloud oc nlb-dns ls --cluster <cluster_name_or_id>
        
        In dieser Beispielausgabe hat die Unterdomäne mycluster-a1b2cdef345678g9hi012j3kl4567890-0002.us-south.containers.appdomain.cloud den höchsten 000<n>-Wert von 0002.
        Subdomain                                                                               Load Balancer Hostname                        Health Monitor   SSL Cert Status           SSL Cert Secret Name
        mycluster-a1b2cdef345678g9hi012j3kl4567890-0000.us-south.containers.appdomain.cloud     ["1234abcd-us-south.lb.appdomain.cloud"]      None             created                   mycluster-a1b2cdef345678g9hi012j3kl4567890-0000
        mycluster-a1b2cdef345678g9hi012j3kl4567890-0001.us-south.containers.appdomain.cloud     ["5678efgh-us-south.lb.appdomain.cloud"]      None             created                   mycluster-a1b2cdef345678g9hi012j3kl4567890-0001
        mycluster-a1b2cdef345678g9hi012j3kl4567890-0002.us-south.containers.appdomain.cloud     ["9012ijkl-us-south.lb.appdomain.cloud"]      None             created                   mycluster-a1b2cdef345678g9hi012j3kl4567890-0002
        
      2. Ändern Sie in der kopierten Unterdomäne den 000<n>-Wert in der Unterdomäne auf 000<n+1>. Zum Beispiel wird die Subdomain mycluster-a1b2cdef345678g9hi012j3kl4567890-0002.us-south.containers.appdomain.cloud in mycluster-a1b2cdef345678g9hi012j3kl4567890-0003.us-south.containers.appdomain.cloud geändert. Diese Unterdomäne werden Sie in späteren Schritten registrieren.
  2. Erstellen Sie eine Konfigurationsdatei für einen privaten Ingress-Controller mit der Domäne aus Schritt 1.

    apiVersion: operator.openshift.io/v1
    kind: IngressController
    metadata:
      name: private
      namespace: openshift-ingress-operator
    spec:
      replicas: 2
      domain: <domain>
      endpointPublishingStrategy:
        loadBalancer:
          scope: Internal
        type: LoadBalancerService
    
  3. Erstellen Sie die IngressController-Ressource im openshift-ingress-operator-Namensbereich Ihres Clusters. Wenn Sie die IngressController-Ressource erstellen, wird automatisch ein privater Ingress-Controller erstellt und im openshift-ingress-Namensbereich basierend auf den IngressController-Einstellungen bereitgestellt. Außerdem wird ein Ingress-Controllerservice erstellt, um den Ingress-Controller mit einer IP-Adresse (klassische Cluster) oder einem VPC-Hostnamen (VPC-Cluster) zugänglich zu machen.

    oc create -f private.yaml -n openshift-ingress-operator
    
  4. Rufen Sie die IP-Adresse oder den VPC-Hostnamen aus dem Feld EXTERNAL IP des Service router-private ab.

    oc get svc router-private -n openshift-ingress
    

    Beispielausgabe für klassische Cluster:

    NAME                         TYPE           CLUSTER-IP       EXTERNAL-IP    PORT(S)                      AGE
    router-private               LoadBalancer   172.21.57.132    10.XX.XX.XX    80/TCP,443/TCP,1940/TCP      3m
    

    Beispielausgabe für VPC-Cluster:

    NAME                         TYPE           CLUSTER-IP       EXTERNAL-IP                             PORT(S)                      AGE
    router-private               LoadBalancer   172.21.57.132    1234abcd-us-south.lb.appdomain.cloud    80/TCP,443/TCP,1940/TCP      3m
    
  5. Registrieren Sie die externe IP-Adresse oder den VPC-Hostnamen des Service in der Domäne, die Sie in Schritt 1 ausgewählt haben.

    • Angepasste Domäne, klassische Cluster oder VPC-Cluster: Stimmen Sie mit Ihrem DNS-Provider das Hinzufügen der externen IP-Adresse des Service als A-Datensatz (klassische Cluster) oder des VPC-Hostnamens als CNAME (VPC-Cluster) ab, der Ihrer angepassten Domäne zugeordnet wird.
    • Von IBM bereitgestellte Domäne (nur VPC-Cluster): Erstellen Sie einen DNS-Eintrag für den VPC-Hostnamen des Service. Wenn Sie den folgenden Befehl ausführen, wird die in Schritt 2 angegebene Unterdomäne automatisch generiert und beim Ingress-Controllerservice registriert.
      ibmcloud oc nlb-dns create vpc-gen2 --cluster <cluster_name_or_ID> --lb-host <router_VPC_hostname>
      
  6. Optional: Wenn Sie das Ingress-Controller-Sharding verwenden möchten, damit bestimmte Routen von einem bestimmten Ingress-Controller verarbeitet werden, z. B. private Routen nur für einen privaten Router zugelassen werden, dann können Sie entweder Routenbezeichnungen oder Namensbereichsbezeichnungen verwenden, um die Sharding-Methode anzugeben. Um den Selektor während der Erstellungszeit hinzuzufügen, schließen Sie ihn in die ingresscontroller-YAML unter spec ein. Wenn Sie beispielsweise zulassen möchten, dass ein Ingress-Controller nur Ingress/Routen mit der Bezeichnung type=sharded verarbeitet, können Sie eine routeSelector hinzufügen. Weitere Informationen finden Sie unter Ingress-Controller-Sharding.

      routeSelector:
        matchLabels:
          type: sharded
    
    1. Um Selektoren zu einem vorhandenen Ingress-Controller hinzuzufügen, rufen Sie eine Liste der Ingress-Controller ab.

      oc get ingresscontroller -n openshift-ingress-operator
      
    2. Fügen Sie die Selektoren zu Ingress-Controllern hinzu, auf denen Sie Sharding verwenden möchten.

      oc patch  -n openshift-ingress-operator IngressController/<name>   --type='merge'   -p '{"spec":{"routeSelector":{"matchLabels":{"type":"sharded"}}}}'
      
    3. Beachten Sie, dass dem Standard-IngressController keine Selektoren hinzugefügt werden, sodass alle Routen weiterhin zum Standard-Ingress-Controller im Cluster zugelassen werden. Sie können die relevante Route oder Namensbereichsbezeichnungsselektoren verwenden, um dieses Verhalten zu ändern. Um beispielsweise den Standardrouter so anzupassen, dass Ingress/Routen mit der Bezeichnung type=sharded übersprungen werden, führen Sie den folgenden Patchbefehl aus.

      oc patch -n openshift-ingress-operator IngressController/default --type='merge'   -p '{"spec":{"routeSelector":{"matchExpressions":[{"key":"type","operator":"NotIn","values":["sharded"]}]}}}'
      
  7. Erstellen Sie einen Kubernetes Service ClusterIP für Ihre App-Bereitstellung. Der Service stellt eine interne IP-Adresse, an die der Ingress-Controller Datenverkehr senden kann, für die App bereit.

    oc expose deploy <app_deployment_name> --name <app_service_name> -n <app_project>
    
  8. Richten Sie eine Route entsprechend dem Typ der von Ihrer App erforderten TLS-Terminierung ein. Geben Sie den Hostnamen an, den Sie in Schritt 5 eingerichtet haben.

    • Einfach:
      oc expose service <app_service_name> --hostname <subdomain>
      
    • Passthrough:
      oc create route passthrough --service <app_service_name> --hostname <subdomain>
      
      Müssen HTTP/2-Verbindungen verarbeitet werden? Nachdem Sie die Route erstellt haben, führen Sie oc edit route <app_service_name> aus und ändern Sie den targetPort-Wert der Route in https. Sie können die Route testen, indem Sie curl -I --http2 https://<route> --insecure ausführen.
    • Edge: Wenn Sie eine benutzerdefinierte Domäne verwenden, fügen Sie die Optionen --cert und --key sowie optional die Option --ca-cert hinzu. Weitere Informationen zu den Anforderungen an TLS-Zertifikate finden Sie in der Dokumentation Red Hat OpenShift edge route.
      oc create route edge --service <app_service_name> --hostname <subdomain> [--cert <tls.crt> --key <tls.key> --ca-cert <ca.crt>]
      
    • Neu verschlüsseln: Wenn Sie eine benutzerdefinierte Domäne verwenden, fügen Sie die Optionen --cert und --key sowie optional die Option --ca-cert hinzu. Weitere Informationen zu den Anforderungen an TLS-Zertifikate finden Sie in der Dokumentation Red Hat OpenShift re-encrypt route.
      oc create route reencrypt --service <app_service_name> --dest-ca-cert <destca.crt> --hostname <subdomain> [--cert <tls.crt> --key <tls.key> --ca-cert <ca.crt>]
      
  9. Vergewissern Sie sich, dass die Route für Ihre App erstellt wurde.

    oc get routes
    
  10. Optional: Passen Sie die Routing-Regeln des privaten Ingress-Controllers mit optionalen Konfigurationenan. Sie können zum Beispiel streckenspezifische HAProxy Anmerkungen verwenden.

  11. Um Routen für weitere Apps mithilfe derselben Unterdomäne zu erstellen, können Sie die Schritte 7 bis 10 wiederholen, sodass die Route von demselben privaten Ingress-Controller generiert wird. Wenn Sie Routen für weitere Apps unter Verwendung einer anderen Unterdomäne erstellen möchten, wiederholen Sie alle Schritte in diesem Abschnitt, um einen neuen privaten Ingress-Controller zu erstellen.

Private Routen in VPC-Clustern nur mit einem Private-Cloud-Serviceendpunkt einrichten

Wenn Ihr Cluster in der VPC-Infrastruktur erstellt wird und Sie während der Clustererstellung den einzigen privaten Cloud-Serviceendpunkt aktiviert haben, wird Ihr Cluster standardmäßig mit einem privaten Ingress-Controller erstellt. Mit diesem Ingress-Controller können Sie private Routen für Ihre App erstellen.

  1. Erstellen Sie einen Kubernetes Service ClusterIP für Ihre App-Bereitstellung. Der Service stellt eine interne IP-Adresse, an die der Ingress-Controller Datenverkehr senden kann, für die App bereit.

    oc expose deploy <app_deployment_name> --name my-app-svc
    
  2. Wählen Sie eine Domäne für Ihre App aus.

    • Von IBM bereitgestellte Domäne: Wenn Sie keine angepasste Domäne benötigen, wird eine Routenunterdomäne im Format <service_name>-<project>.<cluster_name>-<random_hash>-0000.<region>.containers.appdomain.cloud generiert.
    • Angepasste Domäne: Um eine angepasste Domäne anzugeben, arbeiten Sie mit Ihrem DNS-Provider oder IBM Cloud® Internet Services.
      1. Rufen Sie die externe IP-Adresse für den privaten Ingress-Controllerservice in jeder Zone in der Spalte EXTERNAL-IP ab. Beachten Sie, dass der Ingress-Controllerservice in der ersten Zone, in der Sie über Workerknoten verfügen, immer den Namen router-default hat und Ingress-Controllerservices in den Zonen, die Sie später zu Ihrem Cluster hinzufügen, Namen wie router-dal12 haben.

        oc get svc -n openshift-ingress
        
      2. Erstellen Sie eine angepasste Domäne mit Ihrem DNS-Provider. Wenn Sie dieselbe Unterdomäne für mehrere Services in Ihrem Cluster verwenden wollen, können Sie eine Platzhalterunterdomäne wie beispielsweise *.example.com registrieren.

      3. Ordnen Sie Ihre angepasste Domäne der privaten IP-Adresse der Ingress-Controllerservices zu, indem Sie die IP-Adressen als A-Datensätze hinzufügen.

  3. Richten Sie eine Route basierend auf dem Typ der TLS-Terminierung, die Ihre App erfordert, ein. Wenn Sie keine benutzerdefinierte Domäne haben, lassen Sie die Option --hostname weg. Es wird eine Routenunterdomäne im Format <service_name>-<project>.<cluster_name>-<random_hash>-0000.<region>.containers.appdomain.cloud generiert. Wenn Sie eine Platzhalterunterdomäne registriert haben, geben Sie in jeder erstellten Route eine eindeutige Unterdomäne an. Beispielsweise können Sie in dieser Route --hostname svc1.example.com und in einer anderen Route --hostname svc2.example.com angeben.

    • Einfach:

      oc expose service <app_service_name> [--hostname <subdomain>]
      
    • Passthrough:

      oc create route passthrough --service <app_service_name> [--hostname <subdomain>]
      

      Müssen HTTP/2-Verbindungen verarbeitet werden? Nachdem Sie die Route erstellt haben, führen Sie oc edit route <app_service_name> aus und ändern Sie den targetPort-Wert der Route in https. Sie können die Route testen, indem Sie curl -I --http2 https://<route> --insecure ausführen.

    • Rand: Wenn Sie eine benutzerdefinierte Domäne verwenden, fügen Sie die Optionen --hostname, --cert und --key sowie optional die Option --ca-cert hinzu. Weitere Informationen zu den Anforderungen an TLS-Zertifikate finden Sie in der Dokumentation Red Hat OpenShift edge route.

      oc create route edge --service <app_service_name> [--hostname <subdomain> --cert <tls.crt> --key <tls.key> --ca-cert <ca.crt>]
      
    • Neu verschlüsseln: Wenn Sie eine benutzerdefinierte Domäne verwenden, fügen Sie die Optionen --hostname, --cert und --key sowie optional die Option --ca-cert hinzu. Weitere Informationen zu den Anforderungen an TLS-Zertifikate finden Sie in der Dokumentation Red Hat OpenShift re-encrypt route.

      oc create route reencrypt --service <app_service_name> --dest-ca-cert <destca.crt> [--hostname <subdomain> --cert <tls.crt> --key <tls.key> --ca-cert <ca.crt>]
      
  4. Vergewissern Sie sich, dass die Route für Ihren App-Service erstellt wurde.

    oc get routes
    
  5. Optional: Passen Sie die Standard-Routing-Regeln mit optionalen Konfigurationen an. Sie können zum Beispiel streckenspezifische HAProxy Anmerkungen verwenden.

Ingress-Controllerservices über VLANs in klassischen Clustern verschieben

Wenn Sie die VLAN-Verbindungen Ihrer Arbeitsknoten ändern, werden die Arbeitsknoten mit dem neuen VLAN verbunden und erhalten neue öffentliche oder private IP-Adressen. Ingress-Controllerservices können jedoch nicht automatisch in das neue VLAN migriert werden, da ihnen eine stabile, öffentliche oder private portierbare IP-Adresse aus einem Teilnetz des bisherigen VLANs zugeordnet ist. Wenn Ihre Workerknoten und Ingress-Controller mit verschiedenen VLANs verbunden sind, können die Ingress-Controller eingehenden Netzverkehr nicht an App-Pods auf Ihren Workerknoten weiterleiten. Um Ihre Ingress-Controller-Services in ein anderes VLAN zu verschieben, müssen Sie den Ingress-Controllerservice im neuen VLAN erstellen und den Ingress-Controllerservice im alten VLAN löschen.

  1. Erstellen Sie einen Ingress-Controllerservice im neuen VLAN.

    1. Erstellen Sie eine YAML-Konfigurationsdatei für einen neuen Ingress-Controllerservice. Geben Sie die Zone an, in der der Ingress-Controllerservice bereitgestellt wird. Speichern Sie die Datei als router-new-<zone>.yaml.
      • Öffentlicher Ingress-Controllerservice:
        apiVersion: v1
        kind: Service
        metadata:
          annotations:
            service.kubernetes.io/ibm-load-balancer-cloud-provider-zone: <zone>
            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/deployment-ingresscontroller: default
            router: router-default
          name: router-new-<zone>
          namespace: openshift-ingress
        spec:
          externalTrafficPolicy: Local
          ports:
          - name: http
            port: 80
            protocol: TCP
            targetPort: http
          - name: https
            port: 443
            protocol: TCP
            targetPort: https
          selector:
            ingresscontroller.operator.openshift.io/deployment-ingresscontroller: default
          sessionAffinity: None
          type: LoadBalancer
        
      • Privater Ingress-Controllerservice:
        apiVersion: v1
        kind: Service
        metadata:
          annotations:
            service.kubernetes.io/ibm-load-balancer-cloud-provider-zone: <zone>
            service.kubernetes.io/ibm-load-balancer-cloud-provider-ip-type: private
          finalizers:
          - service.kubernetes.io/load-balancer-cleanup
          labels:
            app: router
            ingresscontroller.operator.openshift.io/deployment-ingresscontroller: private
            router: router-private
          name: router-new-<zone>
          namespace: openshift-ingress
        spec:
          externalTrafficPolicy: Local
          ports:
          - name: http
            port: 80
            protocol: TCP
            targetPort: http
          - name: https
            port: 443
            protocol: TCP
            targetPort: https
          selector:
            ingresscontroller.operator.openshift.io/deployment-ingresscontroller: private
          sessionAffinity: None
          type: LoadBalancer
        
    2. Erstellen Sie den neuen Ingress-Controllerservice.
      oc apply -f router-new-<zone>.yaml -n openshift-ingress
      
    3. Rufen Sie die EXTERNAL-IP-Adresse des neuen Ingress-Controllerservice ab. Diese IP-Adresse stammt aus einem Teilnetz im neuen VLAN.
      oc get svc router-new -n openshift-ingress
      
      Beispielausgabe für einen öffentlichen Ingress-Controllerservice:
      NAME                         TYPE           CLUSTER-IP       EXTERNAL-IP     PORT(S)                                     AGE
      router-new                   LoadBalancer   172.21.XX.XX     169.XX.XXX.XX   80:31049/TCP,443:30219/TCP                  2m
      
    4. Cluster mit mehreren Zonen: Wenn Sie die VLANs für Workerknoten in mehreren Zonen geändert haben, wiederholen Sie diese Schritte, um einen Ingress-Controllerservice für die neuen VLANs in jeder Zone zu erstellen.
  2. Notieren Sie den Hostnamen des Ingress-Controllers. Suchen Sie in der Ausgabe nach dem Hostnamen, der wie <cluster_name>-<random_hash>-0001.<region>.containers.appdomain.cloud formatiert ist.

    ibmcloud oc nlb-dns ls -c <cluster_name_or_ID>
    

    Beispielausgabe

    Hostname                                                                             IP(s)           Health Monitor   SSL Cert Status   SSL Cert Secret Name                            Secret Namespace
    mycluster-35366fb2d3d90fd50548180f69e7d12a-0001.us-east.containers.appdomain.cloud   169.XX.XXX.XX   None             created           roks-ga-35366fb2d3d90fd50548180f69e7d12a-0001   default
    ...
    
  3. Fügen Sie die IP-Adresse des neuen Ingress-Controllerservice, den Sie in Schritt 1 gefunden haben, zum Hostnamen des Ingress-Controllers hinzu. Wenn Sie in Schritt 1 Dienste für mehrere Zonen erstellt haben, geben Sie jede IP-Adresse separat in den wiederholten Optionen von --ip an.

    ibmcloud oc nlb-dns add -c <cluster_name_or_ID> --ip <new_IP> --nlb-host <subdomain>
    

    Ihr Ingress-Controllerservice im neuen VLAN ist jetzt bei der Domäne für den Ingress-Standardcontroller in Ihrem Cluster registriert und kann eingehende Anforderungen an Apps weiterleiten.

  4. Rufen Sie die IP-Adresse des alten Ingress-Controllerservice im alten VLAN ab. Cluster mit mehreren Zonen: Wenn Sie die VLANs für Workerknoten in mehreren Zonen geändert haben, rufen Sie die IP-Adresse für den Ingress-Controllerservice in jeder Zone ab, in der die VLANs geändert wurden. Beachten Sie, dass der Ingress-Controllerservice in der ersten Zone, in der Sie über Workerknoten verfügen, immer den Namen router-default hat und Ingress-Controllerservices in den Zonen, die Sie später zu Ihrem Cluster hinzufügen, Namen wie router-dal12 haben.

    oc get svc -n openshift-ingress
    

    Beispielausgabe für einen Mehrzonencluster:

    NAME                          TYPE           CLUSTER-IP       EXTERNAL-IP      PORT(S)                      AGE
    router-dal12                  LoadBalancer   172.21.190.62    169.XX.XX.XX     80:32318/TCP,443:30915/TCP   51d
    router-default                LoadBalancer   172.21.47.119    169.XX.XX.XX     80:31311/TCP,443:32561/TCP   78d
    router-internal-default       ClusterIP      172.21.51.30     <none>           80/TCP,443/TCP,1936/TCP      78d
    
  5. Entfernen Sie die IP-Adresse des alten Ingress-Controllerservice, den Sie in Schritt 2 gefunden haben, aus dem Hostnamen des Ingress-Controllers. Multizonen-Cluster: Geben Sie jede IP-Adresse separat in wiederholten --ip Optionen an.

    ibmcloud oc nlb-dns rm classic -c <cluster_name_or_ID> --ip <old_IP> --nlb-host <hostname>
    
  6. Bestätigen Sie, dass der Hostname für Ihren Ingress-Controller jetzt mit der neuen IP-Adresse registriert ist. Nachdem der Hostname Ihres Ingress-Controllers mit der IP-Adresse des neuen Service aktualisiert wurde, sind keine weiteren Änderungen an Ihrem Ingress-Controller oder Ihren Routen erforderlich.

    ibmcloud oc nlb-dns ls -c <cluster_name_or_ID>
    
  7. Löschen Sie den Ingress-Controllerservice im alten VLAN.

    oc delete svc <old_router_svc> -n openshift-ingress
    
  8. Optional: Wenn Sie die Teilnetze in den alten VLANs nicht mehr benötigen, können Sie sie entfernen.