今年早些时候,我们推出了 NGINX Management Suite 作为 NGINX 软件解决方案的新控制平面,以便您从单一管理平台配置、扩展、保护并监控 NGINX 数据平面上的用户应用和 REST API。
NGINX Management Suite 采用模块化设计:其核心为 Instance Manager 模块,它可针对您的整个 NGINX 开源版和 NGINX Plus 实例群实施跟踪、配置和可视化。截止撰写本文,API Connectivity Manager 是另一个可用模块,用于管理和编排作为 API 网关运行的 NGINX Plus。
NGINX Management Suite 支持裸机、Linux 虚拟机或容器化应用等运行方式。在 Kubernetes 上部署 NGINX Management Suite 时,我们建议您使用我们提供的 Helm chart。但出于特定目的,您可能需要构建自己的 Docker 镜像,并通过自定义 CI/CD 流水线管理其生命周期,而不必使用 Helm。
准备工作
我们提供了一个 GitHub 仓库,其中包含为 NGINX Management Suite 创建 Docker 镜像所需的资源,并支持以下版本的 Instance Manager 和 API Connectivity Manager:
- Instance Manager 2.4.0+
- API Connectivity Manager 1.0.0+
- Security Monitoring 1.0.0+
若要构建 Docker 镜像,您需要:
- Linux 主机(裸机或虚拟机)
- Docker 20.10+
- 私有注册表,用于推送目标 Docker 镜像
- 订阅 NGINX Management Suite(或获取 30 天免费试用版)
要运行 Docker 镜像,您需要:
- 正在运行的 Kubernetes 集群
- 有权访问 Kubernetes 集群的
kubectl
- 订阅基于 NGINX Plus 的 NGINX Ingress Controller(或获取 30 天免费试用版)
构建 Docker 镜像
按照以下说明构建 Docker 镜像。
注:在发布时,我们已尽力准确呈现 NGINX Management Suite 用户界面,但该用户界面可能会发生变化。请将以下说明作为参考,并根据当前用户界面进行按需调整。
-
克隆 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.
-
进入到 build 目录:
$ cd NGINX-Demos/nginx-nms-docker/
-
运行
docker
ps
以验证 Docker 是否正在运行,然后运行 buildNIM.sh 脚本构建 Docker 镜像。‑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
按照以下说明准备部署清单,并在 Kubernetes 上启动 NGINX Management Suite。
-
对您在上一节中下载的 NGINX Management Suite 许可进行 Base64 编码,并将输出结果复制到剪贴板:
$ base64 -w0 nginx-mgmt-suite.lic TulNRS1WZXJz...
-
使用您常用的编辑器,打开 manifests/1.nginx-nim.yaml 并做出如下变更:
-
在
spec.template.spec.containers
部分中,将默认镜像名称 (your.registry.tld/nginx-nim2:tag
) 替换为您在上一节第 3 步中使用‑t
选项指定的 Docker 镜像名称(在我们的示例中为 registry.ff.lan:31005/nginx-nms:2.5.1):spec: ... template: ... spec: containers: - name: nginx-nim2 image: your.registry.tld/nginx-nim2:tag
-
在
spec.template.spec.containers.env
部分中,通过将每个名字的值做下列替换来配置身份验证凭证:NIM_USERNAME
— (可选)将默认用户名admin
替换为用管理员帐户名。NIM_PASSWORD
— (必须)将默认密码nimadmin
替换为强密码NIM_LICENSE
— (必须)将<BASE64_ENCODED_LICENSE_FILE>
替换为在上面第 1 步中生成的 base64 编码许可。
spec: ... template: ... spec: containers: ... env: ... - name: NIM_USERNAME value: admin - name: NIM_PASSWORD value: nimadmin - name: NIM_LICENSE value: "<BASE64_ENCODED_LICENSE_FILE>"
-
- 检查并修改 manifests/certs 下的文件,通过设置要使用的 FQDN,自定义用于 TLS 卸载的 TLS 证书和密钥。默认情况下,nimDockerStart.sh 启动脚本通过 NGINX Ingress Controller 发布容器化的 NGINX Management Suite。
-
或者,可编辑 manifests/3.vs.yaml 并自定义用于访问 NGINX Management Suite 的主机名。
-
运行 nimDockerStart.sh,在 Kubernetes 集群中启动 NGINX Management Suite。如跟踪所示,它作为 nginx-nim2 pod 运行。该脚本还将 ClickHouse 的 pod 初始化为后端数据库,并初始化 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
-
验证 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 天的免费试用,或联系我们讨论您的用例:
- NGINX Management Suite
- NGINX Ingress Controller(基于 NGINX Plus)