F5 NGINX Management Suite 是一系列模块,可以实现通过单一管理平台管理 NGINX 数据平面。通过简化 NGINX 开源版和 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 镜像中的内容:
- 仅 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 实例)
准备工作
我们提供了一个 GitHub 代码库,其中包含创建 NGINX Plus 和 NGINX Agent 的 Docker 镜像所需的资源,并支持 NGINX Management Suite 的 Instance Manager 模块 2.8.0 版本及更高版本。
若要构建 Docker 镜像,您需要:
- Linux 主机(裸机或虚拟机)
- Docker 20.10+
- 私有注册表,用于推送目标 Docker 镜像
- 正在运行的 NGINX Management Suite 实例,带有 Instance Manager 和 API Connectivity Manager(若要利用开发人员门户支持)
- 订阅(或 30 天免费试用)NGINX Plus,可选择使用 NGINX App Protect
要运行 Docker 镜像,您需要:
- 正在运行的 Kubernetes 集群
- 有权访问 Kubernetes 集群的
kubectl
构建 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.
-
进入到 build 目录:
$ cd NGINX-Demos/nginx-agent-docker/
-
运行
docker
ps
以验证 Docker 是否正在运行,然后运行 build.sh 脚本,从而将所需软件添加到 Docker 镜像中。基础选项包括:‑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
)
其他选项包括:
‑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
以下为基本镜像构建的示例跟踪。末尾的
Build
complete
消息表示构建成功。$ ./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 镜像
按照以下说明准备部署清单,并在 Kubernetes 上启动 NGINX Plus 和 NGINX Agent。
-
使用您的首选文本编辑器,打开 manifests/1.nginx-with-agent.yaml,并做出如下更改(代码段以橙色高亮显示了您可以或必须更改的默认值):
-
在
spec.template.spec.containers
部分中,将默认镜像名称(your.registry.tld/nginx-with-nim2-agent:tag
) 替换为您在“构建 Docker 镜像”第 3 步中使用‑t
选项指定的 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
进行以下替换: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: NIM_HOST ... value: "nginx-nim2.nginx-nim2" - name: NIM_GRPC_PORT value: "443" - name: NIM_INSTANCEGROUP value: "lab" - name: NIM_TAGS value: "preprod,devops"
-
同样在
spec.template.spec.containers.env
部分中,如果指定的条件适用,取消注释以下name
‑value
字段对:NIM_WAF
和NIM_WAF_PRECOMPILED_POLICIES
– 镜像中包含 NGINX App Protect WAF(您在“构建 Docker 镜像”第 3 步中添加了-w
选项),因此该值为“true”
。ACM_DEVPORTAL
– 镜像中包含对 App Connectivity Manager 开发人员门户的支持(在“构建 Docker 镜像”第 3 步中添加了-d
选项),因此该值为“true”
。
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"
-
-
按照指示运行 nginxwithAgentStart.sh 脚本,以应用清单并启动两个 Pod(如清单
spec
部分中的replicas:
2
指令所指定),每个 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 GUI,并检查两个 NGINX Plus 实例的运行状态是否为 Online。在本例中,NGINX App Protect WAF 未启用。
立即免费试用
如欲试用本文中介绍的 NGINX 解决方案,请立即下载 30 天免费试用版,或者联系我们讨论您的用例:
- NGINX Management Suite
- NGINX Plus(包括 NGINX App Protect WAF)
下载 NGINX Agent — 免费的开源软件。