DevOps
DevOpsIntermediate

Platform Engineering on Kubernetes: What It Actually Is (and How to Build the Platform)

Platform engineering on Kubernetes, explained without the hype: what an Internal Developer Platform actually is, how it differs from DevOps and SRE, the anatomy of an IDP, golden paths, a comparison table, and an honest answer to whether you even need one.

Cover image: Platform Engineering on Kubernetes: What It Actually Is (and How to Build the Platform)
Contents

Platform engineering is the most searched-for and most misunderstood term in infrastructure right now. Vendors sell “an Internal Developer Platform in a box,” conference talks promise it will replace DevOps, and half the industry quietly suspects it’s just Kubernetes with a nicer logo.

It isn’t. Strip away the marketing and platform engineering is a genuinely useful, specific idea — and on Kubernetes it has a concrete shape. Here’s what it actually is, what it’s made of, and the honest answer to whether you should build one.

What Platform Engineering Actually Is

Platform engineering is the discipline of building an Internal Developer Platform (IDP) as a product — with your own developers as the customers.

That framing is the whole thing. You’re not assembling infrastructure for its own sake; you’re building a product that other engineers choose to use because it makes shipping software faster and safer than doing it by hand. The platform team runs it like any product: with users, feedback, a roadmap, and a definition of success that is developer adoption, not lines of Terraform.

The mechanism is the golden path (or “paved road”): an opinionated, end-to-end route for a common task — spin up a new service, add a database, ship to production — that does the right thing by default. The easy way becomes the secure, compliant, observable way.

The Problem It Solves: Cognitive Load

Here’s why this exists. To ship one service on modern cloud-native infrastructure, a developer is implicitly asked to understand Kubernetes, Helm or Kustomize, an ingress and networking model, Terraform or another IaC tool, a CI/CD system, secrets management, and a pile of security controls. That’s before writing a line of business logic.

That’s cognitive load, and it doesn’t scale. Every new team either re-learns all of it or copies a half-understood setup from the last team. A platform absorbs that load: the developer works against a clean, self-service interface, and the platform handles the twelve tools underneath.

A diagram contrasting two developers. On the left, “without a platform”, one developer is surrounded by many tools — Kubernetes, Helm, Terraform, CI/CD, networking, secrets, security — labelled high cognitive load. On the right, “with a platform”, the developer interacts with a single self-service interface labelled golden path, while the platform absorbs all the underlying tools.

It’s Not DevOps 2.0 or SRE Rebranded

The most common confusion is that platform engineering replaces DevOps or renames SRE. It does neither — the three are complementary layers.

It’s Not DevOps 2.0 or SRE Rebranded
DevOps SRE Platform Engineering
What it is A culture and set of practices A reliability engineering discipline Building an IDP as a product
Core idea Break the dev/ops wall — “you build it, you run it” Reliability via SLOs and error budgets Golden paths and self-service at scale
Owns How teams collaborate Uptime, toil, incident response The developer platform and its UX
Fails when Every team must master all of ops Treated as a rename for ops Built as tech for its own sake, not adopted
The one-liner The goal Keeps it reliable The product that makes both scale

DevOps is the goal — teams owning their software end to end. SRE keeps it reliable with real engineering rigor. Platform engineering is the product that lets a large organization achieve both without every team reinventing the same infrastructure. You need all three.

The Anatomy of an IDP on Kubernetes

On Kubernetes, an Internal Developer Platform has a recognizable stack. From the infrastructure at the bottom to the developer at the top:

A layered stack diagram of an Internal Developer Platform on Kubernetes. From the bottom: cloud infrastructure (GKE, compute, network, storage); infrastructure automation (Terraform or OpenTofu, Ansible, an IaC orchestration layer with policy and drift detection); orchestration and configuration (Kubernetes, Crossplane, Helm, Kustomize); continuous delivery (Argo CD, GitOps); and the self-service interface at the top (developer portal like Backstage, templates, platform CLI and API). Two vertical bars span all layers on the right: guardrails (policy-as-code, RBAC) and observability (metrics, logs, traces).
  • Cloud infrastructure — the compute, network, and storage foundation. On Google Cloud that’s GKE plus the surrounding primitives.
  • Infrastructure automation — Terraform or OpenTofu provisions that foundation (including the cluster itself), Ansible configures what lives outside pods, and an IaC orchestration layer runs both under policy. It gets its own section below, because it’s where most platforms quietly leak toil.
  • Orchestration & configuration — Kubernetes as the control plane, with Crossplane to expose infrastructure as APIs, and Helm or Kustomize to template workloads.
  • Continuous delivery — GitOps with Argo CD: Git is the source of truth and the cluster continuously reconciles to it.
  • Self-service interface — the part developers actually touch: a portal like Backstage, service templates (the golden paths), and a platform CLI or API.

Two things cut across every layer and are not optional:

  • Guardrails — policy-as-code with Kyverno or OPA Gatekeeper, RBAC, and security controls that make the paved path compliant automatically.
  • Observability — metrics, logs, and traces wired in by default, so every service is observable the moment it’s born.

The layers matter less than the principle: the developer sees only the top, and everything below is the platform’s job.

The Infrastructure Automation Layer: Terraform, OpenTofu and Ansible

Most platform diagrams start at Kubernetes. Real platforms don’t. Before Argo CD can deploy anything, someone has to create the VPC, the IAM bindings, the managed databases — and the GKE cluster itself. And around the cluster there is usually a fleet of things that never run in a pod: bastion and build VMs, legacy services, appliances, OS hardening, monitoring agents.

That’s the infrastructure automation layer, and in 2026 it is almost always two tools.

Provisioning vs configuration

  • Terraform or OpenTofu provisions. Declarative, stateful, plan-then-apply: you describe the resources, the tool computes the diff and creates, changes or destroys them. OpenTofu is the open-source fork under the Linux Foundation, created after HashiCorp moved Terraform to the Business Source License in 2023. It is largely drop-in compatible — the same HCL, the same providers — and has added features of its own, such as client-side state encryption. For most teams the choice comes down to licensing and governance, not syntax.
  • Ansible configures. Procedural, agentless, over SSH or an API: it installs packages, hardens the OS, rolls out agents and certificates, and talks to network devices. It’s the right tool for everything that exists after a VM boots and outside Kubernetes.
  • Where Crossplane fits. Crossplane is great for app-level resources requested from inside a running cluster — “give my service a bucket and a database” as a Kubernetes claim. But it can’t create the cluster it runs on. The usual split: Terraform/OpenTofu owns the foundation, Crossplane serves the developer-facing resources on top.

Where it breaks: two tools, two silos

The tools are fine. The way they’re wired together usually isn’t. A typical setup runs Terraform in one CI pipeline and Ansible from a different job, an AWX server or someone’s laptop, with the inventory handed over by a script — or a copied list of IPs. The symptoms are predictable:

  • No end-to-end view. One logical change (“add a node pool and configure its agents”) lives in two systems, and nobody can see whether it fully succeeded.
  • Two review and audit trails. Security reviews Terraform plans in one place and Ansible runs in another. Auditors get two stories for one change.
  • Ordering by convention. Ansible runs before provisioning finished, or against yesterday’s inventory.
  • Silent drift. A console hotfix diverges from state, and nobody notices until the next unrelated apply tries to revert it.
  • Self-service turns back into tickets. Nobody trusts the chain to run unattended, so every “new environment” request goes through the platform team by hand.

That last one is the platform-engineering failure in miniature: a golden path on top, toil underneath.

What an IaC orchestration layer adds

The fix is not replacing Terraform or Ansible. It’s putting one orchestration layer between Git and both tools, so they run as a single governed workflow:

A workflow diagram titled “Terraform + Ansible in one governed workflow”. A pull request containing IaC and playbooks goes into an IaC orchestration layer that runs plan on PR, policy check, approval and apply, with one run history, one audit trail and RBAC. It triggers stack 1, Provision with Terraform or OpenTofu (VPC, GKE, VMs, IAM), whose outputs such as IPs and endpoints become the inventory for stack 2, Configure with Ansible (packages, hardening, agents), which only runs after stack 1. Both act on the cloud. A dashed arrow from the cloud back to the orchestration layer shows drift detection via scheduled plans. A note says Backstage stays the portal and Argo CD still deploys workloads in the cluster.
  • Governed runs — plan on every pull request, apply only from the main branch, approvals for risky changes, locks so two applies never race.
  • Policy-as-code on the plan — the same idea as Kyverno in the cluster, applied one layer down: reject a public bucket, require labels, demand a second approver when a plan destroys a database.
  • Dependencies and hand-off — the provisioning stack’s outputs (IPs, endpoints, cluster names) feed the configuration stack automatically, in the right order.
  • Drift detection — scheduled plans compare reality with the declared state and alert, or reconcile.
  • Self-service with RBAC — the portal triggers a templated stack; the platform team owns the guardrails, not every individual run.
  • One audit trail — who changed what, which policy approved it, what it applied.

A plan policy is small. Here is a generic OPA/Rego rule (Rego v1 syntax) that runs against the JSON output of terraform show -json — with conftest in CI, or in any orchestrator that evaluates OPA:

package main
deny contains msg if {
rc := input.resource_changes[_]
rc.type == "google_storage_bucket_iam_member"
rc.change.after.member == "allUsers"
msg := sprintf("%s makes a bucket public", [rc.address])
}

Your options

You can build this layer yourself or buy it. The honest comparison:

Your options
Generic CI (GitHub Actions, GitLab CI) Atlantis HCP Terraform / Terraform Enterprise Spacelift
IaC tools Anything you script Terraform, OpenTofu Terraform Terraform, OpenTofu, Terragrunt, Pulumi, CloudFormation, Kubernetes, Ansible
Ansible in the same workflow If you build the hand-off No Not as a native workspace type Native Ansible stacks, linked by stack dependencies
Policy-as-code DIY (conftest in the pipeline) Conftest policy checks Sentinel and OPA OPA/Rego (plan, approval, trigger policies)
Drift detection DIY (scheduled plan job) Not built in Health assessments (paid tiers) Scheduled detection, optional reconciliation (private workers)
Where it runs Your runners Self-hosted SaaS or self-hosted SaaS or self-hosted, private workers
Best fit Small estate, strong CI skills PR-driven teams that self-host Terraform-only, HashiCorp-aligned shops Mixed Terraform/OpenTofu + Ansible estates

Scalr and env0 are also in this space. If your estate is small and Terraform-only, a well-built CI pipeline with conftest is a perfectly good answer; the case for a dedicated orchestrator grows with the number of stacks, teams and tools.

Sponsored · Spacelift

If you’d rather not maintain that orchestration layer yourself, Spacelift can serve as the Terraform/OpenTofu orchestration backend of the platform: governed runs, policy and drift handling in one place. Its distinctive piece is that Terraform/OpenTofu and Ansible stacks run in the same workflow. Stack dependencies form a graph, and outputs of the provisioning stack are passed to the Ansible stack, so configuration runs only after the infrastructure it targets exists — one run history and one audit trail instead of two. Plan, approval and trigger policies are written in OPA/Rego; drift detection runs on a schedule and can reconcile automatically. For self-service, a Backstage integration lets developers trigger stacks from the portal they already use.

How it fits the rest of the platform

The orchestration layer doesn’t take over anyone else’s job:

  • Backstage stays the portal. A template either opens a pull request against an IaC repo or triggers a stack through the orchestrator’s API.
  • Argo CD stays continuous delivery for workloads inside the cluster.
  • Kubernetes and Crossplane keep handling in-cluster and app-level resources.

The rule of thumb: if it exists before the cluster or outside it, it belongs to the IaC layer; if it runs inside the cluster, it belongs to GitOps.

The Golden Path in Motion

Concretely, here’s what a golden path replaces. Without a platform, launching a service means a developer hand-writes Kubernetes manifests, wires a pipeline, requests secrets, asks networking for an ingress, and books a security review — often across days and several tickets.

With a platform, the developer runs one action — “create service” from a template in the portal — and the platform scaffolds the repo, wires CI (build, test, scan), commits the GitOps config, deploys through Argo CD to GKE, and attaches guardrails and observability automatically. No tickets, no ops bottleneck. That’s the entire value proposition: self-service, with the safe defaults already baked in.

Do You Actually Need a Platform?

This is where honesty matters, because building a platform nobody adopts is one of the most expensive mistakes in infrastructure. More platform is not automatically better.

A decision tree titled “Do you actually need a platform?”. First question: do multiple teams keep re-solving the same infrastructure problems? Second: is developer cognitive load measurably slowing delivery? Third: do you have enough scale to fund a platform team that treats the platform as a product? If the answers are no, the recommendation is good templates plus a README beat a platform you can’t maintain. If yes to all, build an IDP and run it as a product.
  • Small team, a handful of services? You don’t need a platform. Good templates, a solid README, and a clean CI pipeline will beat a bespoke platform you don’t have the people to maintain.
  • Multiple teams re-solving the same infra problems, cognitive load slowing delivery, and enough scale to staff a platform team? Now a platform pays for itself — build the IDP, and run it as a product.

The trigger is proven, recurring pain, not the trend. If you can’t name the specific toil the platform removes and the teams who’ll adopt it on day one, you’re building tech for its own sake — exactly the failure mode in the comparison table.

Tools and the Google Cloud Mapping

The 2026 platform-engineering toolkit on Kubernetes is largely CNCF-native: Backstage for the portal, Crossplane for infrastructure-as-APIs, Argo CD for GitOps delivery, Kyverno or OPA Gatekeeper for policy, and Kubernetes underneath it all. Below the cluster, Terraform or OpenTofu plus Ansible form the infrastructure automation layer, run through an IaC orchestrator.

On Google Cloud the layers map to managed pieces: GKE for the cluster, Config Connector (or Config Controller) to manage GCP resources as Kubernetes objects, Infrastructure Manager for managed Terraform runs, Cloud Deploy for delivery pipelines, and Cloud Build or Artifact Registry for the supply chain — all of which slot cleanly under the same self-service interface.

The Honest Verdict

Platform engineering is not Kubernetes with a nicer logo, and it’s not a replacement for DevOps or SRE. It’s the discipline of building an Internal Developer Platform as a product: golden paths that make the easy way the safe way, a self-service interface over the infrastructure, a governed automation layer underneath it, and guardrails and observability baked into every layer.

Build it to remove real, recurring cognitive load — and measure it the only way that matters: whether your developers actually choose to use it. A platform nobody adopts is just more infrastructure to maintain. A platform they love is the fastest paved road to production you can give them.

Related reading: GitOps with Argo CD is the delivery layer of an IDP, and secure-by-default GKE is the guardrails layer done right.

Frequently asked questions

What is platform engineering in simple terms?

Platform engineering is the practice of building and running an Internal Developer Platform (IDP): a self-service layer on top of your infrastructure that lets developers ship software without having to become experts in Kubernetes, networking, CI/CD, and security. The core idea is to treat the platform as a product and your own developers as its customers — you design 'golden paths' (paved, opinionated routes to production) so that the easy way is also the safe, compliant, observable way. In short, platform engineering turns a pile of infrastructure tools into a product that reduces the cognitive load on every team that ships code.

How is platform engineering different from DevOps and SRE?

They are complementary, not competing. DevOps is a culture and set of practices for breaking down the wall between development and operations — 'you build it, you run it.' SRE (Site Reliability Engineering) is Google's discipline for running reliable systems using SLOs, error budgets, and treating operations as a software problem. Platform engineering is what you do when a growing organization can't expect every team to master all of that: you build an Internal Developer Platform that makes DevOps self-service at scale and encodes SRE and security best practices into paved paths. DevOps is the goal, SRE keeps it reliable, and platform engineering is the product that makes both achievable without every team reinventing the wheel.

What is an Internal Developer Platform (IDP)?

An Internal Developer Platform is the self-service product a platform team builds for its developers. On Kubernetes it typically layers cloud infrastructure (like GKE), an orchestration and configuration layer (Kubernetes plus tools like Crossplane, Helm, or Kustomize), a GitOps delivery layer (like Argo CD), and a self-service interface (a developer portal such as Backstage, plus templates and a platform CLI or API) — all with guardrails (policy-as-code, RBAC) and observability built in. A developer uses the IDP to create a new service, deploy it, and get logs and metrics without filing tickets or hand-writing infrastructure.

Where do Terraform, OpenTofu and Ansible fit in a Kubernetes platform?

They form the infrastructure automation layer underneath the cluster. Terraform or OpenTofu provisions the foundation — networks, IAM, managed databases and the Kubernetes clusters themselves — while Ansible configures what lives outside pods, such as VMs, operating systems, agents and network devices. Crossplane complements rather than replaces them: it suits app-level resources requested from inside a running cluster, but it cannot create the cluster it runs on. The common failure is running Terraform and Ansible as two disconnected pipelines with separate reviews, audit trails and hand-copied inventories. A single orchestration layer — your own CI, Atlantis, HCP Terraform, Spacelift or similar — runs both under one workflow with plan-on-PR, policy-as-code, approvals and drift detection. Backstage stays the portal and Argo CD keeps deploying workloads inside the cluster.

What are golden paths in platform engineering?

A golden path (also called a paved road) is an opinionated, well-supported, end-to-end route for doing a common task — like creating a new microservice, adding a database, or shipping to production. Instead of leaving each developer to assemble Kubernetes manifests, pipelines, secrets, and security controls from scratch, the platform offers a template that does it correctly by default. Golden paths are the heart of platform engineering: they make the easy path also the secure, compliant, and observable one, which is how a platform reduces cognitive load without taking away a team's ability to go off-road when they genuinely need to.

Do I actually need a platform, or is that over-engineering?

Often it's over-engineering. If you're a small team with a handful of services, a good set of templates, a solid README, and a CI pipeline will beat a custom platform you don't have the people to maintain. Platform engineering pays off when you have multiple teams repeatedly solving the same infrastructure problems, when cognitive load is measurably slowing delivery, and when you have enough scale to fund a platform team that treats the platform as a real product with users and a roadmap. Build a platform to remove proven, recurring pain — not because it's the trend.

From the community

Discussion on Mastodon & Bluesky

Replies to this article from the open web, pulled in live. No ads, no tracking scripts.

Loading replies …
Reply on MastodonReply on Bluesky

Reply there — it shows up here automatically.

ENDE