Gültige SSL/TLS-Zertifikate sind eine Kernanforderung der modernen Anwendungslandschaft. Leider wird die Verwaltung von Zertifikatserneuerungen (oder Zertifikatserneuerungen) bei der Bereitstellung einer Anwendung häufig vernachlässigt. Zertifikate haben eine begrenzte Lebensdauer, die von etwa 13 Monaten für Zertifikate von DigiCert bis zu 90 Tagen für Let’s Encrypt-Zertifikate reicht. Um den sicheren Zugriff aufrechtzuerhalten, müssen diese Zertifikate vor ihrem Ablauf erneuert/neu ausgestellt werden. Angesichts der erheblichen Arbeitsbelastung der meisten Ops-Teams kommt es vor, dass die Erneuerung von Zertifikaten vergessen wird. Dies führt zu Chaos, wenn das Ablaufdatum der Zertifikate näher rückt – oder, schlimmer noch, es überschritten wird.
So muss es nicht sein. Mit etwas Planung und Vorbereitung kann die Zertifikatsverwaltung automatisiert und optimiert werden. Hier sehen wir uns eine Lösung für Kubernetes an, die drei Technologien verwendet:
In diesem Blog erfahren Sie, wie Sie die Zertifikatsverwaltung vereinfachen, indem Sie Ihren Endpunkten eindeutige, automatisch erneuerte und aktualisierte Zertifikate bereitstellen.
Bevor wir in die technischen Details einsteigen, müssen wir einige Begriffe definieren. Der Begriff „TLS-Zertifikat“ bezieht sich auf zwei Komponenten, die zum Aktivieren von HTTPS-Verbindungen auf unserem Ingress-Controller erforderlich sind:
Sowohl das Zertifikat als auch der private Schlüssel werden von Let’s Encrypt ausgestellt. Eine vollständige Erklärung zur Funktionsweise von TLS-Zertifikaten finden Sie im Beitrag „So funktionieren TLS/SSL-Zertifikate“ von DigiCert.
In Kubernetes werden diese beiden Komponenten als Secrets gespeichert. Kubernetes-Workloads – wie der NGINX Ingress Controller und der Cert-Manager – können diese Secrets schreiben und lesen, die auch von Benutzern verwaltet werden können, die Zugriff auf die Kubernetes-Installation haben.
Das Cert-Manager -Projekt ist ein Zertifikatscontroller, der mit Kubernetes und OpenShift funktioniert. Bei der Bereitstellung in Kubernetes stellt der Cert-Manager automatisch die von Ingress-Controllern benötigten Zertifikate aus und stellt sicher, dass diese gültig und aktuell sind. Darüber hinaus werden Ablaufdaten von Zertifikaten verfolgt und in konfigurierten Zeitabständen eine Erneuerung versucht. Obwohl es mit zahlreichen öffentlichen und privaten Emittenten zusammenarbeitet, zeigen wir die Integration mit Let’s Encrypt.
Bei der Verwendung von Let’s Encrypt wird die gesamte Zertifikatsverwaltung automatisch durchgeführt. Dies ist zwar sehr praktisch, bringt aber auch ein Problem mit sich: Wie stellt der Dienst sicher, dass Sie der Eigentümer des betreffenden vollqualifizierten Domänennamens (FQDN) sind?
Dieses Problem wird mithilfe einer Challenge gelöst. Dabei müssen Sie eine Bestätigungsanfrage beantworten, die nur von jemandem bereitgestellt werden kann, der Zugriff auf die DNS-Einträge der jeweiligen Domäne hat. Herausforderungen können eine von zwei Formen haben:
HTTP-01 ist die einfachste Möglichkeit, ein Zertifikat zu generieren, da kein direkter Zugriff auf den DNS-Anbieter erforderlich ist. Diese Art der Abfrage wird immer über Port 80 (HTTP) durchgeführt. Beachten Sie, dass der Cert-Manager bei der Verwendung von HTTP-01-Challenges den Ingress-Controller nutzt, um das Challenge-Token bereitzustellen.
Ein Ingress-Controller ist ein spezialisierter Dienst für Kubernetes, der Datenverkehr von außerhalb des Clusters bringt, ihn auf interne Pods (eine Gruppe aus einem oder mehreren Containern) verteilt und den ausgehenden Datenverkehr verwaltet. Darüber hinaus wird der Ingress-Controller über die Kubernetes-API gesteuert und überwacht und aktualisiert die Lastausgleichskonfiguration, wenn Pods hinzugefügt oder entfernt werden oder ausfallen.
Weitere Informationen zu Ingress-Controllern finden Sie in den folgenden Blogs:
In den folgenden Beispielen verwenden wir den NGINX Ingress Controller, der von F5 NGINX entwickelt und gepflegt wird.
Diese Beispiele setzen voraus, dass Sie über eine funktionierende Kubernetes-Installation verfügen, mit der Sie Tests durchführen können, und dass die Installation eine externe IP-Adresse zuweisen kann (Kubernetes LoadBalancer-Objekt). Darüber hinaus wird davon ausgegangen, dass Sie Datenverkehr sowohl auf Port 80 als auch auf Port 443 (bei Verwendung der HTTP-01-Challenge) oder nur auf Port 443 (bei Verwendung der DNS-01-Challenge) empfangen können. Diese Beispiele werden anhand von Mac OS X veranschaulicht, können aber auch unter Linux oder WSL verwendet werden.
Sie benötigen außerdem einen DNS-Anbieter und einen FQDN, für den Sie den A-Eintrag anpassen können. Wenn Sie die HTTP-01-Challenge verwenden, müssen Sie nur einen A-Eintrag hinzufügen können (oder einen für Sie hinzufügen lassen). Wenn Sie die DNS-01-Challenge verwenden, benötigen Sie API-Zugriff auf einen unterstützten DNS-Anbieter oder einen unterstützten Webhook-Anbieter .
Am einfachsten geht das Deployment über Helm . Diese Bereitstellung ermöglicht Ihnen die Verwendung sowohl des Kubernetes Ingress als auch des NGINX Virtual Server CRD.
$ helm repo add nginx-stable https://helm.nginx.com/stable "nginx-stable" wurde zu Ihren Repositories hinzugefügt
$ helm repo update Warten Sie, während wir das Neueste aus Ihren Diagramm-Repositorys holen...
...Erfolgreich ein Update aus dem Diagramm-Repository „nginx-stable“ erhalten
Update abgeschlossen. ⎈Viel Spaß beim Helmen!⎈
$ helm install nginx-kic nginx-stable/nginx-ingress \ --namespace nginx-ingress --set controller.enableCustomResources=true \
--create-namespace --set controller.enableCertManager=true
NAME: nginx-kic
LETZTE BEREITSTELLUNG: Do., 1. Sep. 2022, 15:58:15
NAMESPACE: nginx-ingress
STATUS: bereitgestellt
REVISION: 1
TESTSUITE: Keine
ANMERKUNGEN:
Der NGINX Ingress Controller wurde installiert.
$ kubectl get deployments --namespace nginx-ingress NAME BEREIT AKTUELL VERFÜGBAR ALTER
nginx-kic-nginx-ingress 1/1 1 1 23s
$ kubectl get services --namespace nginx-ingress
NAME TYP CLUSTER-IP EXTERNE-IP PORT(S) ALTER
nginx-kic-nginx-ingress LoadBalancer 10.128.60.190 www.xxx.yyy.zzz 80:31526/TCP,443:32058/TCP 30s
Der Vorgang hängt hierbei von Ihrem DNS-Anbieter ab. Dieser DNS-Name muss von den Let‘s Encrypt-Servern auflösbar sein. Daher kann es erforderlich sein, dass Sie warten, bis der Datensatz verbreitet wurde, bevor es funktioniert. Weitere Informationen hierzu finden Sie im SiteGround-Artikel „Was ist DNS-Verbreitung und warum dauert sie so lange?“
Sobald Sie Ihren gewählten FQDN auflösen können, können Sie mit dem nächsten Schritt fortfahren.
$ host cert.example.com cert.example.com hat die Adresse www.xxx.yyy.zzz
Der nächste Schritt besteht darin, die neueste Version des Cert-Managers bereitzustellen. Für unsere Bereitstellung werden wir wieder Helm verwenden.
$ helm repo add jetstack https://charts.jetstack.io "jetstack" wurde zu Ihren Repositories hinzugefügt
$ helm repo update Warten Sie, während wir die neuesten Informationen aus Ihren Diagramm-Repositorys abrufen...
...Erfolgreich ein Update aus dem Diagramm-Repository „nginx-stable“ erhalten
...Erfolgreich ein Update aus dem Diagramm-Repository „jetstack“ erhalten
Update abgeschlossen. ⎈Viel Spaß beim Helmen!⎈
$ helm install cert-manager jetstack/cert-manager \ --namespace cert-manager --create-namespace \ --version v1.9.1 --set installCRDs=true NAME: cert-manager LETZTE BEREITSTELLUNG: Do., 1. September 2022, 16:01:52 Uhr NAMESPACE: cert-manager STATUS: bereitgestellt REVISION: 1 TESTSUITE: Keine HINWEISE: cert-manager v1.9.1 wurde erfolgreich bereitgestellt!
Um mit der Ausstellung von Zertifikaten beginnen zu können, müssen Sie eine ClusterIssuer- oder Issuer-Ressource einrichten (beispielsweise durch Erstellen eines „Letsencrypt-Staging“-Ausstellers).
Weitere Informationen zu den verschiedenen Arten von Herausgebern und deren Konfiguration finden Sie in unserer Dokumentation:
https: //cert-manager.io/docs/configuration/
Informationen zum Konfigurieren von cert-manager zur automatischen Bereitstellung von Zertifikaten für Ingress-Ressourcen finden Sie in der „ingress-shim“-Dokumentation:
https: //cert-manager.io/docs/usage/ingress/
$ kubectl get deployments --namespace cert-manager NAME BEREIT AKTUELL VERFÜGBAR ALTER
cert-manager 1/1 1 1 4m30s
cert-manager-cainjector 1/1 1 1 4 Min. 30 Sek.
cert-manager-webhook 1/1 1 1 4 Min. 30 Sek.
Wir werden das NGINX Cafe-Beispiel verwenden, um unsere Backend-Bereitstellung und -Dienste bereitzustellen. Dies ist ein gängiges Beispiel, das in der von NGINX bereitgestellten Dokumentation verwendet wird. Wir werden Ingress in diesem Zusammenhang nicht bereitstellen.
$ git clone https://github.com/nginxinc/kubernetes-ingress.git Klonen in „kubernetes-ingress“ …
Remote: Objekte aufzählen: 44979, erledigt.
Fernbedienung: Objekte zählen: 100 % (172/172), erledigt.
Remote: Komprimieren von Objekten: 100 % (108/108), erledigt.
Remote: Gesamt 44979 (Delta 87), wiederverwendet 120 (Delta 63), Pack-wiederverwendet 44807
Empfangene Objekte: 100 % (44979/44979), 60,27 MiB | 27,33 MiB/s, fertig.
Auflösen von Deltas: 100 % (26508/26508), erledigt.
$ cd ./kubernetes-ingress/beispiele/ingress-resources/vollständiges-beispiel
$ kubectl apply -f ./cafe.yaml
deployment.apps/coffee erstellt
service/coffee-svc erstellt
deployment.apps/tea erstellt
service/tea-svc erstellt
„kubectl
get“. Sie möchten sicherstellen, dass die Pods als BEREIT
und die Dienste als ausgeführt
angezeigt werden. Das folgende Beispiel zeigt eine repräsentative Auswahl dessen, was Sie suchen. Beachten Sie, dass der Kubernetes
-Dienst ein Systemdienst ist, der im selben Namespace (Standard) ausgeführt wird wie das NGINX Cafe-Beispiel.$ kubectl get deployments,services --namespace default NAME BEREIT AKTUELL VERFÜGBAR ALTER
deployment.apps/coffee 2/2 2 2 69s
deployment.apps/tea 3/3 3 3 68s
NAME TYP CLUSTER-IP EXTERNE-IP PORT(S) ALTER
service/coffee-svc ClusterIP 10.128.154.225 <keine> 80/TCP 68s
service/kubernetes ClusterIP 10.128.0.1 <keine> 443/TCP 29m
service/tea-svc ClusterIP 10.128.96.145 <keine> 80/TCP 68s
Innerhalb des Cert-Managers kann der ClusterIssuer zum Ausstellen von Zertifikaten verwendet werden. Dies ist ein Cluster-Objekt, auf das von jedem Namespace verwiesen werden kann und das von allen Zertifikatsanforderungen mit der definierten Zertifikatsausstellenden Stelle verwendet werden kann. In diesem Beispiel können alle Zertifikatsanforderungen für Let’s Encrypt-Zertifikate von diesem ClusterIssuer bearbeitet werden.
Stellen Sie den ClusterIssuer für den von Ihnen ausgewählten Challenge-Typ bereit. Obwohl es den Rahmen dieses Beitrags sprengt, gibt es erweiterte Konfigurationsoptionen , mit denen Sie mehrere Resolver (ausgewählt basierend auf Auswahlfeldern) in Ihrem ClusterIssuer angeben können.
Mithilfe des ACME-Protokolls (Automated Certificate Management Environment) wird ermittelt, ob Sie Eigentümer eines Domänennamens sind und Ihnen daher ein Let’s Encrypt-Zertifikat ausgestellt werden kann. Für diese Herausforderung müssen folgende Parameter übergeben werden:
Dieses Beispiel zeigt, wie ein ClusterIssuer eingerichtet wird, um mit der HTTP-01-Challenge den Domänenbesitz nachzuweisen und ein Zertifikat zu erhalten.
$ cat << EOF | kubectl apply -f apiVersion: cert-manager.io/v1
Art: ClusterIssuer
Metadaten:
Name: prod-issuer
Spezifikation:
acme:
E-Mail: example@example.com
Server: https://acme-v02.api.letsencrypt.org/directory
privateKeySecretRef:
Name: prod-issuer-account-key
Solver:
- http01:
Ingress:
Klasse: nginx
EOF
clusterissuer.cert-manager.io/prod-issuer erstellt
$ kubectl get clusterissuer NAME BEREIT ALTER
prod-issuer True 34s
Dieses Beispiel zeigt, wie Sie einen ClusterIssuer einrichten, um die DNS-01-Challenge zur Authentifizierung Ihres Domänenbesitzes zu verwenden. Abhängig von Ihrem DNS-Anbieter müssen Sie wahrscheinlich ein Kubernetes-Geheimnis verwenden, um Ihr Token zu speichern. In diesem Beispiel wird Cloudflare verwendet. Beachten Sie die Verwendung von Namespaces. Die Cert-Manager-Anwendung, die im Cert-Manager-Namespace bereitgestellt wird, muss Zugriff auf das Geheimnis haben.
Für dieses Beispiel benötigen Sie ein Cloudflare-API-Token , das Sie von Ihrem Konto aus erstellen können. Dies muss in die Zeile weiter unten eingefügt werden. Wenn Sie Cloudflare nicht verwenden, müssen Sie die Dokumentation Ihres Anbieters befolgen .
$ cat << EOF | kubectl apply -f apiVersion: v1
Art: Geheim
Metadaten:
Name: cloudflare-api-token-secret
Namespace: cert-manager
Typ: Undurchsichtig
stringData:
api-token: <API-Token>
EOF
$ cat << EOF | kubectl apply -f apiVersion: cert-manager.io/v1
Art: ClusterIssuer
Metadaten:
Name: Prod-Issuer
Spezifikation:
Acme:
E-Mail: example@example.com
Server: https://acme-v02.api.letsencrypt.org/directory
privateKeySecretRef:
Name: Prod-Issuer-Account-Schlüssel
Solver:
- DNS01:
Cloudflare:
apiTokenSecretRef:
Name: cloudflare-api-token-secret
Schlüssel: API-Token
EOF
$ kubectl get clusterissuer NAME BEREIT ALTER
prod-issuer True 31 m
Dies ist der Punkt, auf den wir hingearbeitet haben – die Bereitstellung der Ingress-Ressource für unsere Anwendung. Dadurch wird der Datenverkehr in die NGINX Cafe-Anwendung umgeleitet, die wir zuvor bereitgestellt haben.
Wenn Sie die standardmäßige Kubernetes-Ingress-Ressource verwenden, konfigurieren Sie Ingress mit dem folgenden Bereitstellungs-YAML und fordern Sie ein Zertifikat an.
API-Version: networking.k8s.io/v1 Art: Ingress
Metadaten:
Name: cafe-ingress
Anmerkungen:
cert-manager.io/cluster-issuer: prod-issuer
acme.cert-manager.io/http01-edit-in-place: „true“
Spezifikation:
ingressClassName: nginx
tls:
- Hosts:
- cert.example.com
secretName: cafe-secret
Regeln:
- Host: cert.example.com
http:
Pfade:
- Pfad: /tea
Pfadtyp: Präfix
Backend:
Dienst:
Name: tea-svc
Port:
Nummer: 80
- Pfad: /Kaffee
Pfadtyp: Präfix
Backend:
Dienst:
Name: coffee-svc
Port:
Nummer: 80
Es lohnt sich, einige wichtige Teile des Manifests noch einmal durchzugehen:
metadata.annotations
, wo wir acme.cert-manager.io/http01-edit-in-place
auf „true“ setzen. Dieser Wert ist erforderlich und passt die Art und Weise an, in der die Herausforderung bedient wird. Weitere Informationen finden Sie im Dokument „Unterstützte Anmerkungen“ . Dies kann auch durch die Verwendung eines Master/Minion-Setups bewältigt werden.spec.ingressClassName
bezieht sich auf den NGINX-Ingress-Controller, den wir installiert haben und verwenden werden.spec.tls.secret
speichert den Zertifikatsschlüssel, der zurückgegeben wird, wenn das Zertifikat von Let’s Encrypt ausgestellt wird. cert.example.com
ist für spec.tls.hosts
und spec.rules.host
angegeben. Dies ist der Hostname, für den unser ClusterIssuer das Zertifikat ausgestellt hat.spec.rules.http
definiert die Pfade und die Backend-Dienste, die Anfragen auf diesen Pfaden verarbeiten. Beispielsweise wird der Datenverkehr zu /tea
an Port 80 des tea-svc
umgeleitet.spec.rules.host
und spec.tls.hosts
, Sie sollten jedoch alle Parameter in der Konfiguration überprüfen. $ kubectl apply -f ./cafe-virtual-server.yaml virtualserver.k8s.nginx.org/cafe erstellt
$ kubectl get certificates NAME BEREIT GEHEIM ALTER
certificate.cert-manager.io/cafe-secret True cafe-secret 37 m
Wenn Sie die NGINX-CRDs verwenden, müssen Sie zum Konfigurieren Ihres Ingress das folgende Bereitstellungs-YAML verwenden.
apiVersion: k8s.nginx.org/v1
Art: VirtualServer
Metadaten:
Name: Café
Spezifikation:
Host: cert.example.com
TLS:
Geheimnis: Café-Geheimnis
Zertifikatsmanager:
Cluster-Aussteller: Produkt-Aussteller
Upstreams:
- Name: Tea
Dienst: Tea-SVC
Port: 80
- Name: Kaffee
Dienst: Kaffee-Service
Port: 80
Routen:
- Pfad: /Tee
Aktion:
Pass: Tee
- Pfad: /Kaffee
Aktion:
Pass: Kaffee
Es lohnt sich, einige wichtige Teile des Manifests noch einmal durchzugehen:
spec.tls.secret
speichert den Zertifikatsschlüssel, der zurückgegeben wird, wenn das Zertifikat von Let’s Encrypt ausgestellt wird. cert.example.com
ist für spec.host
angegeben. Dies ist der Hostname, für den unser ClusterIssuer das Zertifikat ausgestellt hat.spec.upstreams
-Werte verweisen auf unsere Backend-Dienste, einschließlich der Ports.spec.routes
definieren sowohl die Route als auch die Aktion, die ausgeführt werden soll, wenn diese Routen erreicht werden.spec.host
-Werts, Sie sollten jedoch alle Parameter in der Konfiguration überprüfen. $ kubectl apply -f ./cafe-virtual-server.yaml virtualserver.k8s.nginx.org/cafe erstellt
$ kubectl get VirtualServers NAME STATE HOST IP PORTS ALTER
cafe Gültig cert.example.com www.xxx.yyy.zzz [80,443] 51m
Sie können das Zertifikat über die Kubernetes-API anzeigen. Dort werden Ihnen Details zum Zertifikat angezeigt, einschließlich seiner Größe und des zugehörigen privaten Schlüssels.
$ kubectl describe secret cafe-secret Name: cafe-secret
Namespace: Standard
Labels: <keine>
Anmerkungen: cert-manager.io/alt-names: cert.example.com
cert-manager.io/certificate-name: Café-Geheimnis
cert-manager.io/allgemeiner-name: cert.example.com
cert-manager.io/ip-sans:
cert-manager.io/ausstellergruppe:
cert-manager.io/aussteller-kind: ClusterIssuer cert-manager.io/issuer-name : prod-issuer cert-manager.io/uri-sans :Typ: kubernetes.io/tls Daten ==== tls.crt: 5607 Bytes tls.key: 1675 Byte
Wenn Sie das tatsächliche Zertifikat und den Schlüssel sehen möchten, können Sie dies tun, indem Sie den folgenden Befehl ausführen. (Notiz: Dies veranschaulicht eine Schwäche der Kubernetes Secrets. Sie können nämlich von jedem gelesen werden, der über die erforderlichen Zugriffsberechtigungen verfügt.)
$ kubectl get secret cafe-secret -o yaml
Testen Sie die Zertifikate. Sie können hier jede gewünschte Methode verwenden. Das folgende Beispiel verwendet cURL . Der Erfolg wird durch einen Block ähnlich dem zuvor gezeigten angezeigt, der den Servernamen, die interne Adresse des Servers, das Datum, die gewählte URI (Route) (Kaffee oder Tee) und die Anforderungs-ID enthält. Fehler werden in Form von HTTP-Fehlercodes angezeigt, höchstwahrscheinlich 400 oder 301.
$ curl https://cert.example.com/tea
Serveradresse: 10.2.0.6:8080
Servername: tea-5c457db9-l4pvq
Datum: 02.09.2022:15:21:06 +0000
URI: /tea
Anfrage-ID: d736db9f696423c6212ffc70cd7ebecf
$ curl https://cert.example.com/coffee
Serveradresse: 10.2.2.6:8080
Servername: coffee-7c86d7d67c-kjddk
Datum: 02.09.2022:15:21:10 +0000
URI: /coffee
Anforderungs-ID: 4ea3aa1c87d2f1d80a706dde91f31d54
Wir haben zu Beginn versprochen, dass mit diesem Ansatz die Notwendigkeit entfallen würde, Zertifikatserneuerungen zu verwalten. Wir müssen jedoch noch erklären, wie das geht. Warum? Weil dies ein zentraler, integrierter Bestandteil des Cert-Managers ist. Wenn cert-manager in diesem automatischen Prozess feststellt, dass ein Zertifikat nicht vorhanden ist, abgelaufen ist, innerhalb von 15 Tagen abläuft oder wenn der Benutzer über die CLI ein neues Zertifikat anfordert, wird automatisch ein neues Zertifikat angefordert . Viel einfacher geht es nicht.
Wenn Sie ein NGINX Plus-Abonnent sind, besteht der einzige Unterschied für Sie darin, den NGINX Ingress Controller zu installieren. Anweisungen zum Ändern des oben angegebenen Helm-Befehls, um dies zu erreichen, finden Sie im Abschnitt „Installation Helm“ der NGINX-Dokumente.
Dies hängt weitgehend von Ihrem Anwendungsfall ab.
Die HTTP-01-Challenge-Methode erfordert, dass Port 80 für das Internet geöffnet ist und dass der DNS-A-Eintrag ordnungsgemäß für die IP-Adresse des Ingress-Controllers konfiguriert wurde. Dieser Ansatz erfordert außer zum Erstellen des A-Eintrags keinen Zugriff auf den DNS-Anbieter.
Die DNS-01-Challenge-Methode kann verwendet werden, wenn Sie Port 80 nicht dem Internet zugänglich machen können. Sie erfordert lediglich, dass der Zertifikatsmanager über ausgehenden Zugriff auf den DNS-Anbieter verfügt. Allerdings erfordert diese Methode, dass Sie Zugriff auf die API Ihres DNS-Anbieters haben, wobei die erforderliche Zugriffsebene je nach Anbieter unterschiedlich ist.
Aufgrund der enormen Komplexität von Kubernetes ist es schwierig, gezielte Informationen zur Fehlerbehebung bereitzustellen. Wenn Sie auf Probleme stoßen, laden wir Sie ein, uns im NGINX Community Slack zu fragen (NGINX Plus-Abonnenten können ihre normalen Supportoptionen nutzen).
Fordern Sie zunächst Ihre kostenlose 30-Tage-Testversion von NGINX Ingress Controller mit NGINX App Protect WAF und DoS an und laden Sie das stets kostenlose NGINX Service Mesh herunter .
„Dieser Blogbeitrag kann auf Produkte verweisen, die nicht mehr verfügbar und/oder nicht mehr unterstützt werden. Die aktuellsten Informationen zu verfügbaren F5 NGINX-Produkten und -Lösungen finden Sie in unserer NGINX-Produktfamilie . NGINX ist jetzt Teil von F5. Alle vorherigen NGINX.com-Links werden auf ähnliche NGINX-Inhalte auf F5.com umgeleitet."