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 负责格式,策略负责组织规则。

十三、自助服务流程

典型用户体验:

  1. 用户在门户或 Git 提交 XR;
  2. CI 校验 Schema、策略与成本;
  3. 审批后进入 GitOps;
  4. Crossplane 创建资源;
  5. 状态反馈到门户;
  6. 连接信息写入密钥系统;
  7. 监控和告警自动注册;
  8. 到期或删除进入回收工作流。

不要让用户直接访问 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/
Copyright © yan-jian.com 2023 - 2026 · Powered by GitBook更新时间: 2026-11-03 20:14:33

results matching ""

    No results matching ""