Helmを使用せずにNGINX Management SuiteをデプロイするためのDockerイメージの構築

NGINX | 2023年2月27日

今年初め、NGINX Management Suiteを発表しました。これはNGINXソフトウェアソリューション向けの新しいコントロールプレーンであり、単一の画面からNGINXデータプレーン上のユーザーアプリケーションとREST APIを構成、拡張、保護、監視できます。

NGINX Management Suiteはモジュール式に設計されており、その中核となるのがInstance Managerモジュールです。このモジュールでは、保有するすべてのNGINX Open SourceおよびNGINX Plusインスタンスを追跡、設定し、可視化できます。本稿執筆時点で利用可能なもう1つのモジュールはAPI Connectivity Managerで、APIゲートウェイとして稼働するNGINX Plusの管理とオーケストレーションに使用します。

NGINX Management Suiteは、ベアメタル、Linux仮想マシン、またはコンテナとして実行できます。Kubernetesへのデプロイには、F5が提供するHelmチャートの使用を推奨します。ただし、特定の用途では、独自のDockerイメージをビルドし、必ずしもHelmに依存しないカスタムCI/CDパイプラインでそのライフサイクルを管理する必要がある場合があります。

[編集者 – Dockerイメージのビルドプロセスを完全に自動化するため、この記事は2023年2月に更新されました。]

前提条件

NGINX Management SuiteのDockerイメージの作成に必要なリソースを収録した、GitHubリポジトリを提供しています。このリポジトリは、以下のバージョンのInstance ManagerおよびAPI Connectivity Managerをサポートしています。

  • Instance Manager 2.4.0+
  • API Connectivity Manager 1.0.0+
  • Security Monitoring 1.0.0+

Dockerイメージをビルドするには、以下が必要です。

  • Linuxホスト(ベアメタルまたはVM)
  • Docker 20.10+
  • 対象のDockerイメージをプッシュできるプライベートレジストリ
  • NGINX Management Suiteのサブスクリプション(または30日間の無料トライアル)

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

  • 稼働中のKubernetesクラスター
  • kubectl(Kubernetesクラスターへのアクセス権が必要)
  • 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 0 
Receiving objects: 100% (215/215), 2.02 MiB | 1.04 MiB/s, done. 
Resolving deltas: 100% (108/108), done.
  1. ビルドディレクトリに移動します:
$ cd NGINX-Demos/nginx-nms-docker/
  1. Dockerが実行中であることを確認するために、docker psを実行してから、DockerイメージをビルドするためにbuildNIM.shスクリプトを実行します。‑iオプションは自動ビルドモードを設定します。‑Cと‑Kは必須オプションで、それぞれNGINX Management Suiteの証明書とキーの名前を指定します。‑tオプションは、イメージのプッシュ先となるプライベートレジストリの場所と名前を指定します。
$ ./scripts/buildNIM.sh -i -C nginx-repo.crt -K nginx-repo.key -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を実行する

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

  1. 前のセクションのステップ4でダウンロードしたNGINX Management SuiteライセンスをBase64でエンコードし、出力をクリップボードにコピーします:
$ base64 -w0 nginx-mgmt-suite.licTulNRS1WZXJz...
  1. 任意のエディターでmanifests/1.nginx-nim.yamlを開き、次の変更を加えます。
    • In the spec.template.spec.containersセクションで、デフォルトのイメージ名(your.registry.tld/nginx-nim2:tag)を、前のセクションの‑tオプションを使用してステップ3で指定したDockerイメージ名に置き換えます(この例ではregistry.ff.lan:31005/nginx-nms:2.5.1)。
spec:  ...
  template:
	...
	spec:
  	containers:
      - name: nginx-nim2
	    image: your.registry.tld/nginx-nim2:tag
  • In the spec.template.spec.containers.envセクションで、指定された各valueのnameフィールドを次のように置き換えて、認証情報を設定します。
spec:  ...
  template:
    ...
      spec:
        containers:
          ...
          env:
            ...
            - name: NIM_USERNAME
              value: admin
            - name: NIM_PASSWORD
              value: nimadmin
            - name: NIM_LICENSE
              value: "<BASE64_ENCODED_LICENSE_FILE>"
  • NIM_USERNAME – (任意)デフォルトの「admin」を管理者アカウント名に置き換えます。
  • NIM_PASSWORD – (必須)デフォルトの「nimadmin」を強力なパスワードに置き換えます。
  • NIM_LICENSE –(必須)デフォルトの「<BASE64_ENCODED_LICENSE_FILE>」を、上記のステップ1で生成したBase64エンコード済みライセンスに置き換えます。
  1. 使用するFQDNを設定し、manifests/certs配下のファイルを確認、変更して、TLSオフロードに使用するTLS証明書と鍵をカスタマイズします。デフォルトでは、nimDockerStart.sh起動スクリプトにより、コンテナ化されたNGINX Management SuiteがNGINX Ingress Controller経由で公開されます。
  2. 必要に応じて、manifests/3.vs.yamlを編集し、NGINX Management Suiteへのアクセスに使用するホスト名をカスタマイズします。
  3. KubernetesクラスターでNGINX Management Suiteを起動するには、nimDockerStart.shを実行します。トレースに示されているとおり、NGINX Management Suiteはnginx-nim2ポッドとして実行されます。このスクリプトは、バックエンドデータベースとしてClickHouseのポッドを、分析の可視化用にGrafanaのポッドも初期化します。詳細については、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
  1. 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

はじめに

この記事で紹介したNGINXソリューションをお試しいただくには、今すぐ30日間の無料トライアルを開始するか、ユースケースについてご相談ください。


共有

著者について

Fabrizio Fiorucci
Fabrizio FiorucciNGINXソリューションアーキテクト | F5 (EMEA)

Fabrizio Fiorucciのその他のブログ記事

関連するブログ記事

チュートリアル:NGINXを使用してアプリケーション向けにOpenTelemetryを構成する
NGINX | 2024/01/18

チュートリアル:NGINXを使用してアプリケーション向けにOpenTelemetryを構成する

OpenTelemetryを使用してNGINXサーバーの状態と健全性をより明確に把握することで、問題のトラブルシューティングを行い、Webアプリケーションのパフォーマンスを向上できます。

AkitaのNGINX Plus認定モジュールでAPIエンドポイントの問題を特定・修正
NGINX | 2023/05/31

AkitaのNGINX Plus認定モジュールでAPIエンドポイントの問題を特定・修正

Akita SoftwareのAPIオブザーバビリティ向け新しいNGINX Plus Certified Moduleを活用して、APIエンドポイントの問題をより迅速に特定し、修正できます。

JavaプロジェクトをスキャフォールディングしてKubernetesネイティブアプリを構築する方法
NGINX | 2023/02/09

JavaプロジェクトをスキャフォールディングしてKubernetesネイティブアプリを構築する方法

Red HatのシニアプリンシパルデベロッパーアドボケイトであるDaniel Oh氏が、Javaプロジェクトをゼロから構築するためのひな形を作成し、Kubernetesネイティブアプリケーションとしてビルドする方法を解説します。

F5 NGINXaaS for Azureのご紹介:Microsoft Azureでネイティブに利用できるSaaS型ロードバランシング
NGINX | 2022/05/24

F5 NGINXaaS for Azureのご紹介:Microsoft Azureでネイティブに利用できるSaaS型ロードバランシング

NGINXaaS for Azureは、NGINX PlusをAzureネイティブのSaaSとして利用できるサービスです。NGINXの設定を容易にリフト&シフトできるため、クラウド導入とモダンアプリの展開を加速できます。

SELinuxでNGINXおよびNGINX Plusを使用する
NGINX | 2018/08/17

SELinuxでNGINXおよびNGINX Plusを使用する

Red Hat Enterprise Linux(RHEL)および関連ディストリビューションでSecurity-Enhanced Linux(SELinux)を有効にすると、デフォルト設定によりNGINXとNGINX Plusの一部の操作が制限されます。この記事では、すべての機能を利用できるようにSELinuxの設定を変更する方法について説明します。

NGINX PlusによるAWS Auto Scalingグループの負荷分散
NGINX | 2017/03/06

NGINX PlusによるAWS Auto Scalingグループの負荷分散

新しいnginx-asg-sync統合ソフトウェアにより、NGINX PlusはAWS Auto Scalingグループの負荷を直接分散できるため、クラウドでの負荷分散がさらに柔軟になります