今年初め私たちは、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に適合させてください。
-
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.
-
ビルドディレクトリに移動します。
$ cd NGINX-Demos/nginx-nms-docker/
- MyF5.comのアカウントにログインし、NGINX Management Suiteのページに移動して、SubscriptionsまたはTrialsのいずれかを選択します。
-
+Licenses and Certificatesをクリックし、表示されるInstance [License]パネルのステップ3でDownload Licenseをクリックして、ライセンスをローカルディスクにコピーします。
- download the latest versionリンクをクリックし(ステップ1)、NGINX Management Suiteソフトウェアをダウンロードします。
-
表示されるDownloadsページで、各フィールドに以下のように値を選択します(選択に応じて新しいフィールドが開きます)。
- Group – NGINX
- Product Line – NGINX API Connectivity Manager
- Product version – 最新バージョン(スクリーンショットでは1.2.0)
- Linux Distribution – ubuntu
- Distribution Version – 22.04
- Architecture – amd64
-
Download Filesセクションまでスクロールし、nms-api-connectivity-manager_*とnms-instance-manager_*の2つの.debパッケージの行のそれぞれでDownloadをクリックします。
-
ダウンロードしたパッケージを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
-
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を起動します。
-
前のセクションのステップ4でダウンロードしたNGINX Management SuiteのライセンスをBase64でエンコードして、その出力をクリップボードにコピーします。
$ base64 -w0 nginx-mgmt-suite.lic TulNRS1WZXJz...
-
任意のエディタを使って、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>"
- (オプション)28行目で、デフォルトの
-
- manifests/certs以下のファイルを確認および修正し、使用したいFQDNを設定することでTLSオフロードに使用するTLS証明書と鍵をカスタマイズします。デフォルトでは、nimDockerStart.sh起動スクリプトは、コンテナ化されたNGINX Management SuiteをNGINX Ingress Controllerを介して公開します。
-
オプションとして、manifests/3.vs.yamlを編集し、NGINX Management Suiteへのアクセスに使用されるホスト名をカスタマイズします。
-
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
-
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