Ответ
Безопасность в Kubernetes — это многоуровневая модель. Я выстраиваю её по принципу Defense in Depth.
1. Безопасность образов:
- Использую минималистичные базовые образы (Alpine, Distroless) для сокращения поверхности атаки.
- Интегрирую сканирование образов на уязвимости (Trivy, Grype) в CI/CD пайплайн. Образы с критическими CVE не попадают в registry.
- Подписываю образы с помощью Cosign и проверяю подписи на этапе деплоя через политики Kyverno или OPA Gatekeeper.
2. Безопасность рантайма (Pod Security):
- Применяю принцип наименьших привилегий через
securityContext. Стандартная практика:apiVersion: v1 kind: Pod metadata: name: secured-app spec: securityContext: runAsNonRoot: true runAsUser: 1000 seccompProfile: type: RuntimeDefault containers: - name: app image: myapp:latest securityContext: allowPrivilegeEscalation: false capabilities: drop: ["ALL"] readOnlyRootFilesystem: true - Включаю Pod Security Admission (PSA) в кластере, применяя стандартные профили (
restricted,baseline).
3. Сетевая безопасность:
- Сегментирую трафик с помощью NetworkPolicies. По умолчанию запрещаю весь входящий и исходящий трафик, а затем разрешаю только необходимые соединения между компонентами (например, от фронтенда к бэкенду).
- Использую service mesh (например, Istio) для mTLS-шифрования трафика "сервис-сервис".
4. Управление секретами:
- Не храню секреты в манифестах или образах. Использую HashiCorp Vault с механизмом инжекции через CSI Driver или сторонние решения типа External Secrets Operator для синхронизации с облачными KMS (AWS Secrets Manager, GCP Secret Manager).
5. Аудит и соответствие:
- Включаю аудит Kubernetes API-сервера и отправляю логи в централизованную систему (Loki, Elasticsearch).
- Использую инструменты для проверки соответствия стандартам CIS Benchmarks (kube-bench, kube-hunter).