NGINX.COM
Web Server Load Balancing with NGINX Plus

今年早些时候,我们推出了 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 用户界面,但该用户界面可能会发生变化。请将以下说明作为参考,并根据当前用户界面进行按需调整。

  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. 进入到 build 目录:

    $ cd NGINX-Demos/nginx-nms-docker/
  3. 运行 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。

  1. 对您在上一节中下载的 NGINX Management Suite 许可进行 Base64 编码,并将输出结果复制到剪贴板:

    $ base64 -w0 nginx-mgmt-suite.lic
    TulNRS1WZXJz...
  2. 使用您常用的编辑器,打开 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>"
  3. 检查并修改 manifests/certs 下的文件,通过设置要使用的 FQDN,自定义用于 TLS 卸载的 TLS 证书和密钥。默认情况下,nimDockerStart.sh 启动脚本通过 NGINX Ingress Controller 发布容器化的 NGINX Management Suite。
  4. 或者,可编辑 manifests/3.vs.yaml 并自定义用于访问 NGINX Management Suite 的主机名。

  5. 运行 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
  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

 

立刻行动

想要试用本文中讨论的 NGINX 解决方案,立即开始 30 天的免费试用,或联系我们讨论您的用例

Hero image
免费 O'Reilly 电子书:
《NGINX 完全指南》

更新于 2022 年,一本书了解关于 NGINX 的一切

关于作者

Fabrizio Fiorucci

欧洲、中东和非洲地区解决方案架构师

关于 F5 NGINX

F5, Inc. 是备受欢迎的开源软件 NGINX 背后的商业公司。我们为现代应用的开发和交付提供一整套技术。我们的联合解决方案弥合了 NetOps 和 DevOps 之间的横沟,提供从代码到用户的多云应用服务。访问 nginx-cn.net 了解更多相关信息。