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 面向开发者的轻量声明,隐藏底层复杂度 应用开发者
关键理解:Claim 是“我要一个 PostgreSQL 实例”,Composition 是“如何创建这个实例”,MR 是“这个实例的当前状态”,Provider 是“谁来执行创建”。四层缺一不可。

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
权限边界提示:ProviderConfig 中的凭据决定了 Crossplane 在云端的权限上限。IDP 接入后,必须通过 IAM 角色分拆或 AssumeRole 机制限制每个 ProviderConfig 的作用域,避免凭据滥用。

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
审计关键点:Composition 中定义的 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 的完整资源创建链路:

Crossplane 四层抽象与资源创建数据流 Claim (XRC) PostgreSQL (team-alpha-db) Composition xpostgresqls.database.example.org MR: RDS Instance my-postgres MR: SecurityGroup sg-app Provider (AWS) provider-aws + ProviderConfig 数据流方向:用户创建 Claim → Composition 实例化 → 生成多个 MR → Provider 调用云 API

2.7 核心概念对比总结

下表从生命周期、作用域和变更频率三个维度对比四个核心概念,帮助你在 IDP 蓝图设计中快速定位每个层的管控重点:

维度 Provider Managed Resource Composition Claim
生命周期 集群级,长期运行 跟随资源创建/删除 平台级,版本迭代 跟随应用需求
作用域 全局 单一资源实例 跨命名空间 限定命名空间
变更频率 低(版本升级) 中(配置漂移修复) 低(平台能力更新) 高(开发迭代)
审计粒度 凭据使用记录 资源级 API 调用 模板变更历史 用户操作日志
IDP 蓝图设计启示:权限边界应重点锁定 ProviderConfig 的凭据作用域和 Composition 的 patch 规则;审计链路则需覆盖 Claim → MR → Provider 的全路径,确保任何资源变更都能追溯到具体的 Claim 和用户身份。