2. Crossplane 核心概念回顾:Provider、Managed Resource、Composition、Claim
在深入 IDP 权限与审计设计之前,必须先厘清 Crossplane 的四个核心抽象层。它们构成了从“云资源声明”到“实际基础设施”的完整映射链,也是后续所有策略控制与可观测性注入的锚点。
2.1 四层抽象总览
Crossplane 将基础设施管理拆解为 Provider(驱动层)、Managed Resource / MR(资源实例层)、Composition(模板编排层)和 Claim / XRC(用户声明层)。下表总结了每一层的职责与典型角色:
| 抽象层 | Kubernetes 资源类型 | 核心职责 | 典型使用者 |
|---|---|---|---|
| Provider | Provider / ProviderConfig | 封装云厂商 SDK,建立认证与 API 通道 | 平台工程师 |
| Managed Resource (MR) | 例如 AWS::RDS::Instance |
代表一个具体的云资源实例,直接映射 API | Crossplane 控制器 |
| Composition | Composition | 定义一组 MR 的编排模板,支持补丁与转换 | 平台工程师 |
| Claim (XRC) | CompositeResourceClaim | 面向开发者的轻量声明,隐藏底层复杂度 | 应用开发者 |
2.2 Provider:云厂商接入网关
Provider 是 Crossplane 的插件式扩展点。每个 Provider 对应一个云服务商(AWS、Azure、GCP)或协议层(Helm、Kubernetes)。它通过 ProviderConfig 承载认证凭据,并注册一组自定义资源定义(CRD)到集群中。
apiVersion: pkg.crossplane.io/v1
kind: Provider
metadata:
name: provider-aws
spec:
package: xpkg.upbound.io/crossplane-contrib/provider-aws:v0.47.0
---
apiVersion: aws.upbound.io/v1beta1
kind: ProviderConfig
metadata:
name: default
spec:
credentials:
source: Secret
secretRef:
namespace: crossplane-system
name: aws-creds
key: creds
2.3 Managed Resource:单一资源实例
Managed Resource(MR)是 Crossplane 对云资源的一对一映射。每个 MR 的 spec 字段直接对应云 API 的输入参数,status 字段反映实时状态。Crossplane 控制器通过 Reconciler 循环确保 MR 的 spec.forProvider 与云端实际配置一致。
apiVersion: rds.aws.upbound.io/v1beta1
kind: Instance
metadata:
name: my-postgres
spec:
forProvider:
region: us-east-1
dbInstanceClass: db.t3.micro
engine: postgres
engineVersion: "15"
masterUsername: admin
masterUserPasswordSecretRef:
name: db-password
namespace: default
key: password
allocatedStorage: 20
writeConnectionSecretToRef:
name: my-postgres-conn
namespace: default
MR 是权限审计的最小粒度单元。每一个 MR 的创建、更新、删除都会在 Crossplane 的 events 和云厂商的 CloudTrail / Activity Log 中留下记录。
2.4 Composition:资源编排模板
Composition 将多个 MR 组合成一个可复用的“蓝图”。它通过 patchSets 和 patches 实现字段映射、默认值注入和条件转换。一个 Composition 通常对应一个平台能力单元,例如“标准三节点 PostgreSQL 集群”或“带 WAF 的 ALB 服务”。
apiVersion: apiextensions.crossplane.io/v1
kind: Composition
metadata:
name: xpostgresqls.database.example.org
spec:
compositeTypeRef:
apiVersion: database.example.org/v1alpha1
kind: XPostgreSQL
resources:
- name: rds-instance
base:
apiVersion: rds.aws.upbound.io/v1beta1
kind: Instance
spec:
forProvider:
engine: postgres
engineVersion: "15"
allocatedStorage: 20
patches:
- type: FromCompositeFieldPath
fromFieldPath: spec.parameters.storageGB
toFieldPath: spec.forProvider.allocatedStorage
- name: security-group
base:
apiVersion: ec2.aws.upbound.io/v1beta1
kind: SecurityGroup
spec:
forProvider:
vpcIdSelector:
matchLabels:
environment: production
patches:
- type: FromCompositeFieldPath
fromFieldPath: spec.parameters.vpcId
toFieldPath: spec.forProvider.vpcId
patches 和 connectionDetails 决定了哪些字段会暴露给 Claim。IDP 门户必须确保 Composition 不泄露敏感字段(如数据库主密码)到用户可见的 Claim 状态中。
2.5 Claim:开发者声明接口
Claim(CompositeResourceClaim,简称 XRC)是面向开发者的最终 API。它隐藏了 Composition 内部的 MR 细节,只暴露必要的参数。开发者通过创建 Claim 对象来申请资源,Crossplane 控制器自动实例化对应的 Composition 并生成 MR。
apiVersion: database.example.org/v1alpha1
kind: PostgreSQL
metadata:
name: team-alpha-db
namespace: team-alpha
spec:
parameters:
storageGB: 50
engineVersion: "15"
vpcId: vpc-0abc123
writeConnectionSecretToRef:
name: db-conn
Claim 是 IDP 自助门户与 Crossplane 之间的契约边界。门户只应允许用户填写 Claim 的 spec.parameters,而 spec.claimRef、spec.compositionRef 等系统字段必须由门户后端自动注入,防止用户绕过权限控制。
2.6 四层关系与数据流
下图展示了从 Claim 到 Provider 的完整资源创建链路:
2.7 核心概念对比总结
下表从生命周期、作用域和变更频率三个维度对比四个核心概念,帮助你在 IDP 蓝图设计中快速定位每个层的管控重点:
| 维度 | Provider | Managed Resource | Composition | Claim |
|---|---|---|---|---|
| 生命周期 | 集群级,长期运行 | 跟随资源创建/删除 | 平台级,版本迭代 | 跟随应用需求 |
| 作用域 | 全局 | 单一资源实例 | 跨命名空间 | 限定命名空间 |
| 变更频率 | 低(版本升级) | 中(配置漂移修复) | 低(平台能力更新) | 高(开发迭代) |
| 审计粒度 | 凭据使用记录 | 资源级 API 调用 | 模板变更历史 | 用户操作日志 |