KubernetesのNMSデプロイ

本手順ではいくつかの環境でNMS/NIMをご利用いただくにあたり、セットアップ手順を複数紹介します。 環境にあった手順を実施してください。

こちらの作業は NGINX Management Suite Guide の内容を参照し、実行しています

ラボ環境で動作を確認される場合、作業ホストは ubuntu-master(10.1.1.8) となります

1. 事前作業

1. 事前セットアップ、HELMのインストール より手順を抜粋し、対象ホストにHELMをインストールします

curl https://baltocdn.com/helm/signing.asc | gpg --dearmor | sudo tee /usr/share/keyrings/helm.gpg > /dev/null
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/helm.gpg] https://baltocdn.com/helm/stable/debian/ all main" | sudo tee /etc/apt/sources.list.d/helm-stable-debian.list
sudo apt-get update
sudo apt-get install helm

HELMのVersionを確認します

helm version

3. NICのセットアップ より手順を抜粋し、対象ホストにHELMをインストールします (こちらの手順では、NSMとの連携を実施していない、 nic2 を利用します)

cd ~/
git clone https://github.com/BeF5/f5j-nginx-nim-lab
git clone https://github.com/BeF5/f5j-nginx-observability-lab.git --branch v1.1.0
git clone https://github.com/nginxinc/kubernetes-ingress.git --branch v2.4.1

cd ~/kubernetes-ingress/
cp ~/nginx-repo* .
ls nginx-repo.*
make debian-image-nap-dos-plus PREFIX=registry.example.com/root/nic/nginxplus-ingress-nap-dos TARGET=container TAG=2.4.1
docker login registry.example.com
 Username: root       << 左の文字列を入力
 Password: password   << 左の文字列を入力
docker push registry.example.com/root/nic/nginxplus-ingress-nap-dos:2.4.1

HELMでNICをデプロイします

cd ~/kubernetes-ingress/deployments/helm-chart-dos-arbitrator
helm upgrade --install appdos-arbitrator . \
 --namespace nginx-ingress \
 --create-namespace

cd ~/kubernetes-ingress/deployments/helm-chart
cp ~/f5j-nginx-observability-lab/prep/helm/nic2-addvalue.yaml .
helm upgrade --install nic2 -f nic2-addvalue.yaml . -n nginx-ingress

インストールの結果を確認します

helm list -n nginx-ingress
実行結果サンプル
1
2
3
NAME                    NAMESPACE       REVISION        UPDATED                                 STATUS          CHART                                   APP VERSION
appdos-arbitrator       nginx-ingress   1               2022-12-13 15:41:32.431534051 +0000 UTC deployed        nginx-appprotect-dos-arbitrator-0.1.0   1.1.0
nic2                    nginx-ingress   1               2022-12-13 15:50:28.582793864 +0000 UTC deployed        nginx-ingress-0.15.1                    2.4.1

NICへ通信を転送するための設定を行います。

NodePortの情報を確認します。

kubectl get svc -n nginx-ingress | grep nginx-ingress
実行結果サンプル
1
nic2-nginx-ingress       NodePort    10.110.91.42   <none>        80:31253/TCP,443:31851/TCP   43s

表示されているポート番号を確認してください。これらの情報を元に、NGINXの設定を作成します。

vi ~/f5j-nginx-nim-lab/prep/nginx.conf
実行結果サンプル
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
user  nginx;
worker_processes  auto;

error_log  /var/log/nginx/error.log notice;
pid        /var/run/nginx.pid;

events {
    worker_connections  1024;
}


# TCP/UDP load balancing
#
stream {

    ##  TCP/UDP LB for NIC2 nginx2 ingressclass
    server {
        listen 80;
        proxy_pass localhost:31253;  # nic2 http port of NodePort
    }
    server {
        listen 443;
        proxy_pass localhost:31851;  # nic2 https port of NodePort
    }

}

設定をコピーし、反映します

sudo cp /etc/nginx/nginx.conf /etc/nginx/nginx.conf-
sudo cp ~/f5j-nginx-nim-lab/prep/nginx.conf /etc/nginx/nginx.conf
sudo nginx -s reload

Storage Class, Persistent Volume を作成します。こちらの内容は環境に合わせて適宜変更ください

cd ~/f5j-nginx-nim-lab/prep
kubectl apply -f local-sc.yaml
kubectl apply -f local-pv-10-1-1-9.yaml

kubectl get sc,pv
実行結果サンプル
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
NAME                                        PROVISIONER                    RECLAIMPOLICY   VOLUMEBINDINGMODE      ALLOWVOLUMEEXPANSION   AGE
storageclass.storage.k8s.io/local-storage   kubernetes.io/no-provisioner   Delete          WaitForFirstConsumer   false                  24s

NAME                    CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS      CLAIM   STORAGECLASS    REASON   AGE
persistentvolume/pv01   1Gi        RWO            Delete           Available           local-storage            12s
persistentvolume/pv02   1Gi        RWO            Delete           Available           local-storage            12s
persistentvolume/pv03   1Gi        RWO            Delete           Available           local-storage            12s
persistentvolume/pv04   1Gi        RWO            Delete           Available           local-storage            12s
persistentvolume/pv05   1Gi        RWO            Delete           Available           local-storage            12s
persistentvolume/pv06   1Gi        RWO            Delete           Available           local-storage            12s

2. HELMによるNMSのinstall

Note

こちらの手順は NMS v2.6.0 のInstall手順となります

F5 Supportサイト MyF5 にログインし、HELMに利用するパッケージをダウンロードすることでインストールが可能となります。

画面上部 RESOURCES > Downloads を開き、各プルダウンに以下の内容を選択しダウンロードします(2023/11/15時点)

Group NGINX
Product Line NGINX Instance Manager
Product Version 2.14.1
Linux Distribution helmchart
Distribution Version 1.21.3
Architecture k8s
../../_images/myf5-nsm-helm-download.png

HELM Installに利用するDocker Imagesファイルが表示されます。ダウンロードし、Installを行う環境へ送付します 取得するファイルは以下のような名称となります。

nms-helm-2.14.1.tar.gz

ダウンロードしたファイルをKubernetesへのデプロイを行うホストへ転送します

cd ~/
mkdir nim-install
tar -xf nms-helm-2.14.1.tar.gz -C ./nim-install
# gzip で圧縮されていない模様

展開した各Docker Imageをloadします

cd ~/nim-install/
ls | grep -v hybrid | awk '{ print  "docker load -i "$1 }' | sh

結果を確認します

docker images | grep nginxdevops
実行結果サンプル
1
2
3
4
5
nginxdevopssvcs.azurecr.io/indigo-tools-docker/platform/release-2-14-1/apigw          latest    585fd202532e   3 weeks ago     148MB
nginxdevopssvcs.azurecr.io/indigo-tools-docker/platform/release-2-14-1/integrations   latest    5e4f407f4e1f   3 weeks ago     109MB
nginxdevopssvcs.azurecr.io/indigo-tools-docker/platform/release-2-14-1/ingestion      latest    9c346bac76b4   3 weeks ago     115MB
nginxdevopssvcs.azurecr.io/indigo-tools-docker/platform/release-2-14-1/dpm            latest    cb116746f789   3 weeks ago     125MB
nginxdevopssvcs.azurecr.io/indigo-tools-docker/platform/release-2-14-1/core           latest    e6084032b6ee   3 weeks ago     117MB

Docker Imageのタグを変更します

# 予め nms を registry.example.com に作成する
docker images | grep nginxdevops | awk '{ print $1 }' |  awk -F"2-14-1" '{ print "docker tag "$1"2-6-0"$2" registry.example.com/root/nms"$2":2.14.1"  }' |sh

コンテナイメージをRegistryにPushします

docker images | grep nms | awk '{ print "docker push "$1":"$2}' | sh

以下手順でNGINXが提供するHELMチャートの展開が可能です。

## cd ~/nim-install/
tar -xf nms-hybrid-2.14.1.tgz

ラボ環境では予め作成したHELMチャートを利用します。

## cd ~/nim-install/
mv nms-hybrid/values.yaml nms-hybrid/values.yaml-
cp ~/f5j-nginx-nim-lab/prep/nms-values.yaml nms-hybrid/values.yaml

HELMを利用しデプロイします。この例ではオプションパラメータを指定し、参照する各Imageを指定します

## cd ~/nim-install/
helm upgrade --install \
--set adminPasswordHash=$(openssl passwd -1 "NIMPassword1234") \
--set apigw.image.repository=registry.example.com/root/nms/apigw \
--set apigw.image.tag=2.14.1 \
--set core.image.repository=registry.example.com/root/nms/core \
--set core.image.tag=2.14.1 \
--set dpm.image.repository=registry.example.com/root/nms/dpm \
--set dpm.image.tag=2.14.1 \
--set ingestion.image.repository=registry.example.com/root/nms/ingestion \
--set ingestion.image.tag=2.14.1 \
--set integrations.image.repository=registry.example.com/root/nms/integrations \
--set integrations.image.tag=2.14.1 \
--set persistence.enable=false \
nim ./nms-hybrid
## Persistent Volume の作成が必要

正しくデプロイされたことを確認します

helm list
実行結果サンプル
1
2
NAME    NAMESPACE       REVISION        UPDATED                                 STATUS          CHART                   APP VERSION
nim     default         1               2022-12-13 15:32:57.809164688 +0000 UTC deployed        nms-hybrid-2.14.1        2.14.1

Persistent Volumeの状態を確認します。デプロイする各Podに割り当てられていることが確認できます

kubectl get sc,pv
実行結果サンプル
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
NAME                                        PROVISIONER                    RECLAIMPOLICY   VOLUMEBINDINGMODE      ALLOWVOLUMEEXPANSION   AGE
storageclass.storage.k8s.io/local-storage   kubernetes.io/no-provisioner   Delete          WaitForFirstConsumer   false                  13m

NAME                    CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS   CLAIM                         STORAGECLASS    REASON   AGE
persistentvolume/pv01   1Gi        RWO            Delete           Bound    default/dpm-dqlite            local-storage            13m
persistentvolume/pv02   1Gi        RWO            Delete           Bound    default/dpm-nats-streaming    local-storage            13m
persistentvolume/pv03   1Gi        RWO            Delete           Bound    default/core-secrets          local-storage            13m
persistentvolume/pv04   1Gi        RWO            Delete           Bound    default/core-dqlite           local-storage            13m
persistentvolume/pv05   1Gi        RWO            Delete           Bound    default/integrations-dqlite   local-storage            13m
persistentvolume/pv06   1Gi        RWO            Delete           Bound    default/clickhouse            local-storage            13m

各PodがRunningであることを確認します

kubectl get pod
実行結果サンプル
1
2
3
4
5
6
7
NAME                           READY   STATUS    RESTARTS   AGE
apigw-749449768c-hnl2l         1/1     Running   0          30s
clickhouse-86f5dd868b-ptdh5    1/1     Running   0          31s
core-6d4c9b8ddb-r9xp2          1/1     Running   0          31s
dpm-6ffb9c9ff-c7cmx            1/1     Running   0          31s
ingestion-696445c77d-br9wr     1/1     Running   0          31s
integrations-db4c7c66c-gtwhd   1/1     Running   0          31s

3. 外部から接続するためNICのセットアップ

cat ~/f5j-nginx-nim-lab/prep/nms-apigw-vs.yaml
実行結果サンプル
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
apiVersion: k8s.nginx.org/v1
kind: VirtualServer
metadata:
  name: nms-vs
spec:
  ingressClassName: nginx2
  host: nms.example.com
  upstreams:
  - name: nms
    service: apigw
    port: 443
    tls:
      enable: true
  routes:
  - path: /
    action:
      pass: nms

設定を反映します

kubectl apply -f ~/f5j-nginx-nim-lab/prep/nms-apigw-vs.yaml

4. NMS への接続

踏み台ホストにてChromeを開き、 http://nms.example.com/ui に接続してください ログイン情報は以下です。

username admin  
password NIMPassword1234 HELMで指定した文字列

以下の様にTop画面が表示されます

../../_images/nim-login1.png

Sign In をクリックすると Basic認証によるポップアップが表示されます。Username admin 、 Password は Install時の出力で予め確認した文字列 を入力してください ログインが完了すると以下のような画面が表示されます

../../_images/nim-top1.png