[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"question-bezopasnost-konteynerov-chto-takoe-network-policies-v-kubernetes-i-kak-oni-zashchishchayut-prilozhenie":3},{"id":4,"slug":5,"topicId":6,"topicSlug":7,"topicName":8,"topicEmoji":9,"question":10,"answer":11,"codeLang":12,"codeSrc":12,"important":12,"commonMistakes":12,"modernUsage":12,"difficulty":13,"tags":14,"related":21,"progress":22,"seo":23},316,"chto-takoe-network-policies-v-kubernetes-i-kak-oni-zashchishchayut-prilozhenie",9,"bezopasnost-konteynerov","Безопасность контейнеров","🛡️","Что такое Network Policies в Kubernetes и как они защищают приложение?","Network Policy -- это ресурс Kubernetes, определяющий правила сетевого взаимодействия между подами, работающий по принципу файрвола: можно ограничить как входящий (ingress), так и исходящий (egress) трафик.\n\nПо умолчанию в Kubernetes все поды могут свободно общаться друг с другом -- это опасно, так как скомпрометированный под может обратиться к любому сервису в кластере (lateral movement).\n\nАналогия: Network Policy -- как система пропусков в бизнес-центре. Без них любой может зайти на любой этаж. С ними -- только туда, куда выписан пропуск.\n\n### Требования\n\nNetwork Policies требуют CNI-плагин с поддержкой политик: **Calico**, **Cilium**, **Weave Net**. Стандартный **flannel** не поддерживает Network Policies -- политики будут создаваться без ошибок, но не будут применяться.\n\n### Запрет всего трафика по умолчанию (deny all)\n\n```yaml\napiVersion: networking.k8s.io\u002Fv1\nkind: NetworkPolicy\nmetadata:\n  name: default-deny-all\n  namespace: banking\nspec:\n  podSelector: {}  # Применить ко всем подам в namespace\n  policyTypes:\n  - Ingress\n  - Egress\n```\n\nЭто рекомендуемая отправная точка -- начинаем с полного запрета, затем открываем только необходимое (whitelist-подход).\n\n### Разрешение входящего трафика от конкретного сервиса\n\n```yaml\napiVersion: networking.k8s.io\u002Fv1\nkind: NetworkPolicy\nmetadata:\n  name: allow-api-to-payment-service\n  namespace: banking\nspec:\n  podSelector:\n    matchLabels:\n      app: payment-service\n  policyTypes:\n  - Ingress\n  ingress:\n  - from:\n    - podSelector:\n        matchLabels:\n          app: api-gateway\n    ports:\n    - protocol: TCP\n      port: 8080\n```\n\nЭта политика разрешает подам с меткой `app: api-gateway` подключаться к `payment-service` на порт 8080. Все остальные подключения к `payment-service` запрещены.\n\n### Разрешение исходящего трафика только к определённым сервисам\n\n\u003Cdetails>\n\u003Csummary>Пример egress-политики для payment-service\u003C\u002Fsummary>\n\n```yaml\napiVersion: networking.k8s.io\u002Fv1\nkind: NetworkPolicy\nmetadata:\n  name: payment-service-egress\n  namespace: banking\nspec:\n  podSelector:\n    matchLabels:\n      app: payment-service\n  policyTypes:\n  - Egress\n  egress:\n  # Разрешить доступ к базе данных\n  - to:\n    - podSelector:\n        matchLabels:\n          app: postgres\n    ports:\n    - protocol: TCP\n      port: 5432\n  # Разрешить DNS-запросы (обязательно!)\n  - to:\n    - namespaceSelector: {}\n      podSelector:\n        matchLabels:\n          k8s-app: kube-dns\n    ports:\n    - protocol: UDP\n      port: 53\n    - protocol: TCP\n      port: 53\n  # Разрешить доступ к Kafka\n  - to:\n    - podSelector:\n        matchLabels:\n          app: kafka\n    ports:\n    - protocol: TCP\n      port: 9092\n```\n\n\u003C\u002Fdetails>\n\n### Изоляция namespace-ов\n\n\u003Cdetails>\n\u003Csummary>Пример политики изоляции namespace\u003C\u002Fsummary>\n\n```yaml\napiVersion: networking.k8s.io\u002Fv1\nkind: NetworkPolicy\nmetadata:\n  name: deny-from-other-namespaces\n  namespace: banking\nspec:\n  podSelector: {}\n  policyTypes:\n  - Ingress\n  ingress:\n  # Разрешить трафик только из своего namespace\n  - from:\n    - podSelector: {}\n  # Разрешить трафик из namespace мониторинга\n  - from:\n    - namespaceSelector:\n        matchLabels:\n          purpose: monitoring\n```\n\n\u003C\u002Fdetails>\n\n### Типичная архитектура сетевых политик\n\n```\nInternet -> Ingress Controller -> API Gateway -> [Banking Services] -> Database\n                                       |                 |\n                                  Auth Service         Kafka\n                                       |\n                                     Vault\n```\n\nКаждая стрелка -- отдельная Network Policy. Всё, что не разрешено явно, запрещено.\n\n### Вывод\n\nNetwork Policies -- обязательный элемент безопасности в Kubernetes. Подход deny-all + whitelist гарантирует, что каждый сервис может общаться только с теми компонентами, которые ему действительно нужны. Не забывайте разрешать DNS (порт 53), иначе под не сможет резолвить имена сервисов.\n\n> **На собеседовании:** покажите знание подхода deny-all + whitelist, объясните разницу между ingress и egress. Обязательно упомяните необходимость CNI-плагина с поддержкой политик (Calico, Cilium) и частую ошибку -- забытый DNS в egress.","","middle",[15,16,17,18,19,20],"cilium","kubernetes","network-policies","container-security","микросегментация","calico",[],null,{"title":24,"description":25,"ogTitle":26,"ogDescription":27,"keywords":28,"schemaAnswer":34,"featuredSnippetReady":35},"Network Policies в Kubernetes — микросегментация сети — Gymterview","Network Policies ограничивают сетевой трафик между подами. Default deny, ingress\u002Fegress правила, Calico и Cilium. Примеры для банковских микросервисов.","Network Policies в Kubernetes — ограничение трафика между подами","По умолчанию в Kubernetes любой под может обращаться к любому. Network Policies реализуют микросегментацию: default deny, ingress\u002Fegress правила по labels.",[29,30,31,32,33],"Network Policies Kubernetes","микросегментация Kubernetes","Calico network policy","Cilium сетевые политики","default deny Kubernetes","Network Policies — ресурсы Kubernetes, ограничивающие сетевой трафик между подами на уровне L3\u002FL4. По умолчанию все поды могут общаться друг с другом. Network Policies реализуют микросегментацию: default deny all, затем разрешение только необходимого трафика по labels. Требуют CNI-плагин с поддержкой (Calico, Cilium, Weave Net).",true]