F5 NGINX Management Suite是一套模块,可通过统一界面管理NGINX数据平面。通过简化对NGINX Open Source和NGINX Plus实例的管理,NGINX Management Suite可简化应用和API的扩展、安全防护及监控流程。
需要在要通过NGINX Management Suite管理的每个NGINX实例上安装NGINX Agent,以便与控制平面通信并进行远程配置管理。
对于在裸机或虚拟机(VM)上运行的NGINX实例,我们在文档中提供了安装说明。本文将介绍如何为NGINX Plus和NGINX Agent构建Docker镜像,以便使用NGINX Management Suite管理部署在Kubernetes或其他微服务基础设施中的NGINX Plus实例。
根据要在最终Docker镜像中包含的内容,可以选择以下3种构建方式:
- NGINX Plus和NGINX Agent(仅包含这两项)
- NGINX Plus、NGINX Agent和NGINX App Protect WAF
- NGINX Plus、NGINX Agent,以及对NGINX Management Suite API Connectivity Manager开发者门户的支持(适用于作为API网关运行的NGINX Plus实例)
[编辑注:本文已于2023年4月更新,以明确相关说明,并在 ACM_DEVPORTAL字段添加到在Kubernetes中运行Docker镜像的第1步中。]
先决条件
我们提供了一个GitHub存储库,其中包含创建NGINX Plus和NGINX Agent Docker镜像所需的资源,并支持NGINX Management Suite中2.8.0及更高版本的Instance Manager模块。
要构建Docker镜像,需要:
- Linux主机(裸机或虚拟机)
- Docker 20.10+
- 可将目标Docker镜像推送到的私有镜像仓库
- 一个正在运行且包含Instance Manager的NGINX Management Suite实例;如果要使用开发者门户支持,还需包含API Connectivity Manager
- NGINX Plus订阅(或30天免费试用),以及可选的NGINX App Protect订阅
要运行Docker镜像,需要:
- 一个正在运行的Kubernetes集群
kubectl,且可访问Kubernetes集群
构建Docker镜像
按照以下说明构建Docker镜像。
- 克隆GitHub存储库:
$ git clone https://github.com/nginxinc/NGINX-Demos Cloning into 'NGINX-Demos'...
remote: Enumerating objects: 126, done.
remote: Counting objects: 100% (126/126), done.
remote: Compressing objects: 100% (85/85), done.
remote: Total 126 (delta 61), reused 102 (delta 37), pack-reused 0
Receiving objects: 100% (126/126), 20.44 KiB | 1.02 MiB/s, done.
Resolving deltas: 100% (61/61), done.- 切换到构建目录:
$ cd NGINX-Demos/nginx-agent-docker/- 运行
dockerps,确认Docker正在运行,然后运行build.sh脚本,将所需软件添加到Docker镜像中。基本选项如下:其他选项如下:以下是不同软件组合对应的命令:下面是基本镜像的构建跟踪示例。末尾显示Buildcomplete消息表示构建成功。
$ ./scripts/build.sh -C nginx-repo.crt -K nginx-repo.key -t registry.ff.lan:31005/nginx-plus-with-agent:2.7.0 -n https://nim.f5.ff.lan => Target docker image is nginx-plus-with-agent:2.7.0
[+] Building 415.1s (10/10) FINISHED
=> [internal] load build definition from Dockerfile
=> transferring dockerfile: 38B
=> [internal] load .dockerignore
=> transferring context: 2B
=> [internal] load metadata for docker.io/library/centos:7
=> [auth] library/centos:pull token for registry-1.docker.io
=> CACHED [1/4] FROM docker.io/library /centos:7@sha256:be65f488b7764ad3638f236b7b515b3678369a5124c47b8d32916d6487418ea4
=> [internal] load build context
=> transferring context: 69B
=> [2/4] RUN yum -y update && yum install -y wget ca-certificates epel-release curl && mkdir -p /deployment /etc/ssl/nginx && bash -c 'curl -k $NMS_URL/install/nginx-agent | sh' && echo "A 299.1s
=> [3/4] COPY ./container/start.sh /deployment/
=> [4/4] RUN --mount=type=secret,id=nginx-crt,dst=/etc/ssl/nginx/nginx-repo.crt --mount=type=secret,id=nginx-key,dst=/etc/ssl/nginx/nginx-repo.key set -x && chmod +x /deployment/start.sh & 102.4s
=> exporting to image
=> exporting layers
=> writing image sha256:9246de4af659596a290b078e6443a19b8988ca77f36ab90af3b67c03d27068ff
=> naming to registry.ff.lan:31005/nginx-plus-with-agent:2.7.0
=> Build complete for registry.ff.lan:31005/nginx-plus-with-agent:2.7.0- 在Kubernetes中运行Docker镜像 按照以下说明准备Deployment清单,并在Kubernetes上启动搭载NGINX Agent的NGINX Plus。开始使用 要试用本文介绍的NGINX解决方案,可立即开始30天免费试用,或联系我们,讨论您的用例:下载NGINX Agent,它免费且开源。
‑C:NGINX Plus许可证证书文件的名称(nginx-repo.crt,见下方示例命令)‑K:NGINX Plus许可证密钥文件的名称(nginx-repo.key,用于下方的示例命令)‑t:注册表和目标镜像,格式为<registry_name>/<image_name>:<tag>(registry.ff.lan:31005/nginx-plus-with-agent:2.7.0,如下方示例命令所示)‑n:NGINX Management Suite实例的基础URL(https://nim.f5.ff.lan,即下方示例命令中使用的URL)‑d:使用NGINX API Connectivity Manager时,为开发者门户添加数据平面支持‑w:添加 NGINX App Protect WAF- NGINX Plus和NGINX Agent:
$ ./scripts/build.sh -C nginx-repo.crt -K nginx-repo.key \ -t registry.ff.lan:31005/nginx-plus-with-agent:2.7.0 \ -n https://nim.f5.ff.lan- NGINX Plus、NGINX Agent和NGINX App Protect WAF(添加
‑w选项):
$ ./scripts/build.sh -C nginx-repo.crt -K nginx-repo.key \-t registry.ff.lan:31005/nginx-plus-with-agent:2.7.0 -w \ -n https://nim.f5.ff.lan- NGINX Plus、NGINX Agent和开发者门户支持(添加
‑d选项):
$ ./scripts/build.sh -C nginx-repo.crt -K nginx-repo.key \ -t registry.ff.lan:31005/nginx-plus-with-agent:2.7.0 -d \ -n https://nim.f5.ff.lan- 使用常用的文本编辑器打开manifests/1.nginx-with-agent.yaml,并进行以下更改(代码片段中以橙色突出显示了可以或必须更改的默认值):
- 在
spec.template.spec.containers部分,将默认镜像名称(your.registry.tld/nginx-with-nim2-agent:tag)替换为在‑t构建Docker镜像的第3步中使用选项指定的Docker镜像名称(本例中为registry.ff.lan:31005/nginx-plus-with-agent:2.7.0):
- 在
spec:
...
template:
...
spec:
containers:
- name: nginx-nim
image: your.registry.tld/nginx-with-nim2-agent:tag- 在
spec.template.spec.containers.env部分中,针对每个指定的value字段,按对应的name进行以下替换:
spec:
...
template:
...
spec:
containers:
...
env:
- name: NIM_HOST
...
value: "nginx-nim2.nginx-nim2"
- name: NIM_GRPC_PORT
value: "443"
- name: NIM_INSTANCEGROUP
value: "lab"
- name: NIM_TAGS
value: "preprod,devops"NIM_HOST:(必填)将默认值(nginx-nim2.nginx-nim2)替换为NGINX Management Suite实例的FQDN或IP地址(本例中为nim2.f5.ff.lan)。NIM_GRPC_PORT(可选)将默认端口(443)替换为其他端口号,以传输gRPC流量。NIM_INSTANCEGROUP:可选。将默认值(lab)替换为NGINX Plus实例所属的实例组。NIM_TAGS(可选)将默认值(preprod,devops)替换为以逗号分隔的NGINX Plus实例标签列表。
- 此外,在
spec.template.spec.containers.env部分中,如果符合所述条件,请取消注释以下name‑value字段对:
spec:
...
template:
...
spec:
containers:
...
env:
- name: NIM_HOST
...
#- name: NAP_WAF # value: "true" #- name: NAP_WAF_PRECOMPILED_POLICIES # value: "true"
...
#- name: ACM_DEVPORTAL # value: "true"NIM_WAF和NIM_WAF_PRECOMPILED_POLICIES:镜像中已包含NGINX App Protect WAF(在-w“构建Docker镜像”的第3步中添加了该选项),因此值为"true"。ACM_DEVPORTAL:镜像中包含对App Connectivity Manager开发者门户的支持(在“-d构建Docker镜像”的第3步中添加了选项),因此该值为"true"。
- 按如下所示运行nginxwithAgentStart.sh脚本,以应用清单并启动两个Pod(由清单
replicas:2中的spec部分指定),每个Pod均包含NGINX Plus和NGINX Agent:
$ ./scripts/nginxWithAgentStart.sh start$ ./scripts/nginxWithAgentStart.sh stop- 验证当前是否有两个Pod正在运行:每个Pod都运行一个NGINX Plus实例和一个NGINX Agent,用于与NGINX Management Suite控制平面通信。
$ kubectl get pods -n nim-test NAME READY STATUS RESTARTS AGE
nginx-nim-7f77c8bdc9-hkkck 1/1 Running 0 1m
nginx-nim-7f77c8bdc9-p2s94 1/1 Running 0 1m- 访问NGINX Management Suite中的NGINX Instance Manager图形用户界面,并确认两个NGINX Plus实例正在运行,状态为“在线”。在本示例中,未启用NGINX App Protect WAF。

- NGINX Management Suite
- NGINX Plus(包括NGINX App Protect WAF)
关于作者

相关博客文章
NGINX Plus R26 正式发布
NGINX Plus R26通过缓存JSON Web密钥集加快JWT验证,并强化TLS握手,从而提升安全性。NGINX JavaScript的新功能包括增强对异步函数的支持,以及实现WebCrypto API。
使用NGINX App Protect DoS保护gRPC应用,抵御严重的DoS攻击
gRPC具备开发人员设计和部署现代应用所需的速度与灵活性,但其开放性也使其极易受到第7层DoS攻击。NGINX App Protect DoS可保护gRPC应用免受此类破坏性攻击。
Ingress Controller 选型指南(第 2 部分):风险与面向未来的规划
了解选择错误的Ingress控制器可能带来的风险,以及如何从关键方面着手,让您的选择更好地适应未来需求。
NGINX Plus R19 正式发布
NGINX Plus R19扩展了监控功能,不仅提供更多指标,还新增了指标分析方式;增加试运行模式,用于测试限速效果;增强键值存储,以支持IP地址范围;并使限速更加动态。
NGINX现已正式加入F5
NGINX现已正式成为F5的一部分。Gus Robertson现任F5 NGINX业务部门负责人。他阐述了两家公司在人才、文化和愿景方面融合的价值,以及双方将如何携手增强NGINX的开源产品和商业产品。
