Apps in Satellite-Clustern zugänglich machen

Machen Sie Apps, die in Ihrem Satellite-Cluster ausgeführt werden, für Datenverkehrsanforderungen aus dem öffentlichen Netz sicher zugänglich, entweder von Ressourcen, die mit dem privaten Netz Ihres Hosts verbunden sind, oder von Ressourcen in IBM Cloud.

Sie haben mehrere Optionen für die Bereitstellung von Apps in Satellite-Clustern:

  • MetalLB: Eine LoadBalancer-Implementierung, die für lokale Satellite-Cluster geeignet ist.
  • Red Hat OpenShift-Routen: Apps mit einem Hostnamen schneller zugänglich machen, um Anforderungen aus dem öffentlichen oder einem privaten Netz zu stellen. Der Red Hat OpenShift Ingress-Controller stellt DNS-Registrierung und optionale Zertifikate für Ihre Routen bereit.
  • Lastausgleichsfunktion eines anderen Anbieters und Red Hat OpenShift-Routen: Stellen Sie Apps mit einem Hostnamen bereit und fügen Sie eine Statusprüfung für die Host-IP-Adressen hinzu, die in den DNS-Datensätzen des Ingress-Controllers registriert sind.
  • NodePorts: Nicht-HTTP(S)-Apps (wie z. B. UDP- oder TCP-Apps) mit einem NodePort im Bereich 30000 - 32767 zugänglich machen.
  • Red Hat OpenShift-Routes und Satellite-Linkendpunkte: App mit einer privaten Route zugänglich machen und einen Linkendpunkt vom Typ location für die Route erstellen. Nur eine Ressource, die mit dem privaten Netz von IBM Cloud verbunden ist, kann auf Ihre App zugreifen.

MetalLB einrichten

MetalLB ist eine Lastausgleichsimplementierung für Bare-Metal-Kubernetes-Cluster unter Verwendung von Standard-Routing-Protokollen. Weitere Informationen finden Sie unter „Über“ MetalLB und MetalLB „Operator“ in der Red Hat OpenShift Dokumentation.

Zur Installation und Konfiguration von " MetalLB, folgen Sie den Anweisungen unter " Installation des ' MetalLB Operators in der " Red Hat OpenShift-Dokumentation. Bevor Sie beginnen, vergewissern Sie sich, dass Sie ein dediziertes Subnetz (IPAddressPool) für die externe IP der LoadBalancer Dienste haben. Stellen Sie sicher, dass die in IPAddressPool enthaltenen IP-Adressen nicht reserviert sind oder für andere Zwecke verwendet werden. Andernfalls kann die Lastausgleichsfunktion fehlschlagen.

Apps mit Red Hat OpenShift-Routen zugänglich machen

Machen Sie die Services in Ihrem Cluster schnell über die externe IP-Adresse des Red Hat OpenShift Ingress-Controllers mithilfe einer Route zugänglich.

Eine Red Hat OpenShift-Route stellt einen Service als Hostnamen im Format <service_name>-<project>.<cluster_name>-<random_hash>-0000.upi.containers.appdomain.cloud bereit. Ein Ingress-Controller wird standardmäßig in Ihrem Cluster bereitgestellt, sodass Routen von externen Clients verwendet werden können. Der Ingress-Controller verwendet den Serviceselektor, um den Service und die Endpunkte zu suchen, die den Service unterstützen. Sie können den Serviceselektor so konfigurieren, dass der Datenverkehr über eine einzige Route an mehrere Services weitergeleitet wird. Sie können auch nicht gesicherte oder gesicherte Routen erstellen, indem Sie das TLS-Zertifikat verwenden, das vom Ingress-Controller für Ihren Hostnamen zuwiesen wird. Beachten Sie, dass der Ingress-Controller nur die HTTP- und HTTPS-Protokolle unterstützt.

Bevor Sie Routen einrichten, überprüfen Sie die folgenden Hinweise.

Hostnetzkonnektivität
Wenn die Hosts für Ihren Cluster über öffentliche Netzkonnektivität verfügen, 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. Wenn die Hosts für Ihren Cluster nur über private Netzkonnektivität verfügen, wird Ihr Cluster standardmäßig mit einem privaten Ingress-Controller erstellt. Sie können diesen Ingress-Controller verwenden, um private Routen für Ihre App zu erstellen, auf die nur innerhalb des privaten Netzes Ihrer Hosts zugegriffen werden kann. Um öffentliche Routen in Clustern einzurichten, die nur über eine private Netzkonnektivität verfügen, müssen Sie zuerst Ihre eigene Lastausgleichsfunktion eines anderen Anbieters einrichten, die über öffentliche Netzkonnektivität vor Ihrem privaten Ingress-Controller verfügt, bevor Sie die folgenden Schritte ausführen.
Statusprüfungen
Das DNS-Registrierungsmanagement wird standardmäßig für den Ingress-Controller Ihres Clusters bereitgestellt. Wenn Sie beispielsweise einen Host, der Ihrem Cluster zugeordnet wurde, von Ihrem Standort entfernen und durch einen anderen Host ersetzen, aktualisiert IBM die Host-IP-Adressen im DNS-Datensatz Ihres Ingress-Controllers für Sie. Beachten Sie, dass zwar die DNS-Registrierung für Routen für Sie bereitgestellt wird, aber keine Lastausgleichsservices vor dem Ingress-Controller in Ihrem Cluster bereitgestellt werden. Zur Statusprüfung der IP-Adressen der Hosts, die in den DNS-Datensätzen des Ingress-Controllers registriert sind, können Sie vor Ihrem Ingress-Controller eigene Lastausgleichsfunktion eines anderen Anbieters einrichten, bevor Sie die folgenden Schritte ausführen.

So erstellen Sie Routen für Ihre Apps:

  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. Richten Sie eine Domäne für Ihre App ein.

    • Von IBM bereitgestellte Domäne: Wenn Sie keine angepasste Domäne verwenden müssen, wird ein Routenhostname im Format <service_name>-<project>.<cluster_name>-<random_hash>-0000.upi.containers.appdomain.cloud generiert. Fahren Sie mit dem nächsten Schritt fort.
    • Angepasste Domäne: Stimmen Sie mit Ihrem DNS-Provider das Erstellen einer angepassten Domäne ab. Wenn Sie zuvor eine Lastausgleichsfunktion eines anderen Anbieters vor Ihrem Ingress-Controller eingerichtet haben, arbeiten Sie mit Ihrem DNS-Provider zusammen, um stattdessen eine angepasste Domäne für die Lastausgleichsfunktion zu erstellen.
  3. Rufen Sie die IP-Adressen für den Ingress-Controller-Service in der Spalte EXTERNAL-IP ab.

    oc get svc router-external-default -n openshift-ingress
    
  4. 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.

  5. Ordnen Sie Ihre angepasste Domäne den IP-Adressen des Ingress-Controllers zu, indem Sie die IP-Adressen als A-Datensätze hinzufügen.

  6. Richten Sie eine Route entsprechend dem Typ der von Ihrer App erforderten TLS-Terminierung ein. Wenn Sie keine eigene Domain haben, lassen Sie die Option „ --hostname “ weg, damit automatisch ein Routen-Hostname für Sie generiert wird. 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:
    ```sh {: pre}
        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.
        {: tip}
    
    * Hinweis: Wenn Sie eine benutzerdefinierte Domain verwenden, fügen Sie die Optionen „ `--hostname` “, „ `--cert` “ und „ `--key` “ sowie optional die Option „ `--ca-cert` “ hinzu. Weitere Informationen zu den Zertifikatsanforderungen des „ TLS “ finden Sie unter [Red Hat OpenShift Dokumentation zur Edge-Route](https://docs.redhat.com/en/documentation/openshift_container_platform/4.21/html/ingress_and_load_balancing/routes#nw-ingress-creating-an-edge-route-with-a-custom-certificate_secured-routes){: external}.
    ```sh {: pre}
        oc create route edge --service <app_service_name> [--hostname <subdomain> --cert <tls.crt> --key <tls.key> --ca-cert <ca.crt>]
        ```
    * Erneut verschlüsseln: Wenn Sie eine benutzerdefinierte Domain verwenden, fügen Sie die Optionen „ `--hostname` “, „ `--cert` “ und „ `--key` “ sowie optional die Option „ `--ca-cert` “ hinzu. Weitere Informationen zu den Zertifikatsanforderungen für „ TLS “ finden Sie in der [Dokumentation zur „ Red Hat OpenShift “-Neuverschlüsselungsroute](https://docs.redhat.com/en/documentation/openshift_container_platform/4.21/html/ingress_and_load_balancing/routes#nw-ingress-creating-a-reencrypt-route-with-a-custom-certificate_secured-routes){: external}.
    ```sh {: pre}
        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>]
        ```
    
  7. Vergewissern Sie sich, dass die Route für Ihren App-Service erstellt wurde.

    oc get routes
    
  8. Optional: Passen Sie die Standard-Routing-Regeln mit optionalen Konfigurationen an. Sie können beispielsweise routenspezifische Annotationen vom Typ „ HAProxy “ verwenden.

Lastausgleichsfunktion eines anderen Anbieters vor dem Red Hat OpenShift-Ingress-Controller einrichten

Um die IP-Adressen der Hosts, die in den DNS-Einträgen des Ingress-Controllers registriert sind, auf ihre Funktionsfähigkeit zu überprüfen, können Sie einen eigenen Load-Balancer eines Drittanbieters vor den IP-Adressen der Hosts einrichten, die Ihrem Cluster als Worker-Knoten zugewiesen sind.

Wenn Sie beispielsweise einen Host, der Ihrem Cluster zugeordnet wurde, von Ihrem Standort entfernen und durch einen anderen Host ersetzen, aktualisiert IBM die Host-IP-Adressen im DNS-Datensatz Ihres Ingress-Controllers für Sie. Wenn Sie jedoch einen Host ausschalten, beispielsweise über das Infrastrukturmanagement Ihres Cloud-Providers, wird die IP-Adresse des Hosts nicht aus den DNS-Datensätzen Ihres Ingress-Controllers entfernt und kann zu einem Fehlschlagen des Anrufs führen, wenn der DNS-Datensatz in die IP-Adresse dieses Hosts aufgelöst wird. Wenn Sie eine Lastausgleichsfunktion vor Ihrem Ingress-Controller einrichten, können Sie sicherstellen, dass Host-IP-Adressen regelmäßig überprüft werden, um eine hohe Verfügbarkeit für Workloads im Produktionsbetrieb sicherzustellen.

Nachdem Sie eine Lastausgleichsfunktion vor Ihrem Ingress-Controller erstellen, können Sie mit dem Ingress-Controller Routen für Ihre App erstellen. Wenn eine Anforderung an die Route für Ihre App gesendet wird, wird die Anforderung zunächst von Ihrer Lastausgleichsfunktion empfangen, bevor sie an Ihren Ingress-Controller weitergeleitet wird, der die Anforderung dann an Ihre App weiterleitet.

  1. Listen Sie die Details des Ingress-Standardcontrollers für Ihren Cluster auf. Rufen Sie in der Spalte EXTERNAL-IP der Ausgabe die IP-Adressen der Workerknoten ab, die für den Ingress-Controller Ihres Clusters registriert sind. Rufen Sie in der Spalte PORT(S) der Ausgabe abhängig davon, ob Sie eine öffentliche oder private Lastausgleichsfunktion erstellen möchten, den Knotenport ab, den der Ingress-Controller-Service momentan für öffentlichen oder privaten Netzverkehr bereitstellt.

    oc get svc router-external-default -n openshift-ingress
    

    In der folgenden Beispielausgabe wird der Knotenport 30783 für den öffentlichen Datenverkehr (80) zugänglich gemacht.

    NAME                      TYPE           CLUSTER-IP      EXTERNAL-IP                            PORT(S)                      AGE
    router-external-default   LoadBalancer   172.21.84.172   169.xx.xxx.xxx, 169.xx.xxx.xxx         80:30783/TCP,443:30413/TCP   24h
    
  2. Erstellen Sie mithilfe dieser IP-Adressen und des Knotenports eine Layer 4-Lastausgleichsfunktion, die mit dem privaten Netz Ihres Hosts verbunden ist. Sie können z. B. eine Lastausgleichsfunktion vom Cloud-Provider Ihres Hosts bereitstellen oder eine F5-Lastausgleichsfunktion in Ihrem lokalen Netz bereitstellen. Um öffentliche Routen zu erstellen, muss die Lastausgleichsfunktion über öffentliche Netzkonnektivität verfügen und in der Lage sein, TCP- und UDP-Datenverkehr an den Port für den öffentlichen Datenverkehr weiterzuleiten, den Sie im vorherigen Schritt gefunden haben. Um private Routen zu erstellen, muss die Lastausgleichsfunktion in der Lage sein, den TCP- und UDP-Datenverkehr an den Port für den privaten Datenverkehr weiterzuleiten, den Sie im vorherigen Schritt gefunden haben.

  3. Rufen Sie den Hostnamen für Ihren Cluster ab. Diese Unterdomäne im Format <cluster_name>-<random_hash>-0000.upi.containers.appdomain.cloud wird beim Ingress-Controller Ihres Clusters registriert.

    ibmcloud oc nlb-dns ls --cluster <cluster_name_or_ID>
    
  4. Fügen Sie die öffentlichen IP-Adressen Ihrer Lastausgleichsfunktion zur Unterdomäne Ihres Clusters hinzu. Wiederholen Sie diesen Befehl für alle öffentlichen IP-Adressen, die hinzugefügt werden sollen.

    ibmcloud oc nlb-dns add --ip <public_IP> --cluster <cluster_name_or_ID> --nlb-host <hostname>
    
  5. Entfernen Sie die IP-Adressen des Workerknotens aus der Unterdomäne Ihres Clusters. Wiederholen Sie diesen Befehl für alle IP-Adressen, die Sie zuvor abgerufen haben.

    ibmcloud oc nlb-dns rm classic --ip <private_IP> --cluster <cluster_name_or_ID> --nlb-host <hostname>
    
  6. Überprüfen Sie, ob die öffentlichen IP-Adressen für Ihre Lastausgleichsfunktion bei der Clusterunterdomäne registriert sind.

    ibmcloud oc nlb-dns ls --cluster <cluster_name_or_ID>
    
  7. Fahren Sie mit den Schritten im Abschnitt Apps mit Red Hat OpenShift-Routen zugänglich machen fort, um Routes für Ihre Apps zu erstellen.

Wenn Sie einen externen Load Balancer oder eine VIP so konfigurieren, dass diese sich bei der Subdomain registrieren, anstatt die Standardregistrierung zu verwenden, benötigt dieser Load Balancer eingehenden Zugriff auf die Cluster-Hosts, und die Cluster-Hosts benötigen ausgehenden Zugriff auf den Load Balancer.

Apps mit NodePorts zugänglich machen

Wenn Sie den Ingress-Controller von Red Hat OpenShift nicht verwenden können, um eine App zugänglich zu machen, z. B., wenn Sie eine TCP- oder UDP-App zugänglich machen müssen, können Sie einen NodePort für Ihre App erstellen.

  1. Erstellen Sie einen NodePort für Ihre App. Der App wird ein NodePort im Bereich von 30000-32767 und eine interne Cluster-IP-Adresse zugeordnet.

    oc expose deployment <deployment_name> --type=NodePort --name=<nodeport_svc_name>
    
  2. Rufen Sie den NodePort ab, der Ihrer App zugewiesen wurde.

    oc describe svc <nodeport_svc_name>
    
  3. Rufen Sie den Hostnamen für Ihren Cluster im Format <cluster_name>-<random_hash>-0000.upi.containers.appdomain.cloud ab.

    ibmcloud oc nlb-dns ls --cluster <cluster_name_or_ID>
    
  4. Greifen Sie über die Unterdomäne Ihres Clusters und den NodePort im Format <cluster_name>-<random_hash>-0000.upi.containers.appdomain.cloud:<nodeport> auf Ihre App zu. Beachten Sie, dass Sie - wenn Ihre Hosts nur über private Netzkonnektivität verfügen - mit dem privaten Netz der Hosts verbunden sein müssen (z. B. über den VPN-Zugriff).

  5. Optional: Wenn Sie nicht direkt auf den NodePort zugreifen möchten oder wenn Sie Ihre Apps an einem bestimmten Port wie 443 zugänglich machen müssen, können Sie eine eigene Lastausgleichsfunktion der Ebene 4 anderer Anbieter einrichten, die mit dem privaten Netz Ihrer Hosts verbunden ist und Datenverkehr an den NodePort weiterleitet. Sie können z. B. eine Lastausgleichsfunktion vom Cloud-Provider Ihres Hosts bereitstellen oder eine F5-Lastausgleichsfunktion in Ihrem lokalen Netz bereitstellen. Der Load Balancer muss in der Lage sein, den Datenverkehr von TCP und UDP für die Ports 30000 - 32767 weiterzuleiten.

Apps mit Routen und Linkendpunkten für den Datenverkehr von IBM Cloud zugänglich machen

Wenn Sie in Ihrem Satellite-Cluster von einer Ressource in IBM Cloud über das private Netz auf eine App zugreifen möchten, können Sie Ihren privaten Ingress-Controller verwenden, um eine private Route für Ihre Anwendung zu erstellen. Anschließend können Sie einen Linkendpunkt des Typs location für die Route erstellen, der nur über das private Netz von IBM Cloud zugänglich ist.

  1. Führen Sie die Schritte im Abschnitt Apps mit Red Hat OpenShift-Routen zugänglich machen aus, um eine private Route für Ihre App zu erstellen. Diese Route ist nur über das private Netz Ihres Hosts zugänglich.

  2. Führen Sie die Schritte im Abschnitt location-Endpunkte erstellen, um eine Verbindung zu Ressourcen an einem Standort herzustellen aus, um einen Satellite-Linkendpunkt für die private Route Ihrer App zu erstellen.

  3. Optional: Um den Zugriff auf den Endpunkt nur von einer bestimmten Ressource in IBM Cloud zu ermöglichen, fügen Sie die Ressource zu der Quellenliste Ihres Endpunkts hinzu.