Kubernetes security

A cluster running on defaults works fine and is wide open. We lock it down without breaking what runs on it.

We address the technical requirements of
NIS2UKSCDORA
Layers we close down
  1. API accessRBAC without spare admins
  2. Namespacesteam and environment isolation
  3. Deploymentspolicies that block unsafe ones
  4. Imagestrusted registry only
  5. Networktraffic only where needed
  6. Runtimedetection of unusual behaviour

We roll changes out in stages so nothing that already runs stops.

How it looks today

This is the starting point in many companies that ship fast and are regulated.

Kubernetes comes up fast and works right away — which is why the day-one configuration often stays for years. Containers run with excessive permissions, traffic between them is unrestricted, and no one controls which image is allowed to run.

  1. Image from the internet
  2. Container with full privileges
  3. Unrestricted traffic
  4. Other services
  5. Whole cluster

What we do

We define the scope after an assessment — starting with the element that lowers your risk fastest.

We lock down the cluster without breaking what runs on it.

We review the cluster configuration — permissions, namespace isolation, access to the management interface — and point out what is open only because it was open on day one. Instead of catching unsafe deployments by hand, we introduce policies that block them automatically. We limit traffic between services to what genuinely needs to communicate, so a compromised container does not open the way to the rest. Finally we turn on runtime detection — a signal when something happens in a container that was never there before.

Four stages

Each stage leaves you with a concrete result, not meeting notes.

  1. 01

    We review the cluster configuration

    Permissions, namespace isolation, access to the management interface.

    ResultA list of what is open only because it was that way on day one

  2. 02

    We introduce policies

    Rules that automatically block unsafe deployments — instead of catching them by hand.

    ResultPolicies that stop unsafe deployments on their own

  3. 03

    We limit internal traffic

    A service talks only to what it genuinely must.

    ResultTraffic rules: each service talks only to what it must

  4. 04

    We turn on runtime detection

    A signal when something happens in a container that was never there before.

    ResultAlerts when a container does something it never did before

What you get in practice

Implementation ends with working configuration and evidence, not a report full of recommendations. Here is an example.

Namespace policynamespace.yaml
# unsafe deployments are rejected
apiVersion: v1
kind: Namespace
metadata:
  name: payments
  labels:
    pod-security.kubernetes.io/enforce: restricted
    pod-security.kubernetes.io/enforce-version: latest

A container running as root will not start — nobody has to catch it by hand.

Traffic rulesexcerpt
FromToPort
frontendapi8443
apidatabase5432
apiqueue5672
all other traffic—blocked

Compromising one service does not open the way to everything else.

Runtime signalevent
Event
shell started in a container
Where
payments / api
Rule
Terminal shell in container (Falco)
Routed to
platform team on call
Status
under review

The signal arrives as it happens, not during a log review after the fact.

Illustration. We choose scope and tools after the assessment.

What stays with you

An unsafe deployment stops automatically

The impact of one compromised container does not spread to the cluster

Configuration stops depending on one person's memory

Frequently asked questions

How long does it take?+

We define the scope after a call and an assessment. Smaller engagements close in a few weeks; larger ones we split into stages, so the result is visible after the first.

Do we have to give you access to the code?+

Usually not to all of it. In most cases access to the build pipeline configuration and organization settings is enough. We define the scope in writing before we start.

Does our team have to get involved?+

Yes, but not full time. We need contact with someone who knows the system, and a review of our changes. The rest is on us.

What if we already have tools?+

We plug into what already works for you. Replacing a tool is the most expensive and least often necessary way to improve security.

Do we become dependent on you?+

No. We work with standards and tools your team knows or will quickly learn — not a proprietary method only we understand. Everything is documented and handed over.

Won't this slow down releases?+

We wire controls so they run in the background. If one starts blocking work, we tune it or move it to a different point in the process.

Let's find where risk
enters your delivery process

We reply within 24h on business days