通过decK文件Linting强化API网关部署 - Kong公司

作者:API传播员 · 2025-11-17 · 阅读时间:4分钟

API网关作为APIs的最后一道防线,其配置对于确保API的安全性、可用性和响应速度至关重要。为了维护强健的API网关部署,必须确保所有配置更改均经过深思熟虑,并符合组织的最佳实践。


decK 1.28 的新特性:本机配置验证

在 decK 1.28 版本中,新增了一项重要功能:通过自定义规则集对网关配置进行本机验证。这一功能的引入,不仅有助于确保配置符合最佳实践,还进一步增强了网关部署的安全性和可靠性。


什么是 Linting?

Linting 是一种常见的开发过程,旨在根据一组规则验证代码,查找潜在错误、风格问题或与标准的偏差。当检测到规则违规时,代码会被标记,开发人员可在潜在问题进入生产系统前进行修正。

通常,Linting 在代码编辑器或集成开发环境(IDE)中执行,但将其集成到 CI/CD(持续集成/持续交付)管道中同样重要。这种集成能够确保所有更改(无论来源如何)在合并到代码库之前,均符合既定的编码标准。


decK 中的 Linting 功能

我们已将 Linting 功能直接集成到 decK 命令行工具中,使您可以对 API 网关配置执行 Linting,而无需额外引入其他工具。这一功能的核心是一个灵活的 JSON/YAML Linter,支持根据自定义规则验证文件格式。

decK Linting 的关键概念

  1. 规则:用于过滤传入文件中的值,并指定如何验证其内容的命名配置。
  2. 选择器:定义过滤器,用于选择输入文件中需要验证的对象。选择器使用 JSONPath 语法,与 decK 的其他 APIOps 命令保持一致。
  3. 函数:对过滤后的值进行验证,并在发现违规时返回相关信息。
  4. 规则集:由多个规则组成的集合。

此外,规则还支持定义严重性级别和输出格式,进一步提升了命令的灵活性和实用性。


示例:验证 Kong Gateway 配置

在 decK 文件中,Kong Gateway 服务定义于“服务”块中。服务支持多种配置值,其中包括用于指定网关与上游服务之间通信协议的 protocol 字段。为了确保流量安全,您可能需要验证是否仅使用了 https 协议。

以下是一个示例规则集文件,用于完成此验证:

# 示例规则集文件
rules:
  - name: "Ensure HTTPS Protocol"
    selector: "$.services[*].protocol"
    function: "equals"
    args:
      value: "https"
    severity: "error"

假设您有以下 decK 声明性配置文件(kong.yaml),定义了一个简单任务跟踪系统的服务和路由:

# 示例 kong.yaml 文件
services:
  - name: "task-tracker"
    protocol: "http"
    host: "task-tracker.example.com"
    port: 80

运行规则集验证该配置时,会检测到以下违规行为:

Violation: Service "task-tracker" uses protocol "http", expected "https".

为解决此问题,您可以按如下方式修改声明性配置:

# 修改后的 kong.yaml 文件
services:
  - name: "task-tracker"
    protocol: "https"
    host: "task-tracker.example.com"
    port: 443

在修改后,运行验证命令将返回 0(成功)代码。如果检测到违规,则会返回非零代码。这一机制不仅可以中止自动化流程,还能有效防止问题配置进入生产环境。


总结

通过 decK 的 Linting 功能,您可以轻松验证 API 网关配置是否符合组织的最佳实践。这一功能的引入,不仅简化了配置管理流程,还显著提升了网关部署的安全性和可靠性。无论是开发阶段还是 CI/CD 管道中,Linting 都是保障配置质量的重要工具。

原文链接: https://konghq.com/blog/product-releases/deck-file-linting