BLOG | NGINX

Helmを使わずにNGINX Management Suiteを導入するためのDockerイメージを構築する

NGINX-Part-of-F5-horiz-black-type-RGB
Fabrizio Fiorucci サムネール
Fabrizio Fiorucci
Published December 12, 2022

今年初め私たちは、NGINXソフトウェアソリューションの新しいコントロールプレーンとして、NGINXデータプレーン上のユーザーアプリケーションとREST APIの設定、拡張、保護、監視を単一インターフェイスから実行できるNGINX Management Suiteを発表しました

モジュール式設計のNGINX Management Suiteは、その中核となるInstance Managerモジュールにより、NGINX Open SourceとNGINX Plusインスタンスのフリート全体の追跡、設定および可視化を提供します。この記事の執筆時点では、API Connectivity Managerは、APIゲートウェイとして動作するNGINX Plusを管理およびオーケストレーションするその他のモジュールとして使用できます。

NGINX Management Suiteは、ベアメタル上で、Linux仮想マシンとして、またはコンテナ化して実行できます。Kubernetes上に導入する場合は、私たちが提供するHelmチャートを使用することをお勧めしますが、特定の目的によっては、独自のDockerイメージを構築し、Helmに依存しなくてもいいカスタムCI/CDパイプラインでライフサイクルを管理する必要がある場合もあります。

前提条件

私たちは、NGINX Management SuiteのDockerイメージを作成するために必要なリソースをGitHubリポジトリで提供し、以下のバージョンのInstance ManagerとAPI Connectivity Managerをサポートしています。

  • Instance Manager 2.4.0以降
  • API Connectivity Manager 1.0.0以降

Dockerイメージを構築するには、以下のものが必要です。

  • Linuxホスト(ベアメタルまたはVM)
  • Docker 20.10以降
  • ターゲットDockerイメージをプッシュできるプライベートレジストリ
  • NGINX Management Suiteのサブスクリプション(または30日間無料のトライアル)およびソフトウェアをダウンロードするためのMyF5.comのアカウント

Dockerイメージを実行するには、以下のものが必要です。

  • 実行中のKubernetesクラスタ
  • Kubernetesクラスタにアクセスできるkubectl
  • NGINX PlusをベースとしたNGINX Ingress Controllerのサブスクリプション(または30日間の無料トライアル

Dockerイメージの構築

以下の手順に従い、Dockerイメージを構築します。

注:掲載時点でのNGINX Management SuiteのUIの正確性を確保するためのあらゆる努力を払っていますが、UIは変更される可能性があります。これらの手順は参考として使用し、必要に応じて現在のUIに適合させてください。

  1. GitHub リポジトリのクローンを作成します。

    $ git clone https://github.com/nginxinc/NGINX-DemosCloning into 'NGINX-Demos'...remote: Enumerating objects: 215, done.remote: Counting objects: 100% (215/215), done.remote: Compressing objects: 100% (137/137), done.remote: Total 215 (delta 108), reused 171 (delta 64), pack-reused 0Receiving objects: 100% (215/215), 2.02 MiB | 1.04 MiB/s, done.Resolving deltas: 100% (108/108), done.
    
  2. ビルドディレクトリに移動します。

    $ cd NGINX-Demos/nginx-nms-docker/
    
  3. MyF5.comのアカウントにログインし、NGINX Management Suiteのページに移動して、SubscriptionsまたはTrialsのいずれかを選択します。
  4. +Licenses and Certificatesをクリックし、表示されるInstance [License]パネルのステップ3でDownload Licenseをクリックして、ライセンスをローカルディスクにコピーします。

  5. download the latest versionリンクをクリックし(ステップ1)、NGINX Management Suiteソフトウェアをダウンロードします。
  6. 表示されるDownloadsページで、各フィールドに以下のように値を選択します(選択に応じて新しいフィールドが開きます)。

    • Group – NGINX
    • Product Line – NGINX API Connectivity Manager
    • Product version – 最新バージョン(スクリーンショットでは1.2.0
    • Linux Distribution – ubuntu
    • Distribution Version – 22.04
    • Architecture – amd64

    Screenshot of Downloads window for NGINX API Connectivity Manager software

  7. Download Filesセクションまでスクロールし、nms-api-connectivity-manager_*nms-instance-manager_*の2つの.debパッケージの行のそれぞれでDownloadをクリックします。

    Screenshot of Download Files window for NGINX Management Suite software packages

  8. ダウンロードしたパッケージをnim-files/ディレクトリにコピーします(結果は以下のように表示されます)。

    $ ls -al nim-files/total 87216drwxrwxr-x 2 f5 f5     4096 Mon DD hh:mm .drwxrwxr-x 8 f5 f5     4096 Mon DD hh:mm ..-rw-r--r-- 1 f5 f5 10724974 Mon DD hh:mm nms-api-connectivity-manager_1.2.0.668430332~jammy_amd64.deb-rw-r--r-- 1 f5 f5 78567074 Mon DD hh:mm nms-instance-manager_2.5.1-663136348~jammy_amd64.deb-rw-rw-r-- 1 f5 f5        0 Mon DD hh:mm .placeholder
    
  9. docker psを実行してDockerが起動していることを確認し、buildNIM.shスクリプトを実行してDockerイメージを構築します。‑nオプションと ‑aオプションは、それぞれInstance ManagerとAPI Connectivity Managerの.debパッケージファイル名を指定し、‑tオプションは、イメージがプッシュされるプライベートレジストリの場所と名前を指定します。

    $ ./scripts/buildNIM.sh -n nim-files/nms-instance-manager_2.5.1-663136348~jammy_amd64.deb -a nim-files/nms-api-connectivity-manager_1.2.0.668430332~jammy_amd64.deb -t registry.ff.lan:31005/nginx-nms:2.5.1==> Building NGINX Management Suite docker imageSending build context to Docker daemon  92.19MBStep 1/18 : FROM ubuntu:22.04---> a8780b506fa4Step 2/18 : ARG NIM_DEBFILE---> Running in 0f2354280c34Removing intermediate container 0f2354280c34[…]---> 0588a050c852Step 18/18 : CMD /deployment/startNIM.sh---> Running in d0cc5466a43dRemoving intermediate container d0cc5466a43d---> 25117ec0410aSuccessfully built 25117ec0410aSuccessfully tagged registry.ff.lan:31005/nginx-nms:2.5.1The push refers to repository [registry.ff.lan:31005/nginx-nms]9c4918474e3a: Pushed42543d044dbb: Pushed1621b2ec0a5e: Pushedc6a464fc6a79: Pushed75fa1d3c61bb: Pushed3501fcf5dbd8: Pushedd4a221057e67: Pushed9ad05eafed57: Pushedf4a670ac65b6: Pushed2.5.1: digest: sha256:9a70cfdb63b71dc31ef39e4f20a1420d8202c85784cb037b45dc0e884dad74c9 size: 2425
    

Kubernetes上でのNGINX Management Suiteの実行

以下の手順に従い、Kubernetes上でDeploymentマニフェストを準備し、NGINX Management Suiteを起動します。

  1. 前のセクションのステップ4でダウンロードしたNGINX Management SuiteのライセンスをBase64でエンコードして、その出力をクリップボードにコピーします。

    $ base64 -w0 nginx-mgmt-suite.licTulNRS1WZXJz...
    
  2. 任意のエディタを使って、manifests/1.nginx-nim.yamlを開き、以下のように変更します。

    • 19行目で、デフォルトのイメージ名(your.registry.tld/nginx-nim2:tag)を、前のセクションのステップ9‑tオプションを使用して指定したDockerイメージの名前(この例ではregistry.ff.lan:31005/nginx-nms:2.5.1)に置き換えます。

      16    spec:
      17      containers:
      18      - name: nginx-nim2
      19        image: your.registry.tld/nginx-nim2:tag
      
    • Instance Manager Environmentセクションで、認証情報を設定します。

      • (オプション)28行目で、デフォルトのadminを別の管理者アカウント名に置き換えます。
      • 30行目で、デフォルトのnimadminを強力なパスワードに置き換えます。
      • 32行目で、<BASE64_ENCODED_LICENSE_FILE>を、上記のステップ1で生成したbase64エンコードされたライセンスに置き換えます。
      25 env:
      26   ### NGINX Instance Manager environment
      27   - name: NIM_USERNAME
      28     value: admin
      29   - name: NIM_PASSWORD
      30     value: nimadmin
      31   - name: NIM_LICENSE
      32     value: "<BASE64_ENCODED_LICENSE_FILE>"
      
  3. manifests/certs以下のファイルを確認および修正し、使用したいFQDNを設定することでTLSオフロードに使用するTLS証明書と鍵をカスタマイズします。デフォルトでは、nimDockerStart.sh起動スクリプトは、コンテナ化されたNGINX Management SuiteをNGINX Ingress Controllerを介して公開します。
  4. オプションとして、manifests/3.vs.yamlを編集し、NGINX Management Suiteへのアクセスに使用されるホスト名をカスタマイズします。

  5. nimDockerStart.shを実行し、KubernetesクラスタでNGINX Management Suiteを起動します。これは、トレースに示すように、nginx-nim2 Podとして実行されます。また、このスクリプトは、バックエンドデータベースとしてClickHouseのPod、および分析可視化としてGrafanaのPodを初期化します。詳しくは、GitHubリポジトリのREADMEをご覧ください。

    $ ./scripts/nimDockerStart.sh start
    namespace/nginx-nim2 created
    ~/NGINX-NIM2-Docker/manifests/certs ~/NGINX-NIM2-Docker
    Generating a RSA private key
    .....................................+++++
    .....................................+++++
    writing new private key to 'nim2.f5.ff.lan.key'
    -----
    secret/nim2.f5.ff.lan created
    configmap/clickhouse-conf created
    configmap/clickhouse-users created
    persistentvolumeclaim/pvc-clickhouse created
    deployment.apps/clickhouse created
    service/clickhouse created
    deployment.apps/nginx-nim2 created
    service/nginx-nim2 created
    service/nginx-nim2-grpc created
    persistentvolumeclaim/pvc-grafana-data created
    persistentvolumeclaim/pvc-grafana-log created
    deployment.apps/grafana created
    service/grafana created
    virtualserver.k8s.nginx.org/nim2 created
    virtualserver.k8s.nginx.org/grafana created
    ~/NGINX-NIM2-Docker
    
  6. 3つのPodが稼働していることを確認します。

    $ kubectl get pods -n nginx-nim2
    NAME                        READY     STATUS    RESTARTS   AGE
    clickhouse-759b65db8c-74pn5   1/1     Running   0          63s
    grafana-95fbbf5c-jczgk        1/1     Running   0          63s
    nginx-nim2-5f54664754-lrhmn   1/1     Running   0          63s
    

NGINX Management Suiteへのアクセス

NGINX Management Suiteにアクセスするには、ブラウザでhttps://nim2.f5.ff.lan(または前のセクションのステップ4で設定した代替ホスト名)に移動します。前のセクションのステップ2で設定した認証情報を使用してログインします。

NGINX Management Suiteの停止

NGINX Management SuiteのDockerインスタンスを停止して削除するには、以下のコマンドを実行します。

$ ./scripts/nimDockerStart.sh stopnamespace "nginx-nim2" deleted

"This blog post may reference products that are no longer available and/or no longer supported. For the most current information about available F5 NGINX products and solutions, explore our NGINX product family. NGINX is now part of F5. All previous NGINX.com links will redirect to similar NGINX content on F5.com."