Skip to main content

Command Palette

Search for a command to run...

Scaling Spire.md

Updated
3 min read

原文:Scaling SPIRE

SPIRE 的容量是有限的,随着工作负载强度的不同,需要有不同的规模。一套 SPIRE 中的 Server 部分,可能由一或多个共享数据存储的 SPIRE Server 组成;还可以是同一信任域的多个 SPIRE Server;至少有一个 SPIRE Agent,当然,多数时候是多个 Agent。

部署规模和负载规模相关。单个 SPIRE Server 能够承载一定数量的 Agent 和注册项。SPIRE Server 负责管理和签发注册项的身份,因此它的内存和 CPU 消耗是随着负载注册条目的数量线性增长的。单一的 SPIRE Server 部署还可能导致单点失败。

SPIRE Server 可以用水平扩展的方式支持大量的 Agent 和工作负载。多个 Server 的情况下,运算任务会分布到多个 SPIRE Server 实例之中。除了算力增加,多实例部署也避免了单点失败的风险。

高可用模式的 SPIRE Server

要用水平扩展的方式来实现高可用和分布式计算,只需要让所有服务器共享同一个信任域和数据存储就可以了。

SPIRE Server 会把注册项和身份映射策略等动态配置信息进行持久化,缺省情况下会使用内置的 SQLite,同时可以使用多种 SQL 数据库进行存储,还可以通过插件将数据保存在 Kubernetes 的 CRD 之中。所以要对 SPIRE Server 进行水平扩展之前,就要选择满足需求的数据存储方式。这方面的内容可以参考数据存储插件文档。

高可用模式里,每个服务器都管理着自己的 CA,这个 CA 可能是自签发,也可能是一个共享的上游根 CA 所签发的中间证书。

选择 SPIRE 部署拓扑

SPIRE 有三种部署拓扑:

  • 单信任域

  • 嵌套 SPIRE

  • SPIRE 联邦

管理域边界、工作负载数量、高可用需求、供应商数量以及认证需求都是部署方案的决策输入项。

单信任域

单信任域拓扑适用于独立环境或者一个管理域内的多个环境共享。单信任域的最大好处就是从单一 CA 中签发身份证书,能有效降低 SPIRE Server 的部署管理的复杂度。

然而要跨越 Region、平台或者供应商的话,单信任域就面临容灾、分布等需求的挑战了。这种情况下,嵌套部署就比较有优势了。

嵌套 SPIRE

SPIRE 的嵌套部署呈现了一种链式结构,虽然是多个 Server,但是签发的是同一个信任域的身份,这样所有工作负载的身份都处在同一个信任域里,能够用该信任域的根密钥进行校验。

嵌套拓扑中,下游 SPIRE Server 和上游的 SPIRE Agent 共同部署。下游 SPIRE Server 通过使用 Workload API 获取凭据,这些凭据会用于和上游 SPIRE Server 进行通信获取中间 CA。

一种便于理解嵌套拓扑的思路:上游 SPIRE 服务器是一个(或者是一组高可用部署的)全局服务器,下游 Server 是 Region 或者集群级的。

在这种情况下,顶层 SPIRE Server 掌管着根证书/密钥,下游服务器会向上层请求中间证书,用于下游 CA。这样即使是顶层服务宕机,中间服务器还能继续运作,一定程度上提高了可用性。

嵌套逻辑也能用于多云环境。对 Node Attestor 进行匹配之后,下游服务器能够为不同的云供应商环境中的工作负载和 Agent 提供证明。

水平扩展 SPIRE Server,达到高可用和负载均衡的目的,作为互补,嵌套拓扑可以作为一种遏制策略来对故障域进行分割。

SPIRE 联邦

有时会需要多个信任根共存:有的组织会有不同的分隔和不同的管理,或者多个环境之间偶尔进行通信。

还有一种用例就是在组织之间(例如云供应商和客户之间)进行 SPIFFE 的互操作。

这种多信任域和互操作需要良好定义的互操作方法,让一个信任域的工作负载能够认证另一个信任域的工作负载。互信的技术细节可以参考 https://github.com/spiffe/spiffe/blob/main/standards/SPIFFE_Trust_Domain_and_Bundle.md#5-spiffe-bundle-endpoint,具体操作可以阅读 https://github.com/spiffe/spire-tutorials/tree/main/docker-compose/federation

和外部系统的互动

SPIFFE 兼容系统

SPIFFE 身份能够和其它提供了 SPIFFE 联邦接口的系统对接,在联邦中进行安全的认证和通信。和 SPIRE 联邦类似,可以在 SPIFFE 兼容的系统之间(例如 Istio 和 SPIRE,或者两个 Istio 之间)建立联邦。

例如目前的 Istio 中所有的应用都在同一个信任域里,或者说是共享一个信任根。可能存在多个服务网格,或者服务网格中的应用需要和外部的服务进行受保护的通信。联邦 SPIFFE 就可以用来够完成网格之间或者网格内外的互信关系。

OIDC-Provider

针对公有云之类的 OIDC 兼容的提供商,SPIRE 能够代表通过认证的工作负载和远端系统进行可编程的认证。例如在 AWS 上,SPIRE 认证的工作负载能够和 AWS S3、RDS 或者 AWS CodePipeline 进行通信。

SPIR OIDC Discovery Provider 用 ACME 协议获取 Web PKI 证书,这个证书用于一个端点的安全,这个端点会提供 OIDC 兼容的 JWKS 包以及标准的 OIDC 发现文档。远程 OIDC 认证服务进行配置之后,能够定位到这一端点,并对 WebPKI 服务进行验证。配置生效后,远端系统的 IAM 策略和角色可以和 SPIFFE ID 进行映射。工作负载可以使用 JWT-SVID 访问 OIDC 认证的系统。被访问系统从预定义的 OIDC 发现服务 URI 中获取 JWKS,如果 JWT-SVID 中包含的 SPIFEE ID 是被允许访问该资源的,就放行。这样一来,工作负载就能访问外部远程服务,无需额外处理认证问题了。

OIDC 发现服务配置:https://github.com/spiffe/spire/tree/main/support/oidc-discovery-provider

AWS OIDC 联邦指南:https://spiffe.io/spire/try/oidc-federation-aws/

部署规模评估

在评估 SPIRE 部署规模时,需要考虑如下因素:

SVID 和根证书的 TTL

每节点的工作负载数量

JWT-SVID 的用量(JWT 必须按需签署,不像 x509 是预生成的)

注册项的变更频率

SPIRE 服务所在节点上的其它进程

底层基础设施环境的形态和容量

数据存储的设计规划非常重要。上表没有提到数据存储问题,但它会对 SPIRE 性能造成潜在限制。每次 Agent(每 5 秒钟)的认证同步,都是一个昂贵的操作,数据存储可能成为性能瓶颈。嵌套拓扑中每个 SPIRE 服务器都存储自己的数据,因此可以降低这种成本。

下表尝试呈现一个 SPIRE 的规格指导。数据来自于一个测试环境,所以无法对任何用户的实际环境提供保障,只能在数量级上给出一个参考。网络带宽和数据性能没有包含在内。另外工作负载和 Agent 数量也不代表 SPIRE 规模的理论上限。

Number of Workloads10 Agents100 Agents1000 Agents5000 Agents
10 Workloads2 Server Units with 1 CPU core, 1GB RAM2 Server Units with 2 CPU cores, 2GB RAM2 Server Units with 4 CPU cores, 4GB RAM2 Server Units with 8 CPU cores, 8 GB RAM
100 Workloads2 Server Units with 2 CPU cores, 2GB RAM2 Server Units with 2 CPU cores, 2GB RAM2 Server Units with 8 CPU cores, 8 GB RAM2 Server Units with 16 CPU cores, 16 GB RAM
1,000 Workloads2 Server units with 16 CPU Cores, and 8GB RAM2 Server units with 16 CPU Cores, and 8GB RAM2 Server units with 16 CPU Cores, and 8GB RAM4 Server units with 16 CPU Cores, and 8GB RAM
10,000 Workloads4 Server units with 16 CPU Cores each, and 16 GB RAM4 Server units with 16 CPU Cores each, and 16 GB RAM4 Server units with 16 CPU Cores each, and 16 GB RAM8 Server units with 16 CPU Cores each, and 16 GB RAM

More from this blog

龙虾恐慌:AIOps 又要改名了?

ChatGPT 开始,把 AI 拉近到普罗大众的面前,让无数人感受到 AI 的亲民魅力。而龙虾,则把大模型驱动的自动化能力,突然间变得水灵灵、活泼泼地走进千家万户。它不只是“风口上的猪”,而是风口本身。热度高到让 Mac mini 一度断货,不知道这在不在库克的预料之内。 每代人都有每代人的鸡蛋,春节期间,我就领了我的鸡蛋。翻出古老的 MacBook Air M1,充值各种大模型。当然了,这个工具

Mar 9, 20261 min read

再见 2025

我猜不少人以为这个号废了吧?并没有,只是今年变化有点大,一直有种抄起键盘,无从说起的感觉,所以一直偷懒到今天,2025 的最后一天。 今年是我的第四个本命年,去年末一期播客里,大内说本命年不是灾年,是变化年,有危也有机。可是讲真啊,只看到危,没看到机。 各种因缘际会,从鹅厂跳槽到前东家,已经接近四年,第一个合同期已经进入尾声。除了前两年还在云原生领域嗷嗷叫,后两年基本都是些鸡零狗碎的东西了,用老东家的术语说是——偏离主航道,可谓是前景暗淡了。 一旦确定要滚蛋,反倒心思轻松起来,每天骑着我的小红车...

Jan 5, 20261 min read

辅助编程?dora 说:我知道你很急可是请你别急

从 OpenGPT 把大模型的火烧旺了之后,这三年来,相信很多组织或摩拳擦掌、或躬身入局,希望借助聪明能干的大模型,或想偿还技术宅,或想降本增效,或想弯道超车。一时间,沉寂许久的 AIxx 又活过来了,LLM Ops、Vibe Coding、中医大模型、GPT 算命等等,全都老树发新芽,焕发了勃勃生机。那么视角拉回从业者最关注的饭碗相关的领域之一——AI 辅助开发,产生了什么触动,应该如何拥抱呢? DORA 的年度报告中给出了很有意思的结论——强者恒强。 执行摘要部分总结了几个有趣的点: 问题...

Oct 6, 20251 min read

[译]dora:ai 辅助软件开发状态报告

执行摘要 在 2025 年,科技领导者面临的核心问题已不再是“是否要采用 AI”,而是“如何实现其价值”。 DORA 的研究基于超过 100 小时的定性访谈和来自全球近 5,000 名技术专业人士的问卷调查。研究揭示了一个关键事实:AI 在软件开发中的主要角色是“放大器”。它会放大高效能组织的优势,也会凸显组织的缺陷。 关键结论:AI 是放大器 AI 投资的最大回报并非来自工具本身,而是来自组织底层系统的战略性建设: 高质量的内部平台 清晰的工作流 团队的协同能力 缺少这些基础,AI ...

Oct 2, 202514 min read

僭越了,有人在用 Rust 写 Kubernetes

一个新语言问世,最爱做的事情之一,就是重写存量软件了。 云原生喝酒 SIG 重点扶持项目——rk8s(https://github.com/rk8s-dev/rk8s) 也可以归在这个范畴里,只不过这个项目重写的东西比较大,是 Kubernetes。 从 2025 年 1 月第一个 Commit 开始,到现在有了 200 多次 Commit,十几万行代码。当然距离 Kubernetes 的几百万行代码还差得远——老马就是喜欢整这种大无畏项目。 另外该项目也是国内第一个脱离 Cargo 转向使用 ...

Sep 27, 20253 min read

【伪】架构师

342 posts