Kubernetes ger dig kraft, men också massor av sätt att skjuta dig själv i foten. Här är vad jag oftast hittar vid granskningar.

1. Containers körs som root

Det här är det vanligaste problemet:

# Dåligt — standard, kör som root
containers:
  - name: app
    image: myapp:latest

# Bra — kör som icke-root
containers:
  - name: app
    image: myapp:latest
    securityContext:
      runAsNonRoot: true
      runAsUser: 1000
      readOnlyRootFilesystem: true
      allowPrivilegeEscalation: false

2. Inga nätverkspolicyer

Utan NetworkPolicies kan alla pods prata med alla andra pods:

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: default-deny-all
spec:
  podSelector: {}
  policyTypes:
    - Ingress
    - Egress

Börja med att neka allt, sedan öppna det som behövs:

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: allow-frontend-to-backend
spec:
  podSelector:
    matchLabels:
      app: backend
  ingress:
    - from:
        - podSelector:
            matchLabels:
              app: frontend
      ports:
        - port: 8080

3. Hemligheter i klartext

Kubernetes Secrets är base64-kodade, inte krypterade:

# Vem som helst med access kan läsa
kubectl get secret db-credentials -o jsonpath='{.data.password}' | base64 -d

Använd istället:

  • SOPS + age för krypterade secrets i git
  • HashiCorp Vault för centraliserad hantering
  • Sealed Secrets som Kubernetes-native lösning

4. Inga resursbegränsningar

Utan limits kan en enda pod äta allt minne:

resources:
  requests:
    memory: "128Mi"
    cpu: "100m"
  limits:
    memory: "256Mi"
    cpu: "500m"

5. Skanna container images

Lägg till Trivy i er CI-pipeline:

trivy image --exit-code 1 --severity HIGH,CRITICAL myapp:latest

Dessa fem steg löser 80% av säkerhetsproblemen jag ser i Kubernetes-miljöer.