Kubernetes & Amazon EKS consultant — clusters built to survive production and audit.
Private-subnet EKS with IRSA, Helm, autoscaling and GitOps — hardened, observable, and cost-aware. From first cluster to multi-account platform, built by a CISA + AWS Solutions Architect Professional with 16+ years on AWS.
Book a free 30-min callEmail meWhat you get
Secure EKS foundation
- Private-subnet clusters, VPC endpoints, no public API where avoidable
- IRSA for workload identity — no long-lived keys
- East-west controls via security groups + network policy
Workloads & scaling
- Helm charts, HPA / Cluster Autoscaler / Karpenter, distroless images
- Blue/green & canary rollouts with automated rollback
- Resource requests/limits tuned for cost and stability
GitOps delivery
- ArgoCD (or Flux) — declarative, drift-detecting deploys
- Reconciliation every few minutes; git is the source of truth
- Progressive delivery + secret rotation
Reliability & security
- Prometheus/Grafana SLOs, alerting, error budgets
- Trivy image scanning, admission policies, pod security
- Backup/DR and upgrade strategy for EKS versions
Proof
How an EKS engagement runs
Most teams call me at one of two moments: the first production cluster is due and nobody wants to guess at the network model, or an existing cluster has grown organically and now blocks an audit, a cost target, or a release cadence. Both start the same way — I map what you actually run before touching Terraform.
1. Discovery (week 1)
- Workload inventory: stateful vs stateless, traffic shape, data residency
- Current AWS account layout, VPC design and existing IAM boundaries
- Compliance obligations — SOC 2, ISO 27001, HIPAA, PCI DSS — captured up front, not retrofitted
- Team skills audit: who will run this cluster on a Tuesday afternoon six months from now
2. Foundation (weeks 2-3)
- Terraform-provisioned EKS in private subnets, API endpoint private or CIDR-restricted
- IRSA wired before the first workload lands, so no pod ever gets a node role by default
- VPC endpoints for ECR, S3, CloudWatch, STS and Secrets Manager
- Managed node groups or Karpenter, sized against the real workload profile
3. Delivery (weeks 3-5)
- Helm charts with pinned versions and resource requests that reflect measured usage
- ArgoCD reconciling from git, drift surfaced rather than silently corrected
- Progressive delivery — canary or blue/green with automated rollback on SLO breach
- Prometheus, Grafana and alert routing that pages a human only when a human is needed
4. Hardening & handover
- Network policy, Pod Security Standards, admission control and image scanning in the pipeline
- Backup/DR tested, not just configured — a restore you have never run is a hope, not a plan
- Evidence exported and mapped to the controls your auditor will ask about
- Runbooks and a working session with your team, because a cluster nobody understands is a liability
What a hardened EKS baseline actually includes
"Hardened" gets used loosely. Here is what it means concretely on the clusters I build, and why each piece is there.
Private networking by default
Worker nodes sit in private subnets with no public IPs. The Kubernetes API endpoint is private, or public with a CIDR allowlist when a managed CI runner genuinely needs it. This single decision removes an entire category of finding from every audit I have taken a client through, and it costs nothing at build time — retrofitting it later means rebuilding the cluster.
IRSA instead of node roles
IAM Roles for Service Accounts binds a role to a specific service account rather than to the node. Without it, every pod on a node inherits that node's permissions, which means your logging sidecar can read the same S3 buckets as your payments service. IRSA is the difference between least privilege as a diagram and least privilege as a fact.
VPC endpoints, which pay for themselves
Routing ECR pulls, S3 access, CloudWatch logs and STS calls through VPC endpoints keeps that traffic off the NAT gateway. On one AI lending platform this removed roughly $1,800 a month in NAT data processing charges while also shrinking the egress surface. Security and cost usually pull against each other; this is one of the rare places they agree.
Admission control and image provenance
Pod Security Standards enforced at the namespace level, network policy for east-west traffic, and Trivy scanning in the pipeline so a critical CVE fails the build rather than surfacing in a quarterly report. Admission policy is where you encode the rules you would otherwise write in a wiki nobody reads.
EKS or ECS — a straight answer
I get asked this in almost every discovery call, and the honest answer is that most teams running a handful of stateless services on AWS do not need Kubernetes. ECS with Fargate has a fraction of the operational surface: no control plane version to chase, no addon compatibility matrix, no node lifecycle to manage.
EKS earns its overhead when you need the ecosystem — operators, CRDs, service mesh, GitOps tooling that assumes Kubernetes primitives — or when portability across clouds is a real constraint rather than a hypothetical one. It also earns it when you already have Kubernetes expertise in the building, because the operational cost drops sharply when the team has seen these failure modes before.
I have written this comparison out properly, with the cost and operational-overhead numbers, in EKS vs ECS: which AWS container platform fits your team. If you are still deciding, start there — and if the answer turns out to be ECS, I will tell you that on the call rather than sell you a cluster.
Keeping EKS costs honest
Kubernetes makes it easy to spend money quietly. Requests get copied from a tutorial, nodes get provisioned for a peak that happens twice a year, and nobody notices until finance does. The levers that actually move the bill, roughly in order of impact:
Right-size against measured usage
Most clusters I inspect have resource requests set two to four times above observed p95 usage. The scheduler honours requests, not actual consumption, so over-requesting means paying for nodes to sit half empty. Fixing requests is usually the single largest saving available and carries no architectural risk.
Karpenter over static node groups
Karpenter provisions nodes that fit the pending pods rather than filling a fixed instance type, consolidates workloads as demand falls, and handles Spot interruption gracefully. For bursty workloads the difference against a static Cluster Autoscaler group is substantial.
Spot for the workloads that tolerate it
Stateless services with more than one replica, batch jobs and CI runners belong on Spot. Databases and singleton controllers do not. The discipline is knowing which is which and encoding it in node affinity rather than deciding case by case.
Graviton where the image supports it
ARM64 nodes deliver meaningfully better price-performance, and most modern base images publish multi-arch variants. The migration cost is usually a multi-arch build in CI rather than a code change.
If cost is the primary driver rather than a secondary one, my AWS cost optimization work goes wider than the cluster — reserved capacity, storage lifecycle, data transfer and the account-level waste that Kubernetes tuning cannot reach.
Upgrades: the part teams postpone
Amazon supports each EKS minor version for a limited window, after which you are moved to extended support and billed for the privilege. Clusters that skip upgrades do not stay still; they accumulate addon drift, deprecated APIs and a growing gap that makes each subsequent jump harder.
The approach that works is boring and repeatable: read the deprecated-API report before touching anything, upgrade the control plane first, then roll node groups with surge capacity so workloads drain rather than restart in place. Addons — VPC CNI, CoreDNS, kube-proxy, EBS CSI driver — get version-pinned and upgraded deliberately, because a compatible-in-theory addon is how a routine upgrade turns into an incident. On clusters I run, upgrades are scheduled quarterly and rehearsed in a non-production account first.
Turning a cluster into audit evidence
If you are heading for SOC 2 or ISO 27001, your cluster is not just infrastructure — it is a source of evidence, and auditors ask for it in a predictable shape. Access control maps to IRSA bindings and RBAC role definitions. Change management maps to git history plus ArgoCD's reconciliation record, which is stronger evidence than a ticketing system because it cannot be edited after the fact. Vulnerability management maps to scan results in the pipeline with a demonstrable remediation SLA. Logging and monitoring map to retention configuration and alert routing.
Building those exports while the cluster is being built costs very little. Reconstructing them the month before an audit costs a great deal, and usually surfaces gaps that need engineering work at exactly the wrong moment. This is the overlap between my DevOps and compliance work and the ISO 27001 and PCI DSS engagements — the platform and the evidence are the same project, run once.
FAQ
Can you set up EKS from scratch?
Yes — Terraform-provisioned, private-subnet EKS with IRSA, autoscaling, GitOps and observability, production-ready in weeks.
Do you fix existing clusters?
Yes — hardening, cost tuning, upgrade strategy, autoscaling and reliability reviews on running EKS.
ECS or EKS — which should we use?
Depends on your team and workloads. I'll give a straight recommendation; EKS for Kubernetes-native needs, ECS/Fargate for simpler operational overhead.
How do you secure the cluster?
Private networking, IRSA, network policy, image scanning, admission control and evidence mapped to SOC 2/ISO 27001.
How long until we are running production workloads?
For a greenfield cluster, four to six weeks from discovery to production traffic is realistic — foundation in weeks two to three, delivery pipeline and observability in weeks three to five, hardening and handover after. Existing clusters vary; a hardening and cost pass is usually two to three weeks.
Do you work with our existing Terraform, or replace it?
I work with what you have wherever it is sound. Rewrites are expensive and rarely necessary — most of the time the modules are fine and the gaps are in networking, IAM boundaries and state management. I will tell you plainly if something genuinely needs replacing rather than quietly rebuilding it.
What does this cost to run on AWS?
The EKS control plane is a fixed monthly charge per cluster; everything else is the nodes, data transfer and storage you would pay for anyway. The variable that matters is how well the cluster is sized — an untuned cluster commonly runs two to three times its necessary node cost, which dwarfs the control plane fee.
Can you hand this over to our team afterwards?
That is the intended end state. Handover includes runbooks, a working session on the failure modes specific to your setup, and an upgrade calendar. A cluster that only one consultant understands is a risk I am not interested in leaving behind.
Do you support multi-account or multi-region setups?
Yes. Multi-account is usually the right call once you have more than one environment with different blast radii — separate AWS accounts give you a boundary that IAM policy alone cannot. Multi-region is a heavier commitment and I will push back unless you have a stated RTO that genuinely requires it.
Ship on Kubernetes without the 3AM surprises.
Free 30-minute call — tell me your workloads and I'll map a hardened EKS path.
Book a callAll AWS DevOps services →