Crossplane 企业自助式基础设施控制平面建设
Crossplane 是构建控制平面的框架。平台团队可以把云数据库、网络、存储、Kubernetes 和外部 SaaS 封装为企业自己的 Kubernetes API,让用户通过少量声明获得经过治理的基础设施。它不是简单的 Terraform 替代品,生产落地需要处理 Provider 权限、Composition、状态、删除策略、漂移、升级和控制平面灾备。
Crossplane Controller 会持续调用外部系统 API。错误 Composition 或删除策略可能批量创建、修改或删除真实资源。生产发布必须有 Schema、策略、预览、审批和恢复机制。
一、控制平面思维
用户提交企业 API(XR)
↓
Crossplane Composition Pipeline
↓
Managed Resources
↓
云厂商、数据库、DNS、GitHub、Kubernetes 等外部 API
用户不必知道厂商全部参数,只选择规格、区域和等级;平台负责网络、加密、备份、标签、监控和权限基线。
二、核心对象
- Composite Resource Definition(XRD):定义企业 API Schema;
- Composite Resource(XR):用户申请的实例;
- Composition:将 XR 转换为一组资源;
- Function:Composition Pipeline 的处理步骤;
- Managed Resource:外部资源的 Kubernetes 表示;
- Provider:连接外部 API;
- ProviderConfig:凭证、区域和连接配置;
- Package:分发 Provider、Configuration 和 Function。
三、设计企业 API
好的 API 表达业务意图,而不是复制云厂商参数。
apiVersion: platform.example.org/v1alpha1
kind: Database
metadata:
name: orders
spec:
parameters:
engine: postgres
size: medium
availability: regional-ha
backupRetentionDays: 14
writeConnectionSecretToRef:
name: orders-connection
平台将 medium 映射到经过验证的实例、存储、监控和网络方案。API 应包含默认值、枚举、范围、不可变字段和清晰状态。
四、XRD 版本治理
API 一旦被多个团队使用,字段删除和语义变化会造成大面积影响。建议:
- 从
v1alpha1开始但建立升级路线; - 新增字段保持向后兼容;
- 不随意改变默认值;
- 使用 Conversion 或迁移工具处理版本;
- 将弃用字段标记并观测使用量;
- 提供示例和变更日志。
五、Composition Pipeline
Composition 使用 Function Pipeline 生成和变换资源。Function 可采用 Patch/Transform、Go、Python、KCL、CUE 等方式。
设计原则:
- 每一步职责单一;
- 输入输出可测试;
- 不依赖不稳定外部调用;
- 对必需能力进行检测;
- Status 回写清晰;
- 失败时不产生半套资源;
- Function 镜像固定摘要并签名。
六、资源依赖
一个数据库产品可能包含 VPC/Subnet、安全组、实例、账号、DNS、监控和备份。依赖资源的 ID 通过 XR 状态或 Function Context 传递。
需要处理:
- 前置资源尚未 Ready;
- 外部 API 最终一致;
- 循环依赖;
- 某一步失败后的孤儿资源;
- 部分资源更新但另一些不可变;
- 删除的反向顺序。
七、Provider 选择与权限
Provider 需要强权限调用云 API。生产应:
- 每环境、账号或租户分离 ProviderConfig;
- 使用工作负载身份或短期凭证;
- 禁止业务用户读取凭证 Secret;
- 限制 Provider 可管理的资源范围;
- 记录 API 调用与异常;
- 固定 Provider 版本并灰度升级。
一个全局管理员密钥服务所有团队,会扩大泄露与误操作半径。
八、管理策略与删除策略
Managed Resource 的管理策略决定 Crossplane 是否观察、创建、更新或删除外部资源。删除策略决定删除 Kubernetes 对象时是删除外部资源还是仅解除管理。
关键数据库、Bucket 和 DNS 区域不应默认随 XR 误删。可使用保留策略、删除保护、最终备份和人工审批多层防护。
九、连接信息与 Secret
外部资源创建后会产生 Endpoint、账号和证书。连接信息可以写入 Secret 或外部密钥系统。
安全要求:
- Secret 加密;
- 最小 RBAC;
- 避免在 XR Status 写明文密码;
- 使用 External Secrets/Vault 等同步;
- 支持凭证轮换;
- 删除资源时处理遗留凭证;
- 审计谁读取连接信息。
十、Composition Revision
更新 Composition 会产生 Revision。需决定现有 XR 是否自动采用新 Revision。
推荐:
- 生产固定 Revision;
- 新 Revision 先测试;
- 对少量 XR 灰度;
- 观察 Diff 和外部 API 行为;
- 再批量升级;
- 保留旧 Revision 以便回退。
自动跟随最新 Revision 可能让一次模板修改同时影响全部资源。
十一、漂移与持续协调
Crossplane 会观察外部资源并尝试恢复期望状态。人工在云控制台修改参数可能被覆盖,也可能产生 Late Initialization。
治理:
- 明确资源唯一控制源;
- 禁止无审批控制台改动;
- 记录 Drift;
- 对外部系统管理字段精确处理;
- 紧急变更后回写声明;
- 不使用大范围忽略掩盖冲突。
十二、策略与准入
使用 ValidatingAdmissionPolicy、OPA/Gatekeeper 或 Kyverno 限制:
- 允许区域和规格;
- 生产必须高可用、加密和备份;
- 禁止公网数据库;
- 强制成本中心和所有者;
- 限制删除;
- 控制 XR 数量与配额;
- 只允许平台批准的 Composition。
API Schema 负责格式,策略负责组织规则。
十三、自助服务流程
典型用户体验:
- 用户在门户或 Git 提交 XR;
- CI 校验 Schema、策略与成本;
- 审批后进入 GitOps;
- Crossplane 创建资源;
- 状态反馈到门户;
- 连接信息写入密钥系统;
- 监控和告警自动注册;
- 到期或删除进入回收工作流。
不要让用户直接访问 Crossplane 管理 Namespace 的高权限对象。
十四、与 Terraform/OpenTofu 的选择
Crossplane 适合持续控制、Kubernetes API、自助平台和组合服务;Terraform/OpenTofu 适合计划/应用工作流、成熟模块和广泛 Provider。两者可以分层,但必须避免同时管理同一资源。
选择标准:控制循环还是任务执行、用户入口、状态治理、团队技能、Provider 成熟度和恢复方式。
十五、Operations
Crossplane Operations 可运行一次性、定时或资源变更触发的 Function Pipeline,适合证书检查、升级、维护等任务。若功能仍处于 Alpha,应限制生产使用范围,固定版本并准备替代流程。
十六、可观测性
监控:Reconcile 速率与错误、Queue、Provider 调用延迟、限流、XR/Managed Resource Ready、Synced、Function 错误、Package 健康、Secret 写入、资源创建耗时和删除卡住。
状态应能回答:用户申请到哪一步、哪个资源失败、外部资源 ID、是否重试以及谁负责处理。
十七、常见故障
XR Ready=False
从 XR Condition 查看 Composition/Function,再检查生成的 Managed Resource 和 Provider 日志。
Provider 认证失败
检查工作负载身份、Token、时钟、区域、权限策略和 Secret 格式。不要把管理员密钥作为永久修复。
资源不断更新
可能是默认值、字段序列化、外部控制器或不可变字段造成 Diff。对比 Observed 与 Desired,避免循环写入。
删除卡住
检查 Finalizer、外部 API、依赖资源、删除保护和凭证。强删 Finalizer 会留下孤儿资源和费用。
十八、升级
升级前备份 etcd、XRD、Composition、ProviderConfig、Package Lock 和 Secret;阅读 CRD/Provider 兼容;先升级测试控制平面;灰度 Provider;观察 Reconcile;再升级生产。
控制面升级和企业 API 变更应分开,降低故障定位难度。
十九、灾难恢复
恢复需要 Kubernetes/etcd、Crossplane 版本、Package、Provider、Function、XRD、Composition、Git 仓库和凭证。恢复后必须防止错误创建重复外部资源,核对 External Name/资源 ID 与真实对象绑定。
定期在隔离控制平面恢复一组非关键 XR,验证“观察现有资源”而非重建。
二十、上线清单
- 企业 API 表达业务意图且版本化;
- Composition/Function 有自动测试;
- Provider 权限按环境隔离;
- Secret 不在 Status 和日志泄露;
- 关键资源保留与删除审批生效;
- Revision 采用灰度升级;
- 与 Terraform/GitOps 的所有权清晰;
- 状态、错误、成本和漂移可观测;
- 控制平面完成恢复和接管演练。
参考资料
- Crossplane Documentation:
https://docs.crossplane.io/ - Crossplane Compositions:
https://docs.crossplane.io/latest/composition/compositions/ - Crossplane Operations:
https://docs.crossplane.io/latest/operations/