资讯详情

KubeVela vNext KEP-2.5 解读:Hub/Spoke 凭据模型与令牌轮换协议

📅 2026/9/27 7:45:54 | 华诺云谱 👁 阅读
KubeVela vNext KEP-2.5 解读:Hub/Spoke 凭据模型与令牌轮换协议
云原生DevOps运维微服务【免费下载链接】kubevelaThe Modern Application Platform.项目地址https://gitcode.com/gh_mirrors/ku/kubevela点击查看免费下载KubeVela vNext2.0架构将控制平面拆分为Hub应用控制器与Spoke组件控制器两级而 KEP-2.5 正是支撑这套多集群体系的安全基石它定义了 spoke 注册时的引导凭据建立、基于 Secret 消息总线的令牌轮换协议以及派发完整性的 HMAC 签名机制。读完本文你将掌握该凭据模型的三层密码学设计ECDH 密钥协商、AES-256-GCM 信封、RSA-OAEP 前向保密、令牌轮换的完整时序与循环依赖陷阱以及派发完整性在 Component CR 上的落地形态并能在当前仓库的 cluster-gateway 实现中找到对应的现实锚点。阅读前提本文描述的 KEP-2.5 是 vNext Roadmap 下的设计文档仓库内该文件状态标注为DraftingNot ready for consumption——属于早期概念草案方向尚未定稿不应作为已承诺行为的实现依据预期会有较大变更。文中所涉 KubeVela 现有多集群能力以当前仓库代码为准。背景Hub 与 Spoke 之间唯一的通信方向KEP-2.5 的凭据设计建立在一条明确的通信拓扑之上Hub 与 Spoke 之间的通信完全由 Hub 发起。Spoke 永远不会主动向 Hub 建立出站连接——它通过 cluster-gateway 被 Hub 读写响应Hub 请求的方式是写入自己的本地 API再由 Hub 通过 cluster-gateway 读回。方向机制Hub → Spokecluster-gatewaykubectl proxySpoke → HubSpoke 写入本地 APIHub 经 cluster-gateway 读回这一单向往返模型意味着spoke 侧无需任何持久化出站连接也无需在防火墙/网络策略上为 spoke 反向访问 hub 开放端口。Hub 只需要一个能在目标集群上执行读写操作的凭据通道即可。在仓库现有实现中这条通道的真实形态可以从多集群管理代码里找到对应物。pkg/multicluster/utils.go中GetClusterGatewayService会校验 cluster-gateway 的 APIService 是否处于Available状态WaitUntilClusterGatewayReady则最多等待 5 分钟60 次重试、每次 5 秒间隔等待网关就绪cmd/core/app/config/multicluster.go中--enable-cluster-gateway标志默认关闭控制是否启用该多集群通道。当前实现的凭据以 Secret 形式存放在 cluster-gateway 命名空间默认vela-system见pkg/multicluster/utils.go中的ClusterGatewaySecretNamespace并通过cluster.core.oam.dev/cluster-credential类型标签区分凭据种类如 ServiceAccountToken 或 X509 证书见pkg/multicluster/cluster_management.go。BootstrapSpoke 注册时的引导凭据当运维人员从 Hub 侧注册一个 Spoke 时提供一份由操作者提供的 kubeconfigKEP-2.5 定义了一个一次性引导流程其核心目标是在不传输共享秘密的前提下让双方各自独立推导出相同的对称密钥Hub 生成 ECDH 密钥对P-256专用于该 spoke 关系双方执行密钥协商推导出一个共享的AES-256-GCM 对称密钥——任何一方都不在网络上传输这个秘密双方仅凭密钥对材料各自独立计算出相同值Hub 存储推导出的对称密钥与 spoke 的公钥存放于 Hub 上的vela-system/spoke-credential-spoke-nameHub 通过引导 kubeconfig 将自己的公钥写入 spoke存放为vela-system/hub-credentialSpoke 在本地推导出相同的共享对称密钥并与 hub 公钥一起保存引导 kubeconfig 在注册完成后即被丢弃——此后所有通信都改用注册好的凭据走 cluster-gateway不再依赖这份初始 kubeconfig。这里引入一个关键概念共享的 AES-256-GCM 对称密钥是长期引导凭据long-lived bootstrap credential。它跨越多轮令牌轮换周期持续存在只有在显式的重新注册流程见下文引导凭据刷新中才会被刷新。这一引导即丢弃的形态与仓库中现有集群接入逻辑形成呼应pkg/multicluster/cluster_management.go中的JoinClusterByKubeConfig从 kubeconfig 路径加载集群配置LoadKubeClusterConfigFromFile经Validate拒绝空集群名、拒绝保留名local与PostRegistration创建命名空间、失败自动回滚 detach后完成注册注册后的长期凭据即转为 Secret 形式管理。令牌轮换协议以 Secret 为消息总线令牌轮换完全由Hub 驱动。spoke 上的一个请求/响应 Secret充当消息总线Hub 写入请求spoke 更新为响应Hub 再经 cluster-gateway 读回。整个协议分三步。Step 1 — Hub 发起Hub 为本轮轮换周期生成全新的RSA-OAEP 密钥对2048 位Hub 构造载荷{ newPublicKey: RSA 公钥, requestId: uuid, issuedAt: 时间戳 }Hub 用共享 AES-256-GCM 对称密钥加密该载荷Hub 将密文写入 spokevela-system/token-rotation-requestId并打上标签oam.dev/hub-request: token-rotation。Step 2 — Spoke 处理Spoke 在本地 API 上监听带oam.dev/hub-request: token-rotation标签的 SecretSpoke 用自己持有的共享 AES-256-GCM 对称密钥解密载荷Spoke 生成或轮换 cluster-gateway 访问令牌Spoke 用载荷中的Hub 新 RSA 公钥加密新令牌——此时该令牌只有持有对应私钥的人才能读取Spoke 将{ encryptedToken: RSA 加密后的令牌, requestId: uuid, respondedAt: 时间戳 }写回同一个 Secret。Step 3 — Hub 收集Hub 经 cluster-gateway 监听该请求 Secret检测到响应字段出现Hub 用本轮新的 RSA 私钥解密令牌Hub 将新令牌存入vela-system/spoke-credential-spoke-nameHub 删除 spoke 上的请求 SecretHub 记录轮换事件用于审计。协议的核心安全属性是令牌投递的前向保密forward secrecy每轮轮换都会生成全新的 RSA 密钥对某轮周期的私钥一旦泄露无法解密其他任何轮次的令牌——单点泄露被隔离在单个轮次之内。轮换的循环依赖一个必须提前设计的失败模式KEP-2.5 特别指出一个架构级陷阱轮换请求本身要经过 cluster-gateway 才能到达 spoke而 cluster-gateway 恰好需要当前有效的凭据才能被访问。于是修复过期凭据的通道与被过期凭据封锁的通道是同一条通道形成循环依赖。该文档给出的判断是单次轮换失败无害旧令牌仍然有效下一次尝试即可成功持续失败才是灾难一旦凭据真正过期就没有带内in-band方式投递新凭据恢复手段只能是对每个受影响的 spoke 做手动重新注册——一个轮换路径上的短暂故障会被放大成与集群规模成正比的操作事故。因此这不是可以事后发现的问题而必须在设计期解决轮换必须提前于过期足够远的时间启动使重试预算能覆盖任何合理的故障时长告警必须针对轮换失败而不是凭据已过期——等到凭据过期再告警通道已经消失了。这句话是本文档最值得运维团队直接摘录的设计准则。Secret 生命周期与审计请求 Secret 在 Hub 读取并存储响应后会立即从 spoke 删除。Hub 侧的审计轨迹通过结构化的控制器日志维护INFO token-rotation spokeprod-eu requestIdabc123 statusinitiated INFO token-rotation spokeprod-eu requestIdabc123 statusresponse-received respondedAt... INFO token-rotation spokeprod-eu requestIdabc123 statuscomplete secret-deletedtrue这种短命 Secret 结构化日志的组合让每次轮换的发起、响应到达、完成与清理都留下可检索的记录供标准日志管道直接抓取。引导凭据刷新重新注册流程如果长期共享对称密钥需要人工轮换操作者触发重新注册re-registration流程提供一份全新的 kubeconfig、重复 ECDH 密钥协商、并在两侧覆写对称密钥。此后现有的令牌轮换将在下一个调度周期开始使用新的对称密钥继续工作。密码学原语一览KEP-2.5 对每个环节选用的算法给出了明确理由用途算法理由引导密钥协商ECDHP-256标准算法无需传输密钥请求/响应信封AES-256-GCM快速、带认证的对称加密令牌投递RSA-OAEP2048 位即使对称密钥日后被攻破令牌也仅 Hub 可读密钥材料存储Kubernetes Secret标准机制可切换为 KMS 后端见 Open Questions三者各司其职ECDH 解决不传输秘密地建立共享密钥AES-256-GCM 解决批量请求的高效认证加密RSA-OAEP 解决投递环节的前向保密与责任隔离。密钥材料存放在 Kubernetes Secret 中与仓库现有 cluster-gateway 凭据存储方式一致Secret 存放在vela-system命名空间见pkg/multicluster/cluster_management.go与pkg/multicluster/utils.go。派发完整性共享密钥的另一重职责共享的 AES-256-GCM 对称密钥同时充当派发完整性dispatch integrity机制。Hub 派发的每个 Component CR 都携带一个 HMAC-SHA256 签名注解该签名基于 Component 的关键字段计算spoke 的组件控制器在处理前校验签名拒绝任何无法认证为来自 Hub 的 Component。注解格式metadata: annotations: oam.dev/dispatch-sig: HMAC-SHA256(canonicalPayload, sharedSymmetricKey)规范载荷canonical payload是 Hub 承诺字段的确定性序列化componentName namespace definitionName definitionRevision propertiesHash resourceVersionspoke 使用自己持有的共享对称密钥从相同字段重新计算 HMAC匹配→ Component 真实且未被篡改继续处理不匹配→ spoke 拒绝该 Component、发出 warning 事件并且不进行渲染。两个结构性保证值得强调跨 spoke 重放被结构性阻止共享对称密钥是每 spoke 独立的为spoke-a签名的 Component 在spoke-b上必然校验失败——无需任何额外的 nonce 或 audience 字段无 fail-open 模式Hub 在每次修改 Component 的 reconcile 上都会刷新签名属性变更、Definition 升级、trait 注入而 spoke 将缺失或无效签名视为硬性拒绝——派发完整性没有失败即放行的后门。这一设计与 Hub 侧的 Definition 快照机制互相咬合在 vNext 的 Hub 应用中Component.spec.definitionSnapshot.inline中的 Definition 快照会以每 spoke 的 AES-256-GCM 对称密钥加密并用每 spoke 的 Definition 签名密钥在 Component CR 上打component.oam.dev/snapshot-signature注解详见 KEP-2.3Hub Application-Controller 集成。Hub 侧 snapshot 加密 签名注解Spoke 侧 Definition 快照验签 Component 派发验签共同构成 vNext 双向信任模型的两端。与 vNext 路线图及相邻 KEP 的关系KEP-2.5 是 vNext Roadmap 总纲design/vela-core/keps/README.md中安全与凭据模型板块的核心子 KEP。该板块的总体方向包括不保留长期静态令牌全部短生命周期并自动轮换、双向信任spoke 控制自身身份Hub 无法为 spoke 铸造令牌Hub 为每个 spoke 颁发独立签名密钥单点沦陷不影响其他 spoke、三要素令牌刷新spoke 集群写权限 Hub 每 spoke 签名密钥 安全通道三者同时沦陷任何两个都不足以攻破等。需要说明的是KEP-2.5 文档正文中的轮换协议由 Hub 驱动与总纲中spoke 主动驱动凭据刷新、Hub 纯被动的表述存在方向性张力这正对应文档自身的 Drafting 状态——方向尚未定稿阅读时应以探索性设计对待。凭据模型在架构链条中的位置可以这样理解KEP-2.1core.oam.dev/v2alpha1API 类型与 CRD定义Component、Dispatcher等基础资源KEP-2.2Spoke 组件控制器与工作流引擎定义 spoke 侧的渲染、工作流、健康评估与 ResourceTrackerspoke 收到 Component 后先验签再渲染KEP-2.3Hub 应用控制器集成定义 Hub 的 Definition 解析、快照加密签名、trait 注入与 Component 派发KEP-2.4Dispatcher 实现定义 local、cluster-gateway、OCM 三种投递后端——KEP-2.5 中经 cluster-gateway 读写信令 Secret正是 cluster-gateway dispatcher 路径的凭据层保障KEP-2.5本文为以上所有跨集群交互提供凭据建立、轮换与完整性校验。仓库中可继续深入的相关实现入口多集群注册与凭据管理的核心代码在 pkg/multicluster/cluster_management.go含JoinClusterByKubeConfig、DetachCluster、凭据类型CredentialTypeServiceAccountToken/CredentialTypeX509Certificatecluster-gateway 通道初始化在 pkg/multicluster/utils.go多集群开关配置在 cmd/core/app/config/multicluster.go。小结三个值得带走的设计判断分层密码学隔离风险ECDH 建钥、AES-256-GCM 加密请求、RSA-OAEP 投递令牌任一层的泄露都无法直接穿透其他层单轮 RSA 私钥泄露更不会波及其他轮次把凭据过期视为事故而非告警条件轮换必须提前启动、告警必须盯住轮换失败否则循环依赖会把通道故障放大为与集群规模成正比的手工事故每 spoke 密钥 无 fail-open 的验签派发完整性用一 spoke 一密钥的 HMAC 把跨 spoke 重放消灭在结构上并把缺失签名当作硬性拒绝——这是 Hub/Spoke 架构里信任边界的具体落点。赞分享云原生DevOps运维微服务【免费下载链接】kubevelaThe Modern Application Platform.项目地址https://gitcode.com/gh_mirrors/ku/kubevela点击查看免费下载相关推荐Hydra-AITambo自托管部署指南基于 Docker Compose 的 Web、API 与 PostgreSQL 一键私有化部署Hydra AITambo自托管部署指南基于 Docker Compose 的 Web、API 与 PostgreSQL 一键私有化部署 本指南面向希望将云原生DevOps运维微服务Civitai Monorepo 认证架构解析Hub-Spoke 模式下的薄会话令牌、本地校验与跨域桥接Civitai Monorepo 认证架构解析Hub Spoke 模式下的薄会话令牌、本地校验与跨域桥接 本文以 Civitai 仓库中的认证目标架构规范 a后端前端AI 应用Kubebuilder 多版本 API 转换实现指南Hub-Spoke 模型与 Conversion Webhook 实战Kubebuilder 多版本 API 转换实现指南Hub Spoke 模型与 Conversion Webhook 实战 本文围绕 Kubebuilder开发者工具代码生成CLI云原生后端上一篇Blazor革命用C构建全栈Web应用的终极指南下一篇跨平台零依赖QuestPDF多平台部署与集成实战指南创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
📝

华诺云谱内容团队

资深建站顾问 · 行业研究员

10年+企业数字化服务经验,专注智能建站、SEO优化与品牌营销,持续输出建站技巧、行业洞察与营销干货,已帮助5000+企业实现数字化增长。

你可能需要的服务

订阅华诺云谱资讯周报

每周一封,精选建站技巧、SEO与营销干货,直达邮箱。已有 8,000+ 企业主订阅,助你少走弯路。

↑