NGINX.COM
Web Server Load Balancing with NGINX Plus

今年初め私たちは、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-Demos
    Cloning 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 0
    Receiving 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をクリックして、ライセンスをローカルディスクにコピーします。

    Screenshot of Instance [License] panel on TRIALS  NGINX MANAGEMENT SUITE page at f5.com

  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 87216
    drwxrwxr-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 image
    Sending build context to Docker daemon  92.19MB
    Step 1/18 : FROM ubuntu:22.04
    ---> a8780b506fa4
    Step 2/18 : ARG NIM_DEBFILE
    ---> Running in 0f2354280c34
    Removing intermediate container 0f2354280c34
    […]
    ---> 0588a050c852
    Step 18/18 : CMD /deployment/startNIM.sh
    ---> Running in d0cc5466a43d
    Removing intermediate container d0cc5466a43d
    ---> 25117ec0410a
    Successfully built 25117ec0410a
    Successfully tagged registry.ff.lan:31005/nginx-nms:2.5.1
    The push refers to repository [registry.ff.lan:31005/nginx-nms]
    9c4918474e3a: Pushed
    42543d044dbb: Pushed
    1621b2ec0a5e: Pushed
    c6a464fc6a79: Pushed
    75fa1d3c61bb: Pushed
    3501fcf5dbd8: Pushed
    d4a221057e67: Pushed
    9ad05eafed57: Pushed
    f4a670ac65b6: Pushed
    2.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.lic
    TulNRS1WZXJz...
  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 stop
namespace "nginx-nim2" deleted
Hero image
NGINXクックブック 設定レシピ集(日本語版)

待望の【O'Reilly】NGINX Cookbook日本語版がついに完成!NGINXクックブックは、NGINXを最大限に活用する方法を解説しています。



著者について

Fabrizio Fiorucci

Solutions Architect, EMEA

About F5 NGINX

F5 NGINXについて
F5, Inc.は、人気のオープンソースプロジェクト「NGINX」を支援しています。NGINXはモダンアプリケーションを開発・構築するためのテクノロジースイートを提供しています。NGINXとF5製品との併用で、コードからユーザーまでの広範なアプリケーション領域をサポートし、マルチクラウドアプリケーションサービスとしてNetOpsとDevOps間の課題を解決します。

詳しくはnginx.co.jpをご覧ください。Twitterで@nginxをフォローして会話に参加することもできます。