Skip to main content
πŸ“¬ Get weekly Production AI insights Practical notes on Kubernetes, AI infrastructure and platform engineering. No spam. Subscribe free
Platform Engineering

Crossplane: Manage Cloud Infrastructure from Kubernetes

Use Crossplane to provision AWS, Azure, and GCP resources with Kubernetes manifests. The universal cloud control plane for platform engineering teams.

Luca Berton

Β· AI Advisor & Architect

Published Β· 1 min read

What Is Crossplane?

Crossplane extends Kubernetes to manage any cloud resource using kubectl. Provision RDS databases, S3 buckets, Azure VNets, and GCP BigQuery β€” all with Kubernetes manifests. CNCF Graduated project.

How It Works

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚         Kubernetes Cluster               β”‚
β”‚                                          β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”   β”‚
β”‚  β”‚      Crossplane Controller        β”‚   β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜   β”‚
β”‚                  β”‚                       β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”‚
β”‚  β”‚               β”‚                   β”‚  β”‚
β”‚  β–Ό               β–Ό                   β–Ό  β”‚
β”‚ AWS Provider  Azure Provider  GCP Provider
β”‚  β”‚               β”‚                   β”‚  β”‚
β””β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”˜
   β”‚               β”‚                   β”‚
   β–Ό               β–Ό                   β–Ό
β”Œβ”€β”€β”€β”€β”€β”€β”    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ AWS  β”‚    β”‚   Azure   β”‚    β”‚   GCP    β”‚
β”‚ RDS  β”‚    β”‚ CosmosDB  β”‚    β”‚ BigQuery β”‚
β”‚ S3   β”‚    β”‚ AKS       β”‚    β”‚ GKE     β”‚
β””β”€β”€β”€β”€β”€β”€β”˜    β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜    β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Provision Cloud Resources

RDS Database

apiVersion: rds.aws.upbound.io/v1beta2
kind: Instance
metadata:
  name: production-db
spec:
  forProvider:
    region: eu-west-1
    instanceClass: db.r6g.xlarge
    engine: postgres
    engineVersion: "16"
    allocatedStorage: 100
    storageType: gp3
    masterUsername: admin
    masterPasswordSecretRef:
      name: db-password
      namespace: crossplane-system
      key: password
    vpcSecurityGroupIds:
      - sg-xxx
    dbSubnetGroupName: production-subnet-group
  providerConfigRef:
    name: aws-production

S3 Bucket

apiVersion: s3.aws.upbound.io/v1beta2
kind: Bucket
metadata:
  name: ml-artifacts
spec:
  forProvider:
    region: eu-west-1
    tags:
      Environment: production
      Team: ml-platform

Compositions (Platform Abstractions)

Create high-level APIs that hide cloud complexity:

# Define what a "Database" means for your org
apiVersion: apiextensions.crossplane.io/v1
kind: CompositeResourceDefinition
metadata:
  name: databases.platform.company.com
spec:
  group: platform.company.com
  names:
    kind: Database
    plural: databases
  versions:
    - name: v1
      schema:
        openAPIV3Schema:
          properties:
            spec:
              properties:
                size:
                  type: string
                  enum: [small, medium, large]
                engine:
                  type: string
                  enum: [postgres, mysql]
---
# Teams request a database simply:
apiVersion: platform.company.com/v1
kind: Database
metadata:
  name: orders-db
spec:
  size: medium
  engine: postgres

The Composition translates this into RDS + security groups + subnet groups + parameter groups automatically.

Crossplane vs Terraform

FeatureCrossplaneTerraform
Reconciliationβœ… Continuous (K8s controller)❌ Run-once
Drift detectionβœ… Automatic (every 60s)❌ Manual terraform plan
StateKubernetes etcdSeparate state file
LanguageYAML (K8s manifests)HCL
Self-serviceβœ… Teams use kubectl❌ Requires Terraform access
GitOpsβœ… Native (Argo CD/Flux)⚠️ Requires wrapper
Multi-tenancyβœ… Namespaces + RBAC⚠️ Workspaces

Key insight: Crossplane continuously reconciles β€” if someone manually changes a resource in the AWS console, Crossplane fixes it automatically. Terraform only detects drift on the next plan.

When to Use Crossplane

  • βœ… Platform team providing self-service infrastructure
  • βœ… GitOps workflow (Argo CD manages everything)
  • βœ… Multi-cloud or hybrid cloud
  • βœ… Want continuous drift detection
  • βœ… Kubernetes-native teams

When to Use Terraform Instead

  • βœ… Small team, simple infrastructure
  • βœ… Team already proficient in HCL
  • βœ… No Kubernetes cluster to run Crossplane
  • βœ… One-time provisioning (not continuous)

Free 30-min Production AI consultation

Book Now