Skip to content

Crossplane — Infrastructure as Kubernetes Resource #265

Description

@khalilbenaz

lede: Crossplane permet de provisionner AWS/GCP/Azure via Kubernetes manifests. Alternative GitOps à Terraform pour équipes K8s-native.
lede_en: Crossplane provisions AWS/GCP/Azure via Kubernetes manifests. GitOps alternative to Terraform for K8s-native teams.
title_en: Crossplane — Infrastructure as Kubernetes Resource

Crossplane — l'IaC via K8s

Crossplane (CNCF) installe des CRDs dans votre cluster K8s qui exposent les ressources cloud (S3 bucket, RDS, etc.) comme des objets Kubernetes.

apiVersion: rds.aws.upbound.io/v1beta1
kind: Instance
metadata:
  name: my-db
spec:
  forProvider:
    region: us-east-1
    engine: postgres
    engineVersion: "16"
    instanceClass: db.t3.medium
    allocatedStorage: 20
  providerConfigRef:
    name: aws-default

kubectl apply → Crossplane provisionne le RDS sur AWS.

Compositions — l'abstraction

Vous packagez plusieurs ressources comme un XR (Composite Resource) :

apiVersion: platform.example.com/v1alpha1
kind: PostgresInstance
metadata:
  name: my-db
spec:
  size: small
  region: eu-west-1

Sous le capot : crée RDS + IAM role + Secrets + Backup policy automatiquement.

Vos devs utilisent un XR simple. Platform team définit la composition.

Vs Terraform

Crossplane Terraform
Source vérité K8s cluster State file (S3)
Reconciliation Continue One-shot apply
GitOps Natif via ArgoCD Nécessite Atlantis
Multi-cloud Oui Oui
Communauté Croissante Énorme
Talent pool Petit Large

Crossplane gagne sur : GitOps natif, reconciliation continue (auto-fix drift), abstraction via compositions.

Terraform gagne sur : maturité, talent disponible, écosystème modules.

Cas d'usage

Platform team : exposer une "internal platform API" aux devs via XRs. Self-service infrastructure.

Multi-cluster : provisionner clusters K8s + leurs ressources cloud depuis un cluster control plane.

GitOps strict : tout dans git, ArgoCD sync infrastructure ET apps.

Setup

helm install crossplane crossplane-stable/crossplane

# Install providers
kubectl apply -f provider-aws.yaml
kubectl apply -f provider-config.yaml

# Now AWS resources as K8s
kubectl apply -f my-bucket.yaml

Effort initial : 1-2 jours pour setup propre.

Verdict

Pour équipes K8s-natives sérieuses : Crossplane mérite évaluation. Self-service infra + GitOps unified.

Pour équipes Terraform productives : pas raison forte de migrer. Coexistence possible (Crossplane pour internal abstractions, Terraform pour cloud raw).

Crossplane — IaC via K8s

Crossplane (CNCF) installs CRDs in your K8s cluster exposing cloud resources (S3 bucket, RDS, etc.) as Kubernetes objects.

apiVersion: rds.aws.upbound.io/v1beta1
kind: Instance
metadata:
  name: my-db
spec:
  forProvider:
    region: us-east-1
    engine: postgres
    engineVersion: "16"
    instanceClass: db.t3.medium
    allocatedStorage: 20
  providerConfigRef:
    name: aws-default

kubectl apply → Crossplane provisions the RDS on AWS.

Compositions — the abstraction

You package multiple resources as a XR (Composite Resource):

apiVersion: platform.example.com/v1alpha1
kind: PostgresInstance
metadata:
  name: my-db
spec:
  size: small
  region: eu-west-1

Underneath: creates RDS + IAM role + Secrets + Backup policy automatically.

Your devs use a simple XR. Platform team defines the composition.

vs Terraform

Crossplane Terraform
Truth source K8s cluster State file (S3)
Reconciliation Continuous One-shot apply
GitOps Native via ArgoCD Needs Atlantis
Multi-cloud Yes Yes
Community Growing Huge
Talent pool Small Large

Crossplane wins on: native GitOps, continuous reconciliation (auto-fix drift), abstraction via compositions.

Terraform wins on: maturity, available talent, module ecosystem.

Use cases

Platform team: expose an "internal platform API" to devs via XRs. Self-service infrastructure.

Multi-cluster: provision K8s clusters + their cloud resources from a control plane cluster.

Strict GitOps: everything in git, ArgoCD syncs infrastructure AND apps.

Setup

helm install crossplane crossplane-stable/crossplane

# Install providers
kubectl apply -f provider-aws.yaml
kubectl apply -f provider-config.yaml

# Now AWS resources as K8s
kubectl apply -f my-bucket.yaml

Initial effort: 1-2 days for clean setup.

Verdict

For serious K8s-native teams: Crossplane deserves evaluation. Self-service infra + unified GitOps.

For productive Terraform teams: no strong reason to migrate. Coexistence possible (Crossplane for internal abstractions, Terraform for raw cloud).

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions