f5devcentral/NGINX-Declarative-API

GitHub: f5devcentral/NGINX-Declarative-API

为 NGINX Plus 及 F5 管理平台提供声明式 REST API 与 GitOps 自动化层,通过 JSON 对象简化配置的大规模动态管理。

Stars: 47 | Forks: 18

# NGINX-Declarative-API [![项目状态:活跃 – 项目已达到稳定、可用的状态,并且正在积极开发中。](https://www.repostatus.org/badges/latest/active.svg)](https://www.repostatus.org/#active) [![codecov](https://codecov.io/gh/f5devcentral/NGINX-Declarative-API/branch/main/graph/badge.svg)](https://codecov.io/gh/f5devcentral/NGINX-Declarative-API) NGINX Declarative API 允许用户以现代的**声明式风格**管理 **NGINX 配置**。该项目无需手动修改配置或使用底层 API,而是允许用户将所需配置表示为单一的 JSON 对象,从而简化了操作工作流。 该 API 抽象了管理 NGINX 配置的复杂性,使开发者、运维人员和自动化系统能够与 NGINX 无缝集成。 本项目支持 [F5 NGINX Instance Manager](https://docs.nginx.com/nginx-instance-manager/) 和 [F5 NGINX One Console](https://docs.nginx.com/nginx-one/) ## 📚 概述 从核心上讲,NGINX Declarative API 支持**声明式配置管理**,它允许用户定义 NGINX 的状态*应该是什么*,而不是如何达到该状态。它通过将用户定义的 JSON payload 处理为有效且优化的 NGINX 配置,消除了过程化更改的需要。 该工具非常适合在**现代、动态的基础设施**中管理 NGINX,例如 CI/CD 环境、容器化应用程序(如 Kubernetes)或大规模代理服务器设置。 ### ➡️ 为什么使用 NGINX Declarative API? - ✅ **声明式简易性**:将配置表示为单一的高级 JSON 对象。 - ✅ **自动化优先设计**:以最小的工作量将配置集成到 CI/CD pipeline 中。 - ✅ **减少错误**:内置验证以确保配置准确且优化。 - ✅ **动态更新**:在高度动态的环境中处理频繁的配置更改。 - ✅ **无缝可扩展性**:简化在超大规模分布式架构中管理 NGINX 设置的过程。 支持 GitOps 集成:检查事实来源的更新(F5 WAF for NGINX 策略、TLS 证书、密钥和链/捆绑包、Swagger/OpenAPI 定义、代码片段),并使 NGINX 配置自动保持同步。 ### 📝 用例 - 与 F5 NGINX Instance Manager(实例组)和 F5 NGINX One Console(配置同步组)集成 - F5 WAF for NGINX DevSecOps 集成 - 通过自动化 Swagger / OpenAPI schema 导入进行 API Gateway 部署 - API 开发者门户零接触部署(支持 redocly 和 backstage) - API 可见性(支持 moesif) - 支持事实来源的 GitOps 集成 - F5 WAF for NGINX 策略 - TLS 证书、密钥和链/捆绑包 - mTLS 证书 - `http` 代码片段、upstreams、servers、locations - `stream` 代码片段、upstreams、servers - Swagger / OpenAPI schemas - NGINX Javascript 一篇关于从 OpenAPI schemas 自动化 NGINX API Gateway 管理的**博客文章**可以在[这里](https://www.f5.com/company/blog/nginx/from-openapi-to-nginx-as-an-api-gateway-using-a-declarative-api)找到 ## 🚀 支持的版本 - [F5 NGINX Instance Manager 2.20+](https://docs.nginx.com/nginx-instance-manager/) - [F5 NGINX One Console](https://docs.nginx.com/nginx-one/) - [F5 NGINX Plus R33+](https://docs.nginx.com/nginx/) - [F5 WAF for NGINX](https://docs.nginx.com/waf/) **注意**:F5 NGINX Plus R33 及以上版本[需要有效的许可证](https://docs.nginx.com/solutions/about-subscription-licenses/),并且声明式 JSON 中必须包含 `.output.license` 部分。 ## 🛠️ 架构 ``` --- title: NGINX Declarative API architecture --- stateDiagram-v2 DevOps: User Client: REST Client Pipeline: CI/CD Pipeline NIM: NGINX Instance Manager N1: NGINX One Console AGENT1: NGINX Agent NGINX1: NGINX AGENT2: NGINX Agent NGINX2: NGINX INPUT: Input SOT: Source of Truth NDAPI: NGINX Declarative API DEVP: Developer Portal Service OUTPUT: Output REDIS: Redis 3RDPARTY: 3rd Party integrations DevOps --> Pipeline Pipeline --> INPUT Client --> INPUT INPUT --> NDAPI NDAPI --> OUTPUT NDAPI --> SOT SOT --> NDAPI NDAPI --> 3RDPARTY 3RDPARTY --> NDAPI NDAPI --> REDIS REDIS --> NDAPI OUTPUT --> NIM OUTPUT --> N1 NDAPI --> DEVP DEVP --> NDAPI NIM --> AGENT1 AGENT1 --> NGINX1 N1 --> AGENT2 AGENT2 --> NGINX2 ``` ## 🤖 GitOps 自动同步模式 ``` sequenceDiagram title GitOps autosync operations participant CI/CD Pipeline participant Source of Truth participant NGINX Declarative API participant Redis participant Developer Portal Service participant NGINX Instance Manager / NGINX One Console participant NGINX box NGINX Declarative API participant NGINX Declarative API participant Developer Portal Service participant Redis end CI/CD Pipeline ->> Source of Truth: Commit object updates critical Run every "synctime" seconds NGINX Declarative API ->>+ Source of Truth: Check for referenced objects updates Source of Truth ->>- NGINX Declarative API: Latest timestamp Note over NGINX Declarative API, Redis: data synchronization option If updates available NGINX Declarative API ->>+ Source of Truth: Pull updated objects Source of Truth ->>- NGINX Declarative API: Updated objects critical Build Staged Config critical If Developer Portal enabled NGINX Declarative API ->>+ Developer Portal Service: DevPortal generation request Developer Portal Service ->>- NGINX Declarative API: DevPortal definition end end NGINX Declarative API ->>+ NGINX Instance Manager / NGINX One Console: Publish staged config to instance group / config sync group NGINX Instance Manager / NGINX One Console ->> NGINX: Publish config to NGINX instances NGINX Instance Manager / NGINX One Console ->>- NGINX Declarative API: Return outcome Note over NGINX Declarative API, Redis: data synchronization end ``` ## 🕒 并发访问和排队模式 ``` sequenceDiagram title Concurrent access and queueing mode participant CI/CD Pipeline participant NGINX Declarative API participant NGINX Instance Manager / NGINX One Console participant NGINX critical Initial configuration deployment CI/CD Pipeline ->> NGINX Declarative API: POST request - base configuration deployment NGINX Declarative API ->>+ NGINX Instance Manager / NGINX One Console: Publish staged config to instance group / config sync group NGINX Instance Manager / NGINX One Console ->> NGINX: Publish config to NGINX instances NGINX Instance Manager / NGINX One Console ->>- NGINX Declarative API: Return outcome NGINX Declarative API ->> CI/CD Pipeline: Response end critical Asynchronous configuration submission CI/CD Pipeline ->> NGINX Declarative API: PATCH request - asynchronous configuration update 1 NGINX Declarative API ->>+ NGINX Declarative API: request added to the queue CI/CD Pipeline ->> NGINX Declarative API: PATCH request - asynchronous configuration update 2 NGINX Declarative API ->>+ NGINX Declarative API: request added to the queue loop Queue Manager Thread autonumber 1 NGINX Declarative API ->>+ NGINX Declarative API: get configuration update request from queue NGINX Declarative API ->>+ NGINX Instance Manager / NGINX One Console: Publish staged config to instance group / config sync group NGINX Instance Manager / NGINX One Console ->> NGINX: Publish config to NGINX instances NGINX Instance Manager / NGINX One Console ->>- NGINX Declarative API: Return outcome NGINX Declarative API ->> NGINX Declarative API: Update configuration update request status autonumber off end CI/CD Pipeline ->> NGINX Declarative API: Check configuration request status NGINX Declarative API ->> CI/CD Pipeline: Response end ``` ## 🌟 支持的功能 请查看[功能列表](/FEATURES.md) ## 🔧 如何使用 使用详情和 JSON schema 可在此处获取: - [API v5.6](/USAGE-v5.6.md) - 最新版 - [API v5.5](/USAGE-v5.5.md) - 稳定版 可以在[这里](/contrib/postman)找到示例 Postman 集合和使用说明 ## 🏃 如何运行 NGINX Declarative API 可以部署在: * 使用 [docker-compose](/contrib/docker-compose) 的 Linux 虚拟机 * 使用 [manifests](/contrib/kubernetes) 的 Kubernetes * 使用 [Helm chart](contrib/helm/nginx-declarative-api) 的 Kubernetes ## 🧪 运行单元测试 Python 单元测试涵盖了核心实用程序和配置修补模块。可以从仓库根目录运行它们: ``` pip3 install pytest pyyaml python3 -m pytest tests/ -v ``` WebUI 测试使用 [Vitest](https://vitest.dev/),可以在 `webui/` 目录中运行: ``` cd webui npm install npm test -- --run ``` 这两个测试套件都会在每次 pull request 和发布构建时在 GitHub Actions 中自动运行。 ## 🐳 构建 Docker 镜像 可以使用提供的 Docker compose [脚本](/contrib/docker-compose)来构建和运行 Docker 镜像 ## 📖 REST API 文档 当 NGINX Declarative API 运行时,可以通过以下路径访问 REST API 文档: - 文档和测试:`/docs` - Redoc 文档:`/redoc` - OpenAPI 规范:`/openapi.json` ## 🔒 安全 如需报告安全漏洞,请**不要**公开提 GitHub issue。相反,请遵循 [SECURITY.md](SECURITY.md) 中概述的负责任的披露流程。 ## ⚖️ 许可证 本仓库根据 Apache License, Version 2.0 获得许可。您可以在许可证中概述的条款和条件下自由使用、修改和分发此代码库。更多详细信息,请参阅 [LICENSE](/LICENSE.md) 文件。 ## 🆘 支持 如需获得支持,请提交一个 GitHub issue。请注意,本仓库中的代码由社区提供支持。 ## 💡 贡献 请查看[贡献指南](/CONTRIBUTING.md) ## 🤝 行为准则 请查看[行为准则](/code_of_conduct.md)
标签:GitOps, NGINX, RESTful API, 声明式API, 子域名突变, 提示词优化, 搜索引擎查询, 请求拦截, 运维自动化, 逆向工具