<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Crossplane on Backend Engineering Strategy Tools</title><link>https://backend-engineering-strategy-tools.github.io/site/tags/crossplane/</link><description>Recent content in Crossplane on Backend Engineering Strategy Tools</description><generator>Hugo -- gohugo.io</generator><language>en-us</language><lastBuildDate>Wed, 03 Jun 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://backend-engineering-strategy-tools.github.io/site/tags/crossplane/index.xml" rel="self" type="application/rss+xml"/><item><title>Crossplane</title><link>https://backend-engineering-strategy-tools.github.io/site/public-notes/infra-as-code/crossplane/</link><pubDate>Wed, 03 Jun 2026 00:00:00 +0000</pubDate><guid>https://backend-engineering-strategy-tools.github.io/site/public-notes/infra-as-code/crossplane/</guid><description>&lt;p&gt;Crossplane is Kubernetes-native infrastructure management. Where Terraform runs as a CLI tool that applies changes and exits, Crossplane runs as a controller inside a Kubernetes cluster and continuously reconciles infrastructure — the same control loop model as Kubernetes itself.&lt;/p&gt;
&lt;p&gt;Cloud resources become Kubernetes objects. You &lt;code&gt;kubectl apply&lt;/code&gt; an RDS instance the same way you apply a Deployment. Crossplane&amp;rsquo;s controllers watch those objects and make the API calls to converge actual infrastructure to the desired state.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="core-concepts"&gt;Core concepts
&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;Providers&lt;/strong&gt; extend Crossplane with CRDs for a specific cloud. &lt;code&gt;provider-aws&lt;/code&gt; adds Kubernetes resources for every AWS service — S3 buckets, RDS instances, VPCs. Apply a provider, get hundreds of new resource types.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Managed Resources (MRs)&lt;/strong&gt; are the individual cloud resources:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;apiVersion&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;s3.aws.upbound.io/v1beta1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;kind&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;Bucket&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;metadata&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;name&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;my-assets&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;spec&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;forProvider&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;region&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;eu-central-1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;tags&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;Environment&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;prod&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Crossplane creates this bucket and keeps it in sync. If someone deletes it outside of Crossplane, the controller recreates it.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Composite Resources (XRs)&lt;/strong&gt; are the powerful part. You define your own CRDs — a &lt;code&gt;Platform&lt;/code&gt; or &lt;code&gt;DatabaseCluster&lt;/code&gt; — that compose multiple managed resources. A developer applies a &lt;code&gt;DatabaseCluster&lt;/code&gt; and gets an RDS instance, a subnet group, a parameter group, and security groups, all wired together, without needing to know any of the details.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;XRDs (Composite Resource Definitions)&lt;/strong&gt; define the schema for composite resources — what fields the developer sees, what defaults apply.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Compositions&lt;/strong&gt; define how a composite resource maps to managed resources — the implementation behind the abstraction.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="the-platform-engineering-model"&gt;The platform engineering model
&lt;/h2&gt;&lt;p&gt;Crossplane&amp;rsquo;s real value is as a platform layer. A platform team owns the Compositions — they define what a &amp;ldquo;compliant database&amp;rdquo; or &amp;ldquo;standard app environment&amp;rdquo; looks like. Dev teams consume the simplified abstractions without touching the underlying cloud resources.&lt;/p&gt;
&lt;p&gt;Self-service infrastructure with guardrails baked in.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="vs-terraform"&gt;vs Terraform
&lt;/h2&gt;&lt;p&gt;Crossplane and Terraform are not direct alternatives — they solve the problem differently.&lt;/p&gt;
&lt;p&gt;Terraform is a CLI tool: run plan, review, apply, exit. State is a file. Good for human-in-the-loop workflows and one-off provisioning.&lt;/p&gt;
&lt;p&gt;Crossplane is a control plane: always running, always reconciling. Better for continuous enforcement and self-service platforms. More complex to set up and operate.&lt;/p&gt;
&lt;p&gt;In practice: Terraform for provisioning foundational infrastructure (clusters, networks, accounts). Crossplane for what runs on top of the cluster — letting application teams provision their own databases, queues, and object storage through Kubernetes-native APIs.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="upbound"&gt;Upbound
&lt;/h2&gt;&lt;p&gt;The commercial platform behind Crossplane. Managed control plane hosting, a marketplace of providers and compositions, and tooling for building and publishing your own platform APIs. Worth evaluating if you are building a serious internal platform.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="learning-curve"&gt;Learning curve
&lt;/h2&gt;&lt;p&gt;Steep. You need to understand Kubernetes controllers, CRDs, and the Crossplane composition model before you can be productive. The payoff is a genuinely powerful platform abstraction — but it is not a beginner tool.&lt;/p&gt;
&lt;p&gt;A good framing: Crossplane is a &lt;strong&gt;digital twin of your infrastructure&lt;/strong&gt;. The cluster holds the desired state of everything — cloud resources, application configuration, other tools — and continuously reconciles reality to match it.&lt;/p&gt;
&lt;p&gt;Genuinely cool and worth learning if you have a cluster. The provider model has expanded well beyond cloud infrastructure — from v2 onwards Crossplane can manage applications, not just infra. There are also providers for Ansible and Terraform/OpenTofu, which means Crossplane can be the orchestration layer that drives other IaC tools. One control plane to rule them all.&lt;/p&gt;
&lt;p&gt;The prerequisite is the cluster itself. If you already run Kubernetes, Crossplane is a natural extension of the same model you already operate. If you do not, it is not the tool to start with.&lt;/p&gt;</description></item></channel></rss>