ADC 升级提升:0.11 和 0.12 版本创新特性

更新时间 8/7/2024

自发布 ADC(API Declarative CLI) 0.10 版本以来已近两月,我们马不停蹄地推出了两个重要迭代——0.11 与 0.12 版本,以及一系列针对性的补丁更新。这些更新主要聚焦于对 Apache APISIX 的支持、改进现有功能和错误修复。

Apache APISIX 后端支持

从 ADC 0.11 版本开始已经包含对 Apache APISIX 后端的实验性支持

ADC 现已与 APISIX Admin API 集成,实现了资源的高效导出与同步,我们将持续提高其可用性。 apisix 这一后端选项已在 ADC 默认开启,用户仅需配置 Admin API 端点和 API 密钥即可连接。

ADC 与 Admin API 的差异

值得注意的是,ADC 并不追求与 APISIX 功能的全面对齐,而是聚焦于核心功能集及最佳实践的应用。我们坚信,投资于用户真正需要的功能,而非盲目追求功能的全面覆盖,才是 ADC 的发展之道。APISIX 虽赋予用户极高的配置自由度,但这种自由往往伴随着长期维护的复杂性。当配置管理权从一位维护者转移到另一位时,新接手的维护者往往会面临一个挑战:他们不得不深入学习并理解前任维护者独特的配置思路和风格,而非直接采用一套业已成熟且广泛认可的最佳实践规则。

例如,在 APISIX 平台上,用户具备高度的灵活性,能够配置不直接绑定至具体服务的路由,而是直接在路由层面上指定上游资源。然而,这种方式并不受 ADC 的内置支持。为了更加符合逻辑规范及标准化操作流程,推荐的做法是将路由纳入特定的服务内,并在该服务内部以内联形式精准设定上游地址。

以商品服务为例,我们定义名为 Product Service 的服务,并在其中集中配置上游、启用插件及设置路由。此模式下,多条路由可共享同一上游及插件配置,极大地简化了配置流程。

1services:
2  - name: Product Service
3    upstream:
4      type: roundrobin
5      nodes:
6        - host: product.ecommerce.svc.cluster.local
7          port: 443
8          weight: 100
9      scheme: https
10    plugins:
11      key-auth: {}
12    routes:
13      - name: List Products
14        uris:
15          - /products
16        methods: ["GET"]
17      - name: Get Product
18        uris:
19          - /product/*
20        methods: ["GET"]

以上实例是一个服务定义的最小格式,除此之外,ADC 还支持服务发现、超时设置、重试策略等高级功能,以及路由的优先级配置,确保配置的全面性与灵活性。

鉴于 APISIX 支持更为丰富的配置方式,ADC 在导出配置时可能面临与 APISIX Admin API 显示不完全一致的情况,例如:

  • 为了满足服务和路由的从属关系,不使用服务的路由将被进行上游聚类并整合至一个服务;

  • 通过 ID 引用的上游将被内联至使用位置;

  • 插件模板资源将被包含路由的服务替代。

因此,用户需仔细审查导出流程输出的 ADC 定义文件,以确认它仍然符合最初的意图。

为什么建议使用 ADC?

在用户使用 APISIX Dashboard 时,时常需要在表单进行重复性的操作,过程繁琐且容易导致潜在错误。而使用 ADC 进行声明式配置时,仅需编写 YAML 文件并执行同步操作,ADC 即可自动将配置转换为 Admin API 调用,实现配置的快速部署与管理。

因此,ADC 可以帮助简化配置的管理和发布流程,还能简单地实现 GitOps 场景,即通过 Git 仓库管理 YAML 定义文件,并利用 PR 流程与 CI 工具自动更新配置。这将大幅度削减用户所需执行的手动操作量,避免 APISIX Dashboard 中存在的问题,也能降低编写脚本调用 Admin API 的复杂性。

对于新项目,我们强烈推荐从 ADC 入手构建网关配置;而对于现有项目,则可通过导出与适度修改的方式逐渐迁移至 ADC 进行管理。

API7 后端优化

在 0.11/0.12 版本中引入

在 0.11 与 0.12 版本中,我们针对 API7 后端进行了多项优化,以提升开发者的使用体验。ADC 已经全面兼容并适配了这些改进,意味着开发者只需确保 ADC 版本保持最新,无需对既有的定义文件做任何修改,即可直接享受到这些优化所带来的便利与提升。

优化 ADC 定义检查 linter

在 0.12 版本中引入

我们已对 ADC 定义检查的 schema 规则进行了全面优化与修复,旨在助力开发者提前察觉并有效规避潜在的配置问题。

JSON Schema

更进一步,我们现已支持校验规则的 JSON Schema 导出功能,以帮助使用 IDE 的编辑者,用户将获得文件上的语法提示与实时检查的双重便利,显著提升编码效率与质量。

对于偏好 Visual Studio Code 的开发者而言,开启 YAML 插件并在文件头部添加以下注释即可开启。

1# yaml-language-server: $schema=https://raw.githubusercontent.com/api7/adc/main/schema.json

结语

正如先前博客所述,ADC 终将走向开源之路。经过半年的内部开发与多轮迭代,ADC 已全面重构为基于 TypeScript 的代码库,彻底摒弃了原有的 Go 代码,使其更加易于学习与开发。随着 ADC 0.12 版本的公开发布,代码库现已开放于 https://github.com/api7/adc,期待全球开发者共同参与其开发与完善。

微信咨询

获取方案