构建用于在不使用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实例群进行跟踪和配置,并提供可见性。截至本文撰写时,另一个可用模块是API Connectivity Manager,用于管理和编排作为API网关运行的NGINX Plus。

NGINX Management Suite可以在裸机、Linux虚拟机或容器中运行。建议使用我们提供的Helm chart在Kubernetes上进行部署,但出于特定用途,您可能需要自行构建Docker镜像,并通过不一定依赖Helm的自定义CI/CD流水线管理其生命周期。

[编辑:本文已于2023年2月更新,实现Docker镜像构建流程的完全自动化。]

先决条件

我们提供了一个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集群
  • 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 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

按照以下说明准备Deployment清单,并在Kubernetes上启动NGINX Management Suite。

  1. 对在上一节第 4 步中下载的 NGINX Management Suite 许可证进行 Base64 编码,并将输出复制到剪贴板:
$ base64 -w0 nginx-mgmt-suite.licTulNRS1WZXJz...
  1. 使用常用编辑器打开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部分,通过在每个指定name对应的value字段中进行以下替换来配置身份验证凭据:
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. 检查并修改manifests/certs下的文件,设置要使用的FQDN,以自定义用于TLS卸载的证书和密钥。默认情况下,nimDockerStart.sh启动脚本通过NGINX Ingress Controller发布容器化的NGINX Management Suite。
  2. 可选择编辑manifests/3.vs.yaml,并自定义用于访问NGINX Management Suite的主机名。
  3. 运行nimDockerStart.sh,在Kubernetes集群中启动NGINX Management Suite。如跟踪信息所示,该套件以nginx-nim2 Pod的形式运行。该脚本还会初始化相应的Pod,其中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 Plus R26 正式发布
NGINX | 2022/02/15

NGINX Plus R26 正式发布

NGINX Plus R26通过缓存JSON Web密钥集加快JWT验证,并强化TLS握手,从而提升安全性。NGINX JavaScript的新功能包括增强对异步函数的支持,以及实现WebCrypto API。

使用NGINX App Protect DoS保护gRPC应用,抵御严重的DoS攻击
NGINX | 2022/02/10

使用NGINX App Protect DoS保护gRPC应用,抵御严重的DoS攻击

gRPC具备开发人员设计和部署现代应用所需的速度与灵活性,但其开放性也使其极易受到第7层DoS攻击。NGINX App Protect DoS可保护gRPC应用免受此类破坏性攻击。

Ingress Controller 选型指南(第 2 部分):风险与面向未来的规划
NGINX | 2021/09/13

Ingress Controller 选型指南(第 2 部分):风险与面向未来的规划

了解选择错误的Ingress控制器可能带来的风险,以及如何从关键方面着手,让您的选择更好地适应未来需求。

NGINX Plus R19 正式发布
NGINX | 2019/09/03

NGINX Plus R19 正式发布

NGINX Plus R19扩展了监控功能,不仅提供更多指标,还新增了指标分析方式;增加试运行模式,用于测试限速效果;增强键值存储,以支持IP地址范围;并使限速更加动态。

NGINX现已正式加入F5
NGINX | 2019/05/09

NGINX现已正式加入F5

NGINX现已正式成为F5的一部分。Gus Robertson现任F5 NGINX业务部门负责人。他阐述了两家公司在人才、文化和愿景方面融合的价值,以及双方将如何携手增强NGINX的开源产品和商业产品。

使用NGINX和NGINX Plus实现高性能缓存
NGINX | 2016/08/24

使用NGINX和NGINX Plus实现高性能缓存

我将介绍NGINX在内容缓存和性能方面的工作原理,并分享一些控制NGINX内容缓存方式的技巧。