Ответ
Network Policies в Kubernetes — это ресурсы, которые определяют правила входящего (ingress) и исходящего (egress) сетевого трафика для групп подов. Их основная цель — реализация микросервисной сетевой безопасности по принципу "запрещено всё, что не разрешено явно" (zero-trust network model) внутри кластера.
Ключевые моменты:
- Не являются сетевым плагином. Это декларативная спецификация правил. Для их реализации требуется CNI-плагин, поддерживающий Network Policies (например, Calico, Cilium, Weave Net). Без такого плагина политики создаются, но не применяются.
- Работают на уровне L3/L4. Можно задавать правила на основе IP-адресов (CIDR), портов (TCP/UDP/SCTP) и селекторов подов/неймспейсов. Для фильтрации на уровне L7 (HTTP, gRPC) нужны дополнительные инструменты, например, сервисная сеть (Istio, Linkerd) или расширенные политики Cilium.
- Изолируют по умолчанию. Если для пода не задана ни одна Network Policy, он принимает и отправляет любой трафик (поведение по умолчанию зависит от плагина). Как только пода назначается политика, все не разрешенные ею соединения блокируются.
Пример сценария и политики:
Допустим, у нас есть frontend (метка app: frontend) и backend (метка app: backend) с базой данных (метка app: db).
- Политика для backend: Разрешает входящий трафик только от frontend на порт 8080 и исходящий трафик только к db на порт 5432.
apiVersion: networking.k8s.io/v1 kind: NetworkPolicy metadata: name: backend-allow-frontend spec: podSelector: matchLabels: app: backend policyTypes: - Ingress - Egress ingress: - from: - podSelector: matchLabels: app: frontend ports: - protocol: TCP port: 8080 egress: - to: - podSelector: matchLabels: app: db ports: - protocol: TCP port: 5432 - Политика для db: Разрешает входящий трафик только от backend на порт 5432 и запрещает любой другой входящий/исходящий трафик (явный
deny-allне требуется, так как политика уже ограничивает доступ).
В своей работе я использовал Calico для реализации таких политик. Это критически важно для compliance (например, PCI DSS) и для минимизации ущерба в случае компрометации одного из компонентов приложения.