Why is EKS cost so hard to attribute?

The AWS Cost and Usage Report is the source of truth for AWS spend, but it bills the EC2 nodes that back your EKS cluster, not the pods scheduled onto them. When ten teams share a node pool, the report shows a single compute number with no idea which workload caused it. The result is a large line item nobody owns, which is exactly the condition under which cost drifts upward unchallenged.

Kubernetes makes this worse in two ways. Pods request CPU and memory defensively, so nodes carry idle headroom, and that headroom is shared cost with no natural owner. Allocation is the precondition for fixing either problem.

What is split cost allocation data?

AWS split cost allocation data for EKS breaks shared node cost down to the pod level inside the Cost and Usage Report. It uses each pod requested and used CPU and memory to apportion the node cost, so a node shared by several namespaces is divided among them by actual consumption rather than guesswork. Once enabled, the report carries the columns you need to roll cost up by namespace, by label, and by team.

How do you set it up?

The sequence we use on engagements:

  • Turn on the data. Enable split cost allocation data so the Cost and Usage Report includes pod level cost for EKS.
  • Label consistently. Apply Kubernetes labels for team, environment, and product to every workload, and enforce them so new workloads cannot launch unlabelled.
  • Activate cost allocation tags. Activate the matching AWS cost allocation tags so the labels flow into the billing data and Cost Explorer.
  • Reconcile and report. Roll pod cost up to namespace and team, reconcile to the invoice, and publish a showback each team can read without a translator.

A worked example

Indicative numbers for a single shared EKS node pool before and after allocation. Figures are illustrative; real engagements are scoped against your Cost and Usage Report.

Indicative allocation of a shared EKS node pool
NamespaceShare of used capacityAllocated monthly cost
checkout42 percent$21,000
search26 percent$13,000
data pipelines18 percent$9,000
idle headroom14 percent$7,000

The idle headroom line is the point. Before allocation it was invisible, spread across a $50,000 node bill. After allocation it is a named $7,000 a month target that request rightsizing and consolidation can recover.

From allocation to savings

Allocation is the start, not the finish. Once each team owns its number, the moves are familiar: right the CPU and memory requests, consolidate nodes through better bin packing, scale to demand, and cover the steady base with Savings Plans or Reserved Instances sized to a defensible forecast. Watch the quiet eaters too, since cross zone data transfer and NAT gateway charges often hide inside a busy cluster.

For the full provider context, read the AWS cost optimization guide. To go deeper on shared cost and the billing source, see untangling shared costs on AWS and the AWS Cost and Usage Report explained. For the container side across clouds, see Kubernetes and AI cost control.

Frequently asked questions

Independent · buyer-side

Put a defensible number on your cloud spend.

No provider in the room, no published price list. Tell us your footprint and we will scope the savings against your billing data — we reduce your cloud spend or we reimburse our service fee.

Buyer-side intelligence, monthly.

The Cloud Spend Navigator: what changed in cloud pricing, commitments, and FinOps — no vendor spin.