Meshery 中的 APISIX 集成模型:以可视化设计协作管理 Kubernetes 中的 API 网关
Meshery 中的 APISIX 集成模型:以可视化设计协作管理 Kubernetes 中的 API 网关
本指南以仓库中的 APISIX 集成模型文档(docs/content/en/extensions/models/apisix/index.md)为骨架,结合其底层模型定义与组件 Schema,讲解 Meshery 如何以"协作式、可视化的基础设施即设计(infrastructure as design)"方式接入 Apache APISIX Ingress Controller。读完本文,你将掌握该集成模型的 7 类可编排组件、三大核心能力(动态路由与负载均衡、认证与授权、可观测性与分析)、以及在 Kubernetes 中承载 API 网关流量管理的基本配置范式。
集成模型定位:APISIX 是什么
APISIX 是云原生场景下的动态 API 网关,而 Meshery 将 apisix-ingress-controller 作为一款**集成模型(Model)**纳入其可视化协作平台。该模型由 Artifact Hub)。
从集成目录的 frontmatter 看,该模型被归类为:
- 集成类别(integrations-category):Provisioning
- 集成子类别(integrations-subcategory):Security & Compliance
而在底层模型注册元数据中,模型自身标注的类别为 Cloud Native Network、子类别为 API Gateway,主题色为 APISIX 标志性的红色 #F8423F、辅助色 #00D3A9(见 model.json)。两套分类体系分别服务于文档浏览目录与模型注册表,体现了"文档归类"与"模型自述"两种元数据视角。
组件清单:7 类可编排的 APISIX 资源
文档 frontmatter 声明该模型包含 7 个组件(components-count: 7),每类组件都带有彩色(color)与白色(white)两套图标,便于在 Meshery 可视化画布上区分显示:
| 组件 | 彩色图标 | 白色图标 | 作用(从组件名称与 Schema 推断) |
|---|---|---|---|
| apisix-route | apisix-route-color.svg | apisix-route-white.svg | 定义 HTTP/TCP/Stream 路由规则,是流量编排的核心组件 |
| apisix-cluster-config | apisix-cluster-config-color.svg | apisix-cluster-config-white.svg | 集群级配置,例如控制面访问与 Admin API 设置 |
| apisix-consumer | apisix-consumer-color.svg | apisix-consumer-white.svg | 消费者身份定义,配合认证插件实现鉴权 |
| apisix-global-rule | apisix-global-rule-color.svg | apisix-global-rule-white.svg | 全局规则,对所有路由统一生效的插件策略 |
| apisix-plugin-config | apisix-plugin-config-color.svg | apisix-plugin-config-white.svg | 插件配置,集中声明可复用的插件参数 |
| apisix-tls | apisix-tls-color.svg | apisix-tls-white.svg | TLS 证书与 HTTPS 终端配置 |
| apisix-upstream | apisix-upstream-color.svg | apisix-upstream-white.svg | 上游服务定义,承载负载均衡策略 |
说明:文档列出的组件与仓库中当前收录的模型版本并不完全一一对应。当前仓库的 models/apisix-ingress-controller/0.8.0/v1.0.0/components 目录下实际收录了
ApisixClusterConfig、ApisixConsumer、ApisixRoute、ApisixTls、ApisixUpstream共 5 个组件定义文件(JSON),其余组件可能在更新的模型版本中补充。阅读时建议以文档的组件清单为目录索引,以仓库实际 JSON 为准进行二次确认。
关系(Relationships)
该模型当前声明 relationship-count: 0,即 APISIX 模型内部组件之间尚未定义 Meshery 的关系边(例如 depends-on、hierarchy 等语义连接)。这意味着在可视化画布上,组件目前以独立节点呈现,组件间的连接关系需要用户通过路由、上游等配置内容自行组织。
核心能力:三大功能支柱
文档 featureList 明确列出该集成模型的三大核心能力:
- 动态路由和负载均衡(Dynamic routing and load balancing):通过
ApisixRoute声明式路由与ApisixUpstream上游定义,在运行时动态调整流量路径与后端权重,无需重启网关进程。 - 认证和授权(Authentication and authorization):通过
ApisixConsumer与路由上的authentication字段(basicAuth/keyAuth),将身份识别与鉴权策略直接编排进网关数据面。 - 可观测性和分析(Observability and analytics):借助 APISIX 插件体系,在可视化画布中声明可观测性相关插件配置,实现指标、日志、追踪数据的采集与分析。
工作方式:流线化的网关管理与增强的流量路由
文档的 howItWorks 概括为 "Integrates APISIX configurations"(集成 APISIX 配置),howItWorksDetails 进一步描述为 "Streamlined API gateway management and enhanced traffic routing in Kubernetes"——即通过在 Kubernetes 中可视化编排 APISIX 的 CRD 配置,实现流线化的 API 网关管理与增强的流量路由。
结合 ApisixRoute 组件 Schema(models/apisix-ingress-controller/0.8.0/v1.0.0/components/ApisixRoute.json),其实际工作方式由 apisix.apache.org/v1 的 ApisixRoute CRD 承载,spec 支持三种路由形态(Schema 中通过 anyOf 声明,至少选择其一):
- HTTP 路由(spec.http):面向七层流量,支持多路由项,是日常 API 发布的最常用形态;
- TCP 路由(spec.tcp):四层 TCP 流量转发,通过
match.ingressPort(1–65535)匹配入站端口; - Stream 路由(spec.stream):四层流式协议,在 TCP 基础上额外要求
protocol字段(枚举TCP/UDP)。
HTTP 路由的配置骨架
结合 Schema 约束,一份 ApisixRoute HTTP 配置的核心结构如下:
apiVersion: apisix.apache.org/v1
kind: ApisixRoute
metadata:
name: httpbin-route
spec:
http:
- name: rule-1 # 必填,规则名,长度 ≥ 1
match:
paths: ["/get"] # 必填,路径匹配,须以 "/" 开头
hosts: ["*.example.com"] # 可选,通配符主机
methods: ["GET", "POST"] # 可选,HTTP 方法枚举
remoteAddrs: ["10.0.0.0/8"] # 可选,来源 IP 范围
backend:
serviceName: httpbin # 必填,目标 Service 名称
servicePort: 80 # 必填,目标端口(1–65535)
weight: 100 # 可选,权重(≥ 0),多后端时用于加权
resolveGranualrity: service # 可选,endpoint | service
timeout:
connect: "10s" # 连接超时
send: "10s" # 发送超时
read: "10s" # 读取超时
websocket: true # 可选,WebSocket 支持
Schema 中的关键约束细节:
match.paths是唯一必填匹配项,Pattern 为^/[a-zA-Z0-9\-._~%!$&'()+,;=:@/]*\*?$,即以/开头并支持尾部*通配;match.hosts支持^\*?[0-9a-zA-Z-._]+$形式的前导通配;match.methods从CONNECT、DELETE、GET、HEAD、OPTIONS、PATCH、POST、PUT、TRACE中取值;- 请求匹配还可通过
match.exprs实现更细粒度的表达式匹配,subject.scope支持Cookie、Header、Path、Query四类请求要素,op提供Equal、NotEqual、GreaterThan、LessThan、In、NotIn、RegexMatch、RegexNotMatch、RegexMatchCaseInsensitive、RegexNotMatchCaseInsensitive十种运算; backend(单后端)与backends(多后端数组,加权负载均衡)通过oneOf二选一,backends数组minItems: 1,便于蓝绿发布与灰度分流;servicePort取值范围 1–65535,weight最小为 0。
认证与授权:路由级鉴权
http 规则项中 authentication 字段支持 basicAuth 与 keyAuth 两种类型,并通过 enable 布尔开关控制生效:
spec:
http:
- name: rule-auth
match:
paths: ["/admin"]
backend:
serviceName: admin-service
servicePort: 80
authentication:
enable: true # 必填,是否启用认证
type: keyAuth # basicAuth | keyAuth
keyAuth:
header: "X-API-Key" # 可选,指定 API Key 请求头
结合 ApisixConsumer 组件,keyAuth 的凭据通常绑定到 Consumer 身份上,从而在网关层统一收敛认证逻辑,实现"认证与授权"能力项。
插件:可观测性与扩展
每个 HTTP 规则项可挂载 plugins 数组,每项插件需提供 name 与 enable(必填),config 以 JSON 文本形式承载插件参数(Schema 中标注为 textarea 格式):
spec:
http:
- name: rule-with-plugins
match:
paths: ["/metrics"]
backend:
serviceName: metrics-service
servicePort: 80
plugins:
- name: prometheus # 插件名(必填)
enable: true # 启用开关(必填)
config: >-
{"prefer_name": true} # 插件配置(textarea 文本)
通过挂载如 prometheus、opentelemetry 等插件,即可在可视化画布内完成可观测性能力的声明式接入,而不必手工维护网关配置。
从文档到源码:模型定义的证据链
若想深入核对本文所述细节,可沿以下路径在仓库中追溯:
- 集成模型文档(frontmatter):docs/content/en/extensions/models/apisix/index.md —— 组件清单、功能列表与工作方式说明的直接来源;
- 模型注册元数据:models/apisix-ingress-controller/0.8.0/v1.0.0/model.json —— 确认版本
v1.0.0(Chart 版本 0.8.0)、注册源 Artifact Hub、类别Cloud Native Network / API Gateway与主题色; - 组件定义目录:models/apisix-ingress-controller/0.8.0/v1.0.0/components ——
ApisixClusterConfig.json、ApisixConsumer.json、ApisixRoute.json、ApisixTls.json、ApisixUpstream.json五份组件 JSON; - 组件 Schema 与能力清单:models/apisix-ingress-controller/0.8.0/v1.0.0/components/ApisixRoute.json —— 内含完整 JSON Schema,以及 8 项内置能力(Performance Test、Workload Configuration、Labels and Annotations Configuration、Relationships、Json Schema、Styling、Change Shape、Compound Drag And Drop),这些能力定义了一旦在 Meshery 画布上放置组件后可以执行的操作类型。
在 Meshery 中的使用方式
APISIX 模型以 Artifact Hub 作为注册源,通过 Meshery 的模型发现与导入机制进入平台。使用时的典型路径为:在 Meshery UI 中导入/激活该模型,然后在设计画布(Designer)中拖入 apisix-route、apisix-upstream、apisix-consumer 等组件,通过可视化配置表单(即上文解析的 JSON Schema)编排网关拓扑与流量策略,最后将设计作为 Kubernetes 配置部署到目标集群。
从源码结构看,ApisixRoute 组件的 capabilities 明确标注 isNamespaced: true,表明该资源按命名空间隔离管理;其模型来源记录为 https://charts.kubesphere.io/main/apisix-ingress-controller-0.8.0.tgz(见 ApisixRoute.json),说明模型定义由该 Helm Chart 解析而来,你可以以此为线索进一步核对上游资源形态。
小结
Meshery 的 APISIX 集成模型将 Apache APISIX Ingress Controller 的 CRD 资源抽象为 7 类可视化组件,覆盖路由、上游、消费者、TLS、插件与全局规则等网关核心要素。它借助"配置即设计"的理念,把动态路由与负载均衡、认证授权、可观测性三大能力落到可复现、可协作的设计画布中。需要特别留意的是,模型版本(0.8.0 Chart)与文档组件清单存在少量差异,实际编排前建议对照 组件定义目录 核对目标版本的可用组件,并以 ApisixRoute Schema 中的字段约束为准编写配置。