- 云原生
- 后端
- 前端
【免费下载链接】kubeapps
A web-based UI for deploying and managing applications in Kubernetes clusters
Kubeapps 的公共 API 文档以 OpenAPI(Swagger)规范为唯一事实来源,本文带你理解它的定义文件结构、两种面向用户的发布方式(SwaggerHub 托管与 Dashboard 内嵌)、完整的"Fork → 编辑 → 同步 → 提 PR"更新流程,以及项目当前的版本化策略。读完本文,你将能够作为外部贡献者向 Kubeapps 提交 API 文档变更,也能理解这套文档在仓库源码中的落地实现。
Kubeapps 是一个面向 Kubernetes 集群的 Web UI,用于部署和管理集群中的应用,其 API 由kubeapps-apis组件以可插拔的 gRPC 服务形式提供(架构细节见 architecture.md)。为了把这些 gRPC 能力暴露给 UI 之外的开发者与自动化工具,项目用 OpenAPI 规范描述了 HTTP 接口,并持续维护与发布这份 API 文档。
API 文档的载体:OpenAPI 规范与 openapi.yaml
Kubeapps API 文档使用 OpenAPI Specification,它是整个文档体系的核心事实来源,共 7600 余行。
从文件头部可以看出它的元信息:
- OpenAPI 版本:
openapi: 3.0.3 - 标题与版本:
info.title为 "Kubeapps API",info.version为0.1.0,明确标注"仍处于初始阶段、可能发生变更";许可证为 Apache-2.0 - servers 模板:
{schema}://{url}:{port},其中schema默认为http、url默认为127.0.0.1、port默认为8080,即开发环境的默认地址 - 安全声明:全局
security声明bearerAuth,对应components.securitySchemes.ApiKeyAuth(类型apiKey,名Authorization,位于 header)——所有接口默认需要 Bearer 令牌鉴权
文档覆盖的接口域
paths一节按 tag 组织接口,覆盖了 Kubeapps 的完整 API 面:
| tag | 路径前缀 | 核心操作 |
|---|---|---|
| PluginsService | /apis/core/plugins/v1alpha1/configured-plugins | 查询已配置插件 |
| PackagesService | /apis/core/packages/v1alpha1/... | 可用包摘要/详情/元数据/版本、已安装包增删改查与资源引用 |
| RepositoriesService | /apis/core/packages/v1alpha1/repositories | 包仓库摘要/详情、增删改、权限查询 |
| FluxV2PackagesService / FluxV2RepositoriesService | /apis/plugins/fluxv2/... | Flux v2 插件对应的包与仓库操作 |
| HelmPackagesService / HelmRepositoriesService | /apis/plugins/helm/... | Helm 插件对应的包与仓库操作,含RollbackInstalledPackage回滚 |
| KappControllerPackagesService / KappControllerRepositoriesService | /apis/plugins/kapp_controller/... | kapp-controller 插件对应的包与仓库操作 |
| ResourcesService | /apis/plugins/resources/v1alpha1/... | 命名空间枚举、can-i权限探测、命名空间创建 |
典型接口如PackagesService_GetAvailablePackageSummaries(GET /apis/core/packages/v1alpha1/availablepackages)接受context.cluster、context.namespace、filterOptions.query/categories/repositories/pkgVersion/appVersion以及paginationOptions.pageToken/pageSize等查询参数,并定义了 200、401 与默认错误响应。这些描述与 kubeapps-apis 的 proto 定义 一一对应,是理解 Kubeapps 可编程接口的最佳入口。
API 文档的两种消费方式
为了让不同用户都能方便地查阅这份 OpenAPI 文件,Kubeapps 采用双通道发布:
- SwaggerHub 托管:文档被发布到 SwaggerHub,便于在线浏览、检索、Fork 与协作编辑;
- Dashboard 内嵌:Kubeapps 安装后,Dashboard 直接内嵌渲染同一份
openapi.yaml。
Dashboard 内嵌渲染的实现
Dashboard 通过 ApiDocs/index.tsx 使用swagger-ui-react(package.json 中依赖版本为^5.17.14)加载/openapi.yaml,并做了两处关键定制:
function authenticate(req: Request): Request { const token = Auth.getAuthToken() || ""; // 否则使用 OIDC 登录,无法在此自动设置 token if (token) { req.headers.Authorization = `Bearer ${token}`; } req.url = req.url.replace("127.0.0.1:8080", `${window.location.host}`); return req; } export default function ApiDocs() { return <SwaggerUI url="/openapi.yaml" docExpansion="list" requestInterceptor={authenticate} />; }requestInterceptor自动把当前登录用户的令牌以Authorization: Bearer <token>注入每个"Try it out"请求,避免 OIDC 场景下手动粘贴令牌;- 同时把文档中
127.0.0.1:8080的开发服务器地址替换为当前 Dashboard 的实际域名,实现在线调试; - 路由挂载在 Routes.tsx 的私有路由表中:
"/docs": ApiDocs,因此登录用户在 Dashboard 内访问/docs即可看到内嵌的 API 文档页面(该路由受RequireAuthentication保护)。
使用 SwaggerHub 更新 API 文档
SwaggerHub 的在线编辑器自带 YAML 校验与可视化辅助,能显著降低手写 OpenAPI 的出错率。官方公开文档托管于 SwaggerHub 上的 Kubeapps 组织;编辑或 Fork 任何 API 都需要 SwaggerHub 账号。以下流程假设贡献者来自 Kubeapps 组织外部,组织内开发者可跳过 Fork 阶段直接编辑。
1. Fork 当前 API 文档
在 SwaggerHub 中执行 Fork 操作,即可把当前 Kubeapps API 文档复制到个人账号下,获得一个可自由编辑的副本。这是后续所有修改的起点。
2. 执行修改
编辑 OpenAPI 文件本质上就是编辑 YAML 文件,但 SwaggerHub 提供两类辅助手段:
- YAML 编辑器:面向文本,直接编辑
openapi.yaml内容,实时校验语法与 schema 合法性; - 可视化编辑器(Visual Editor):面向表单,通过图形界面修改路径、参数、响应与组件定义,降低上手门槛。
无论使用哪种编辑器,改完都可以保存并与 SwaggerHub 保持同步。修改时应遵循 OpenAPI 3.0.3 规范(与 openapi.yaml 文件头部声明保持一致),并注意保持paths、components的组织方式与现有文件风格一致。
3. 同步变更到 GitHub 仓库
将改动送回 Kubeapps 官方仓库有两种方式:
- 手动方式:从 SwaggerHub 复制 YAML 内容,粘贴到本地
dashboard/public/openapi.yaml后提交; - 自动方式:配置 SwaggerHub 的 GitHub 集成,让每次保存的变更自动推送到你的 Kubeapps fork 仓库。
需要注意的是,"从 GitHub 拉取"是 SwaggerHub 的付费功能,不一定所有贡献者都拥有。此时应参考 SwaggerHub 的 Compare & Merge 指南,将你的 fork 与最新发布版本进行比较合并,确保改动基于最新内容,避免冲突。
Kubeapps 维护者可以直接把最新开发版本的openapi.yaml作为比较基准来审阅改动。
4. 发送 Pull Request
改动推送到 fork 的目标分支后,即可发起 PR 到 Kubeapps 主仓库:
Kubeapps 维护者会在名为
openapi的分支中定位 API 变更,因此需要创建的 PR 是kubeapps/openapi → kubeapps/main。
PR 合并后,你的改动会随上游发布,SwaggerHub 上的公共文档与 Dashboard 内嵌文档都会更新。
版本化策略
Kubeapps API 仍处于非常早期的阶段,接口随时可能调整。为了保持简单,项目不在 SwaggerHub 上发布多个版本,而是只保留最新版本并随变更覆盖,避免维护多版本带来的复杂度。
每个 Kubeapps 发布版本对应的openapi.yaml仍可通过常规的 Kubeapps releases 发布页随版本包一起下载,也就是说:SwaggerHub 上永远只有"当前最新",历史版本则沉淀在各发布版本中。对应地,文件头info.version的0.1.0也印证了这一策略——API 尚未进入稳定语义化版本阶段,耦合前建议先在 issue 或 Slack 中与维护者沟通使用场景。
小结
- 事实来源唯一:最新 API 文档以 OpenAPI 3.0.3 定义在 dashboard/public/openapi.yaml;
- 双通道发布:SwaggerHub 面向协作与浏览,Dashboard 内嵌(
/docs路由 +swagger-ui-react+ Bearer 令牌注入)面向已安装用户; - 标准贡献流:Fork → 编辑(YAML/可视化编辑器)→ 同步(手动复制或 GitHub 集成)→ 以
openapi分支向main提 PR; - 版本策略:不发布多版本,SwaggerHub 只保留最新,历史快照随 Kubeapps 版本发布保留。
无论你是想为 Kubeapps API 补充文档、修正参数描述,还是基于这份 OpenAPI 文档构建第三方客户端,都可以按上述流程高效地完成贡献与消费。
- 云原生
- 后端
- 前端
【免费下载链接】kubeapps
A web-based UI for deploying and managing applications in Kubernetes clusters
相关推荐
Gumroad API文档生成终极指南:Swagger集成与OpenAPI 3.1规范全解析
Gumroad API文档生成终极指南:Swagger集成与OpenAPI 3.1规范全解析 Gumroad作为领先的创作者平台,其API接口是开发者与平台交互
后端前端电商IDURAR ERP CRM的后端API文档协作平台:SwaggerHub与团队协作
IDURAR ERP CRM的后端API文档协作平台:SwaggerHub与团队协作 引言 在当今数字化时代,企业资源规划(ERP)和客户关系管理(CRM)系统
后端前端企业应用CRMseomachine /priorities 命令深度解析:从 GSC 数据到分级内容优先级的完整实操路径
seomachine /priorities 命令深度解析:从 GSC 数据到分级内容优先级的完整实操路径 seomachine 是一个面向商业网站的 SEO
人工智能AI 应用AI 写作AI 技能AI Agent
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考