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 Anforderung an Ihre App verwendet den Hostnamen für die Route, den Sie für Ihre App festgelegt haben.
-
Ein DNS-Service löst die Unterdomäne in die portierbare öffentliche IP-Adresse eines Router-Service auf.
-
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.
-
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 Anforderung an Ihre App verwendet den Hostnamen für die Route, den Sie für Ihre App festgelegt haben.
-
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.
-
Nach Auflösung der IP-Adresse des Routerservice empfängt der Router die Anforderung.
-
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.
-
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 Anforderung an Ihre App verwendet den Hostnamen für die Route, den Sie für Ihre App festgelegt haben.
-
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.
-
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.
-
Basierend auf der aufgelösten IP-Adresse sendet die VPC-Lastausgleichsfunktion die Anforderung an einen Ingress-Controllerservice.
-
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.
-
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.
-
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.
-
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.
-
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.
-
Basierend auf der aufgelösten IP-Adresse sendet die VPC-Lastausgleichsfunktion die Anforderung an einen Ingress-Controllerservice.
-
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.
-
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.
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
- Öffentliche Routen in VPC-Clustern nur mit einem Private-Cloud-Serviceendpunkt einrichten
Ö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.
-
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
-
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.-
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 wierouter-dal12
haben.oc get svc -n openshift-ingress
-
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. -
Ordnen Sie Ihre angepasste Domäne der öffentlichen IP-Adresse des Ingress-Controllers zu, indem Sie die IP-Adresse als A-Datensatz hinzufügen.
-
-
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:
Müssen HTTP/2-Verbindungen verarbeitet werden? Nachdem Sie die Route erstellt haben, führen Sieoc create route passthrough --service <app_service_name> [--hostname <subdomain>]
oc edit route <app_service_name>
aus und ändern Sie dentargetPort
-Wert der Route inhttps
. Sie können die Route testen, indem Siecurl -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>]
- Einfach:
-
Vergewissern Sie sich, dass die Route für Ihren App-Service erstellt wurde.
oc get routes
-
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.
-
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 IhrerIngressController
-Spezifikation angeben. Weitere Informationen finden Sie unter Angepasstes Standardzertifikat festlegen. - Von IBM bereitgestellte Domäne:
- 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.
In dieser Beispielausgabe hat die Unterdomäneibmcloud oc nlb-dns ls --cluster <cluster_name_or_id>
mycluster-a1b2cdef345678g9hi012j3kl4567890-0002.us-south.containers.appdomain.cloud
den höchsten000<n>
-Wert von0002
.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
- Ändern Sie in der kopierten Unterdomäne den
000<n>
-Wert in der Unterdomäne auf000<n+1>
. Zum Beispiel wird die Subdomainmycluster-a1b2cdef345678g9hi012j3kl4567890-0002.us-south.containers.appdomain.cloud
inmycluster-a1b2cdef345678g9hi012j3kl4567890-0003.us-south.containers.appdomain.cloud
geändert. Diese Unterdomäne werden Sie in späteren Schritten registrieren.
- 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
- 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
-
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
-
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 imopenshift-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
-
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
-
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>
-
-
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 unterspec
ein. Wenn Sie beispielsweise zulassen möchten, dass ein Ingress-Controller nur Ingress/Routen mit der Bezeichnungtype=sharded
verarbeitet, können Sie einerouteSelector
hinzufügen. Weitere Informationen finden Sie unter Ingress-Controller-Sharding.routeSelector: matchLabels: type: sharded
-
Um Selektoren zu einem vorhandenen Ingress-Controller hinzuzufügen, rufen Sie eine Liste der Ingress-Controller ab.
oc get ingresscontroller -n openshift-ingress-operator
-
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"}}}}'
-
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.
-
-
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>
-
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:
Müssen HTTP/2-Verbindungen verarbeitet werden? Nachdem Sie die Route erstellt haben, führen Sieoc create route passthrough --service <app_service_name> [--hostname <subdomain>]
oc edit route <app_service_name>
aus und ändern Sie dentargetPort
-Wert der Route inhttps
. Sie können die Route testen, indem Siecurl -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>]
- Einfach:
-
Vergewissern Sie sich, dass die Route für Ihre App erstellt wurde.
oc get routes
-
Optional: Passen Sie die Routing-Regeln des öffentlichen Ingress-Controllers mit optionalen Konfigurationenan. Sie können zum Beispiel streckenspezifische HAProxy Anmerkungen verwenden.
-
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
- Private Routen in VPC-Clustern nur mit einem Private-Cloud-Serviceendpunkt einrichten
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.
-
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:
- 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.
In dieser Beispielausgabe hat die Unterdomäneibmcloud oc nlb-dns ls --cluster <cluster_name_or_id>
mycluster-a1b2cdef345678g9hi012j3kl4567890-0002.us-south.containers.appdomain.cloud
den höchsten000<n>
-Wert von0002
.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
- Ändern Sie in der kopierten Unterdomäne den
000<n>
-Wert in der Unterdomäne auf000<n+1>
. Zum Beispiel wird die Subdomainmycluster-a1b2cdef345678g9hi012j3kl4567890-0002.us-south.containers.appdomain.cloud
inmycluster-a1b2cdef345678g9hi012j3kl4567890-0003.us-south.containers.appdomain.cloud
geändert. Diese Unterdomäne werden Sie in späteren Schritten registrieren.
- 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
- 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
-
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
-
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 imopenshift-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
-
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
-
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>
-
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 unterspec
ein. Wenn Sie beispielsweise zulassen möchten, dass ein Ingress-Controller nur Ingress/Routen mit der Bezeichnungtype=sharded
verarbeitet, können Sie einerouteSelector
hinzufügen. Weitere Informationen finden Sie unter Ingress-Controller-Sharding.routeSelector: matchLabels: type: sharded
-
Um Selektoren zu einem vorhandenen Ingress-Controller hinzuzufügen, rufen Sie eine Liste der Ingress-Controller ab.
oc get ingresscontroller -n openshift-ingress-operator
-
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"}}}}'
-
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"]}]}}}'
-
-
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>
-
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:
Müssen HTTP/2-Verbindungen verarbeitet werden? Nachdem Sie die Route erstellt haben, führen Sieoc create route passthrough --service <app_service_name> --hostname <subdomain>
oc edit route <app_service_name>
aus und ändern Sie dentargetPort
-Wert der Route inhttps
. Sie können die Route testen, indem Siecurl -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>]
- Einfach:
-
Vergewissern Sie sich, dass die Route für Ihre App erstellt wurde.
oc get routes
-
Optional: Passen Sie die Routing-Regeln des privaten Ingress-Controllers mit optionalen Konfigurationenan. Sie können zum Beispiel streckenspezifische HAProxy Anmerkungen verwenden.
-
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.
-
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
-
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.
-
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 wierouter-dal12
haben.oc get svc -n openshift-ingress
-
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. -
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.
-
- Von IBM bereitgestellte Domäne: Wenn Sie keine angepasste Domäne benötigen, wird eine Routenunterdomäne im Format
-
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 dentargetPort
-Wert der Route inhttps
. Sie können die Route testen, indem Siecurl -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>]
-
-
Vergewissern Sie sich, dass die Route für Ihren App-Service erstellt wurde.
oc get routes
-
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.
-
Erstellen Sie einen Ingress-Controllerservice im neuen VLAN.
- 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
- Öffentlicher Ingress-Controllerservice:
- Erstellen Sie den neuen Ingress-Controllerservice.
oc apply -f router-new-<zone>.yaml -n openshift-ingress
- Rufen Sie die EXTERNAL-IP-Adresse des neuen Ingress-Controllerservice ab. Diese IP-Adresse stammt aus einem Teilnetz im neuen VLAN.
Beispielausgabe für einen öffentlichen Ingress-Controllerservice:oc get svc router-new -n openshift-ingress
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
- 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.
- 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
-
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 ...
-
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.
-
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 wierouter-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
-
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>
-
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>
-
Löschen Sie den Ingress-Controllerservice im alten VLAN.
oc delete svc <old_router_svc> -n openshift-ingress
-
Optional: Wenn Sie die Teilnetze in den alten VLANs nicht mehr benötigen, können Sie sie entfernen.