BLOG | NGINX

Erstellen eines Docker-Image von NGINX Plus mit NGINX Agent für Kubernetes

NGINX-Teil-von-F5-horiz-schwarz-Typ-RGB
Fabrizio Fiorucci Miniaturbild
Fabrizio Fiorucci
Veröffentlicht am 18. April 2023

F5 NGINX Management Suite ist eine Familie von Modulen zur Verwaltung der NGINX-Datenebene über eine einzige Oberfläche. Durch die Vereinfachung der Verwaltung von NGINX Open Source- und NGINX Plus-Instanzen vereinfacht die NGINX Management Suite Ihre Prozesse zum Skalieren, Sichern und Überwachen von Applications und APIs.

Sie müssen den NGINX-Agent auf jeder NGINX-Instanz installieren, die Sie von der NGINX Management Suite aus verwalten möchten, um die Kommunikation mit der Steuerebene und die Remote-Konfigurationsverwaltung zu ermöglichen.

Für NGINX-Instanzen, die auf Bare Metal oder einer virtuelle Maschine (VM) ausgeführt werden, stellen wir in unserer Dokumentation Installationsanweisungen bereit. In diesem Beitrag zeigen wir, wie man ein Docker-Image für NGINX Plus und NGINX Agent erstellt, um die Reichweite der NGINX Management Suite auf NGINX Plus-Instanzen auszuweiten, die in Kubernetes oder anderen Microservices-Infrastrukturen bereitgestellt werden.

Je nachdem, was Sie in das resultierende Docker-Image aufnehmen möchten, gibt es drei Build-Optionen:

[ Herausgeber – Dieser Beitrag wurde im April 2023 aktualisiert, um die Anweisungen zu verdeutlichen und das Feld ACM_DEVPORTAL in Schritt 1 des Ausführens des Docker-Image in Kubernetes hinzuzufügen.]

Voraussetzungen

Wir stellen ein GitHub-Repository mit den Ressourcen bereit, die Sie zum Erstellen eines Docker-Image von NGINX Plus und NGINX Agent benötigen, mit Unterstützung für Version 2.8.0 und höher des Instance Manager-Moduls von NGINX Management Suite.

Zum Erstellen des Docker-Image benötigen Sie:

  • Ein Linux-Host (Bare Metal oder VM)
  • Docker 20.10+
  • Ein privates Register, in das Sie das Ziel-Docker-Image pushen können
  • Eine laufende NGINX Management Suite-Instanz mit Instance Manager und API Connectivity Manager, wenn Sie die Unterstützung für das Entwicklerportal nutzen möchten
  • Ein Abonnement ( oder eine 30-tägige kostenlose Testversion ) für NGINX Plus und optional NGINX App Protect

Zum Ausführen des Docker-Image benötigen Sie:

  • Ein laufender Kubernetes-Cluster
  • kubectl mit Zugriff auf den Kubernetes-Cluster

Erstellen des Docker-Image

Befolgen Sie diese Anweisungen, um das Docker-Image zu erstellen.

  1. Klonen Sie das GitHub-Repository:

    $ git clone https://github.com/nginxinc/NGINX-Demos Klonen in „NGINX-Demos“ … remote: Objekte aufzählen: 126, fertig. Fernbedienung: Objekte zählen: 100 % (126/126), fertig. Fernbedienung: Komprimieren von Objekten: 100 % (85/85), erledigt. Fernbedienung: Gesamt 126 (Delta 61), wiederverwendet 102 (Delta 37), Pack-wiederverwendet 0 Empfangende Objekte: 100 % (126/126), 20,44 KiB | 1,02 MiB/s, fertig. 
    Auflösen von Deltas: 100 % (61/61), erledigt.
    
  2. Wechseln Sie in das Build-Verzeichnis:

    $ cd NGINX-Demos/nginx-agent-docker/
    
  3. Führen Sie „docker ps“ aus, um zu überprüfen, ob Docker ausgeführt wird, und führen Sie dann das Skript build.sh aus, um die gewünschte Software in das Docker-Image aufzunehmen. Die Basisoptionen sind:

    • ‑C – Name der NGINX Plus-Lizenzzertifikatsdatei ( nginx-repo.crt in den Beispielbefehlen unten)
    • -K – Name der NGINX Plus-Lizenzschlüsseldatei ( nginx-repo.key in den Beispielbefehlen unten)
    • -t – Das Registrierungs- und Zielbild im Formular

      <Registrierungsname>/<Bildname>:<tag>

      ( registry.ff.lan:31005/nginx-plus-with-agent:2.7.0 in den Beispielbefehlen unten)

    • ‑n – Basis-URL Ihrer NGINX Management Suite-Instanz ( https://nim.f5.ff.lan in den Beispielbefehlen unten)

    Die zusätzlichen Optionen sind:

    • -d – Fügen Sie bei Verwendung des NGINX API Connectivity Manager Datenebenenunterstützung für das Entwicklerportal hinzu.
    • ‑w – NGINX App Protect WAF hinzufügen

    Hier sind die Befehle für die verschiedenen Softwarekombinationen:

    • NGINX Plus und NGINX Agent:

      $ ./scripts/build.sh -C nginx-repo.crt -K nginx-repo.key \ -t registry.ff.lan:31005/nginx-plus-with-agent:2.7.0 \ -n https://nim.f5.ff.lan
      
    • NGINX Plus, NGINX Agent und NGINX App Protect WAF (fügen Sie die Option „-w“ hinzu):

      $ ./scripts/build.sh -C nginx-repo.crt -K nginx-repo.key \-t registry.ff.lan:31005/nginx-plus-with-agent:2.7.0 -w \ -n https://nim.f5.ff.lan
      
    • Unterstützung für NGINX Plus, NGINX Agent und Entwicklerportal (fügen Sie die Option -d hinzu):

      $ ./scripts/build.sh -C nginx-repo.crt -K nginx-repo.key \ -t registry.ff.lan:31005/nginx-plus-with-agent:2.7.0 -d \ -n https://nim.f5.ff.lan
      

    Hier ist eine Beispielablaufverfolgung des Builds für ein Basisimage. Die Meldung „Build abgeschlossen“ am Ende zeigt an, dass der Build erfolgreich war.

    $ ./scripts/build.sh -C nginx-repo.crt -K nginx-repo.key -t registry.ff.lan:31005/nginx-plus-with-agent:2.7.0 -n https://nim.f5.ff.lan => Ziel-Docker-Image ist nginx-plus-with-agent:2.7.0 [+] Erstellen von 415.1s (10/10) FERTIG => [intern] Build-Definition aus Dockerfile laden => Dockerfile übertragen: 38B => [intern] load .dockerignore => Kontext wird übertragen: 2B => [intern] Metadaten für docker.io/library/centos:7 laden => [auth] library/centos:pull token for registry-1.docker.io => CACHED [1/4] FROM docker.io/library /centos:7@sha256:be65f488b7764ad3638f236b7b515b3678369a5124c47b8d32916d6487418ea4 => [intern] Build-Kontext laden => Kontext übertragen: 69B => [2/4] AUSFÜHREN yum -y update && yum install -y wget ca-certificates epel-release curl && mkdir -p /deployment /etc/ssl/nginx && bash -c 'curl -k $NMS_URL/install/nginx-agent | sh' && echo "A 299.1s => [3/4] COPY ./container/start.sh /deployment/ => [4/4] RUN --mount=type=secret,id=nginx-crt,dst=/etc/ssl/nginx/nginx-repo.crt --mount=type=secret,id=nginx-key,dst=/etc/ssl/nginx/nginx-repo.key set -x && chmod +x /deployment/start.sh & 102.4s => Exportieren in Image => Exportieren von Ebenen => Schreiben von Image sha256:9246de4af659596a290b078e6443a19b8988ca77f36ab90af3b67c03d27068ff => Benennen in registry.ff.lan:31005/nginx-plus-with-agent:2.7.0 => Build abgeschlossen für registry.ff.lan:31005/nginx-plus-with-agent:2.7.0
    

    Ausführen des Docker-Image in Kubernetes

    Befolgen Sie diese Anweisungen, um das Bereitstellungsmanifest vorzubereiten und NGINX Plus mit NGINX Agent auf Kubernetes zu starten.

    1. Öffnen Sie mit Ihrem bevorzugten Texteditor manifests/1.nginx-with-agent.yaml und nehmen Sie die folgenden Änderungen vor (die Codeausschnitte zeigen die Standardwerte, die Sie ändern können oder müssen, orange hervorgehoben):

      • Ersetzen Sie im Abschnitt spec.template.spec.containers den Standard-Image-Namen ( your.registry.tld/nginx-with-nim2-agent:tag ) durch den Docker-Image-Namen, den Sie mit der Option -t in Schritt 3 von „ Erstellen des Docker-Images “ angegeben haben (in unserem Fall registry.ff.lan:31005/nginx-plus-with-agent:2.7.0 ):

        Spezifikation: ... Vorlage: ... Spezifikation: Container: - Name: nginx-nim Image: your.registry.tld/nginx-with-nim2-agent:tag
        
      • Nehmen Sie im Abschnitt spec.template.spec.containers.env diese Ersetzungen im Wertefeld für jeden angegebenen Namen vor:

        • NIM_HOST – (Erforderlich) Ersetzen Sie den Standardwert ( nginx-nim2.nginx-nim2 ) durch den FQDN oder die IP-Adresse Ihrer NGINX Management Suite-Instanz (in unserem Fall nim2.f5.ff.lan ).
        • NIM_GRPC_PORT – (Optional) Ersetzen Sie den Standard (443 ) mit einer anderen Portnummer für gRPC-Verkehr.
        • NIM_INSTANCEGROUP – (Optional) Ersetzen Sie den Standard ( lab ) durch die Instanzgruppe, zu der die NGINX Plus-Instanz gehört.
        • NIM_TAGS – (Optional) Ersetzen Sie den Standard ( preprod,devops ) durch eine Komma-getrennte Liste von Tags für die NGINX Plus-Instanz.
        Spezifikation: ... Vorlage: ... Spezifikation: Container: ... Umgebung: - Name: NIM_HOST ... Wert: " nginx-nim2.nginx-nim2 " - Name: NIM_GRPC_PORT-Wert: "443 " - Name: NIM_INSTANCEGROUP-Wert: " lab " – Name: NIM_TAGS-Wert: " preprod,devops "
        
      • Entfernen Sie außerdem im Abschnitt spec.template.spec.containers.env die Kommentarzeichen von diesen Name - Wert- Feldpaaren, wenn die angegebene Bedingung zutrifft:

        • NIM_WAF und NIM_WAF_PRECOMPILED_POLICIES – NGINX App Protect WAF ist im Image enthalten (Sie haben die Option -w in Schritt 3 des Erstellens des Docker-Images eingefügt), daher ist der Wert „true“ .
        • ACM_DEVPORTAL – Unterstützung für das App Connectivity Manager-Entwicklerportal ist im Image enthalten (Sie haben die Option -d in Schritt 3 des Erstellens des Docker-Images eingefügt), daher ist der Wert „true“ .
        Spezifikation: ... Vorlage: ... Spezifikation: Container: ... Umgebung: - Name: NIM_HOST ... #- Name: NAP_WAF # Wert: "true" #- Name: NAP_WAF_PRECOMPILED_POLICIES # Wert: "true" ... #- Name: ACM_DEVPORTAL # Wert: „true“
        
    2. Führen Sie das Skript nginxwithAgentStart.sh wie angegeben aus, um das Manifest anzuwenden und zwei Pods zu starten (wie von den Replikaten angegeben):2 Anweisung im Spezifikationsabschnitt des Manifests), jeweils mit NGINX Plus und NGINX Agent:

      $ ./scripts/nginxWithAgentStart.sh starten $ ./scripts/nginxWithAgentStart.sh stoppen
      
    3. Überprüfen Sie, ob jetzt zwei Pods ausgeführt werden: Jeder Pod führt eine NGINX-Plus-Instanz und einen NGINX-Agent aus, um mit der Steuerebene der NGINX Management Suite zu kommunizieren.

      $ kubectl get pods -n nim-test NAME BEREIT STATUS NEUSTART ALTER nginx-nim-7f77c8bdc9-hkkck 1/1 Läuft 0 1m nginx-nim-7f77c8bdc9-p2s94 1/1 Läuft 0 1m
      
    4. Greifen Sie auf die GUI des NGINX Instance Managers in der NGINX Management Suite zu und überprüfen Sie, ob zwei NGINX Plus-Instanzen mit dem Status „Online“ ausgeführt werden. In diesem Beispiel ist NGINX App Protect WAF nicht aktiviert.

      Screenshot des Fensters „Instanzenübersicht“ im NGINX Management Suite Instance Manager Version 2.7.0

    Erste Schritte

    Um die in diesem Beitrag besprochenen NGINX-Lösungen auszuprobieren, starten Sie noch heute eine 30-tägige kostenlose Testversion oder kontaktieren Sie uns, um Ihre Anwendungsfälle zu besprechen :

    Laden Sie NGINX Agent herunter – es ist kostenlos und Open Source.


„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."