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.