跳转到内容

Higress 网关引擎整合技术设计方案

本文档详细说明如何实现 Higress 网关引擎与现有控制面的整合设计方案。通过低耦合的架构设计,我们实现了多引擎统一管理、最小化改动、运行时切换和良好的可扩展性。

在当前网关控制面架构中,Kong 网关代码直接耦合在业务层,导致以下问题:

  • 扩展困难:新增网关引擎需要大量修改业务层代码
  • 配置分散:网关配置管理散落在多处,难以统一
  • 工厂割裂:客户端工厂各自独立,缺乏统一管理机制

本方案旨在实现以下核心目标:

  1. 多引擎统一管理:支持 Kong 和 Higress 两种网关引擎的统一资源管理
  2. 最小化改动:保持现有 Kong 代码不变,通过适配器模式实现引擎扩展
  3. 运行时切换:支持根据配置动态选择目标网关引擎
  4. 可扩展性:为未来引入 APISIX、Envoy 等其他网关引擎预留扩展空间
graph LR
    A[设计原则] --> B[接口隔离]
    A --> C[单一职责]
    A --> D[开闭原则]
    A --> E[依赖倒置]

    B --> B1[定义清晰的引擎抽象接口]
    C --> C1[每个适配器只负责一个引擎]
    D --> D1[对扩展开放,对修改关闭]
    E --> E1[依赖抽象而非具体实现]

本方案采用分层架构设计,从上到下依次为:控制层、聚合服务层、网关引擎抽象层、引擎适配器层和 SDK 客户端层。

graph TB
    subgraph "控制层"
        A[GwApiController]
        B[GwServiceController]
        C[GwUpstreamController]
    end

    subgraph "聚合服务层"
        D[GwApiAggreService]
        E[GwServiceUpstreamAggreService]
    end

    subgraph "网关引擎抽象层"
        F[GatewayEngine]
        G[GatewayEngineFactory]
        H[GatewayEngineConfig]
    end

    subgraph "引擎适配器层"
        I[KongGatewayAdapter]
        J[HigressGatewayAdapter]
        K[FutureEngineAdapter]
    end

    subgraph "SDK 客户端层"
        L[KongClientFactory]
        M[HigressAdminClient]
    end

    A --> D
    B --> E
    D --> F
    E --> F
    F --> G
    G --> I
    G --> J
    G --> K
    I --> L
    J --> M

    style F fill:#f9f,stroke:#333,stroke-width:3px
    style G fill:#bbf,stroke:#333,stroke-width:2px
    style J fill:#bfb,stroke:#333,stroke-width:2px
层级职责说明
控制层接收 HTTP 请求,参数验证GwApiController 等
聚合服务层业务逻辑编排,事务管理GwApiAggreService 等
网关引擎抽象层定义统一接口,引擎管理GatewayEngine, GatewayEngineFactory
引擎适配器层实现特定引擎的适配逻辑KongGatewayAdapter, HigressGatewayAdapter
SDK 客户端层封装第三方 SDK 调用KongClientFactory, HigressAdminClient

GatewayEngine 接口定义了所有网关引擎必须实现的统一操作接口,屏蔽不同引擎的实现差异。接口支持幂等性操作,确保重复调用不会产生副作用。

核心方法分类

方法分类核心方法幂等性保证
路由管理createRoute、updateRoute、deleteRoute、getRoute支持幂等键,重复调用不重复创建
服务管理createService、updateService、deleteService幂等操作,结果一致
Upstream 管理createUpstream、updateUpstream、deleteUpstream幂等操作,结果一致
插件管理attachPlugin、detachPlugin、updatePlugin支持幂等键
引擎类型代码说明
KONGkongKong 网关引擎
HIGRESShigressHigress 网关引擎
APISIXapisixAPISIX 网关引擎(预留)
ENVOYenvoyEnvoy 网关引擎(预留)

GatewayEngineFactory 负责根据集群配置从数据库动态创建对应的网关引擎实例,支持运行时动态切换引擎。

缓存策略

  • 使用 Caffeine LoadingCache 实现自动缓存管理
  • 最大缓存数量:100 个集群
  • 写入后过期时间:1 小时
  • 写入后刷新时间:5 分钟(异步刷新,不阻塞请求)

配置热更新机制

  • 监听集群配置变更事件,自动刷新受影响的引擎缓存
  • 提供手动刷新 API,支持运维人员主动刷新
  • 支持批量刷新所有缓存

KongGatewayAdapter 负责将 GatewayEngine 接口适配到 Kong Admin API,复用现有的 KongClientFactory 和相关 API 类。

核心功能

  • 实现路由、服务的增删改查操作
  • 支持幂等性保证,通过标签存储幂等键
  • 复用现有 Kong 客户端工厂

4.2 Higress 网关适配器(支持双模式)

Section titled “4.2 Higress 网关适配器(支持双模式)”

HigressGatewayAdapter 同时支持两种 Higress 部署模式,提供灵活的配置选择。

使用 Caffeine Cache 自动管理 KubernetesClient 实例的生命周期,避免资源泄漏。

缓存策略

  • 最大缓存数量:100 个配置
  • 访问后过期时间:30 分钟(自动清理未使用的客户端)
  • 自动关闭:客户端移除时自动调用 close() 释放资源
graph TB
    subgraph "HigressGatewayAdapter"
        A[GatewayEngine 接口]
        B{HigressMode 判断}
        C[Ingress 模式]
        D[Gateway API 模式]
        E[Admin SDK 客户端]
        F[Kubernetes 客户端]
    end

    subgraph "Higress 控制面"
        G[Higress Console API]
        H[Kubernetes API Server]
    end

    A --> B
    B -->|INGRESS| C
    B -->|GATEWAY_API| D
    C --> E
    D --> F
    E --> G
    F --> H

    style A fill:#f9f,stroke:#333,stroke-width:2px
    style B fill:#ff9,stroke:#333,stroke-width:2px
    style C fill:#9f9,stroke:#333,stroke-width:1px
    style D fill:#99f,stroke:#333,stroke-width:1px
模式使用场景配置要求
Ingress 模式传统 Higress 部署配置 control plane URL 和认证 token
Gateway API 模式Kubernetes 原生部署配置 Kubernetes kubeconfig 和命名空间

1. 本地缓存

  • 使用 Caffeine 缓存 HTTPRoute 资源,减少 K8s API 调用
  • 缓存配置:最大 1000 条记录,5 分钟过期
  • 写入后自动失效,确保数据一致性

2. Watch API 监听

  • 启动 Watch 监听命名空间内的 HTTPRoute 变化
  • 资源变化时自动刷新本地缓存
  • 无需轮询,实时感知资源变更

3. 批量操作优化

  • 列表查询使用 List API 而非多次 Get
  • 支持按标签选择器批量获取资源

RouteConfig 屏蔽不同网关引擎的路由配置差异,提供统一的配置接口。

字段类型说明
nameString路由名称
pathsList<String>路由路径列表(支持多路径)
methodsList<String>HTTP 方法列表
hostsList<String>主机名/域名列表
serviceServiceConfig关联的服务配置
priorityInteger路由优先级(数值越大优先级越高)
enabledBoolean是否启用
tagsMap<String, String>标签(用于路由分组和筛选)
pathMatchTypeEnum路径匹配类型(PREFIX/EXACT/REGEX)

ServiceConfig 定义后端服务的配置信息,包括连接地址、超时设置、重试策略等。

字段类型默认值说明
nameString-服务名称
hostString-后端主机名或 IP 地址
portInteger-后端端口号
protocolStringhttp协议类型(http, https, tcp, tls)
pathString/服务路径前缀
connectTimeoutLong60000连接超时时间(毫秒)
readTimeoutLong60000读取超时时间(毫秒)
writeTimeoutLong60000写入超时时间(毫秒)
retriesInteger5重试次数
enabledBooleantrue是否启用

UpstreamConfig 定义上游服务集群的配置,包括负载均衡策略、健康检查等。

负载均衡算法

算法说明
ROUND_ROBIN轮询
LEAST_CONNECTIONS最少连接
IP_HASHIP 哈希
HASH通用哈希
CONSISTENT_HASH一致性哈希

PluginConfig 定义网关插件的配置信息,支持不同引擎的插件映射。

插件作用域

作用域说明
GLOBAL全局作用域
ROUTE路由作用域
SERVICE服务作用域
CONSUMER消费者作用域

复用现有 gw_cluster_base 表,通过扩展字段支持多引擎架构。

数据示例

cluster_codecluster_namegateway_engine_typegateway_deploy_modecluster_cp_urlgateway_namespaceenv_code
cluster-prod-kong-01生产环境 Kong 集群01kongNULLhttp://kong-admin-01:8001NULLprod
cluster-prod-higress-01生产环境 Higress 集群01(Ingress模式)higressingresshttp://higress-control-01:8080defaultprod
cluster-prod-higress-02生产环境 Higress 集群02(Gateway API模式)higressgateway_apiNULLdefaultprod
cluster-test-kong-01测试环境 Kong 集群01kongNULLhttp://kong-admin-test:8001NULLtest

配置说明

  • Kong 集群:只需配置 cluster_cp_urlgateway_auth_token
  • Higress Ingress 模式:配置 cluster_cp_urlgateway_auth_tokengateway_namespace
  • Higress Gateway API 模式:配置 gateway_kube_config(Kubernetes YAML 配置)和 gateway_namespace

表名:gw_plugin_mapping

用途:存储不同引擎间插件的映射关系

插件映射示例

通用名称显示名称KongHigress分类
rate_limiting速率限制rate-limitingrequest-limittraffic
ip_restrictionIP 限制ip-restrictionip-restrictionsecurity
cors跨域配置corscorstraffic
jwt_authJWT 认证jwtjwt-authsecurity
graph TB
    A[迁移任务配置] --> B[迁移执行器]
    B --> C{源引擎类型}
    C -->|Kong| D[Kong资源读取器]
    C -->|Higress| E[Higress资源读取器]

    B --> F{目标引擎类型}
    F -->|Kong| G[Kong资源写入器]
    F -->|Higress| H[Higress资源写入器]

    D --> I[配置转换器]
    E --> I
    I --> G
    I --> H

    G --> J[迁移结果报告]
    H --> J

    style B fill:#f9f,stroke:#333,stroke-width:2px
    style I fill:#bbf,stroke:#333,stroke-width:2px

GatewayMigrationExecutor 负责执行从一个网关引擎到另一个网关引擎的资源迁移任务。

核心功能

  • 支持批量迁移和增量迁移
  • 异步执行迁移任务
  • 实时查询迁移状态
  • 支持取消正在执行的迁移任务

迁移配置

配置项说明默认值
sourceEngineType源引擎类型-
targetEngineType目标引擎类型-
includeRoutes是否包含路由true
includeServices是否包含服务true
includeUpstreams是否包含 Upstreamtrue
includePlugins是否包含插件true
batchSize批量大小100
concurrency并发度5
  • 连接池大小:50
  • 连接超时:5 秒
  • 读取超时:30 秒
  • 最大空闲连接:20
  • 保活时间:5 分钟

引擎配置缓存

  • 最大容量:1000 条记录
  • 过期时间:写入后 10 分钟自动过期
  • 实时更新:配置变更时主动刷新缓存
  • 批量大小:100 条/批
  • 并发度:5 个并行任务
  • 使用异步 Future 等待所有任务完成
风险概率影响应对措施
higress-admin-sdk 功能不完整提前验证 SDK 功能,必要时直接调用 HTTP API
Kong 与 Higress 差异过大优先实现核心功能,非核心功能按需支持
性能影响进行性能测试,优化调用链路
风险概率影响应对措施
现有功能回归完善回归测试,灰度发布
配置迁移复杂度提供配置迁移工具和文档

本设计方案通过适配器模式实现了 Higress 网关引擎与现有控制面的整合,具有以下优势:

  1. 低耦合架构:网关引擎抽象层与具体引擎实现解耦,便于扩展和维护
  2. 灵活的模式支持:Higress 支持 Ingress 和 Gateway API 两种部署模式,适应不同场景
  3. 高效的缓存策略:使用 Caffeine Cache 管理客户端和配置缓存,提升系统性能
  4. 平滑的迁移方案:提供完整的迁移工具,支持 Kong 到 Higress 的平滑迁移

未来可进一步扩展支持 APISIX、Envoy 等其他网关引擎,构建更加完善的多引擎网关管理平台。