Сетевые политики и минимальные привилегии в сети
Ограничивайте трафик между контейнерами с помощью сетевых политик с запретом по умолчанию, явных правил разрешения и принципа минимальных привилегий в сети.
«Сетевые политики и минимальные привилегии в сети» — бесплатный урок Docker & DevOps Fundamentals на CoddyKit. Это урок 4 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Docker & DevOps Fundamentals, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Docker & DevOps Fundamentals содержит 4 уроков всего.
Открытый доступ по умолчанию опасен
По умолчанию контейнеры в кластере обычно могут взаимодействовать с любыми другими контейнерами. Взломанный под тогда сможет свободно обращаться к базам данных и внутренним сервисам. Сетевые политики закрывают этот путь.
Минимальные привилегии для сети
Принципа минимальных привилегий следует придерживаться и для трафика: сервис должен принимать и устанавливать только те соединения, которые действительно необходимы, — и ничего больше.
Что такое сетевая политика
NetworkPolicy — это объект Kubernetes, который выбирает поды по метке и указывает, какой входящий и исходящий трафик разрешён. Плагин CNI (Calico, Cilium) применяет эти правила.
Нужен CNI, применяющий правила
Как Ingress требует контроллера, так и NetworkPolicies требуют CNI с поддержкой этих правил. На плагине, который их игнорирует, правила молча ничего не делают.
Запрет входящего трафика по умолчанию
Начните с запрета всего входящего трафика в пространство имён, а затем разрешайте только необходимое. Пустой podSelector выбирает каждый под.
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: default-deny-ingress
spec:
podSelector: {}
policyTypes:
- IngressРазрешение определённого трафика
Теперь разрешите только подам веб-интерфейса обращаться к API через порт 8080. Всё остальное останется заблокированным.
spec:
podSelector:
matchLabels:
app: api
ingress:
- from:
- podSelector:
matchLabels:
app: frontend
ports:
- port: 8080Ограничение исходящего трафика
Можно также ограничить исходящий трафик: например, разрешить поду обращаться только к базе данных и не дать взломанному поду связаться с внешним управляющим узлом.
spec:
podSelector:
matchLabels:
app: api
policyTypes:
- Egress
egress:
- to:
- podSelector:
matchLabels:
app: dbСелекторы пространств имён
Правила могут использовать namespaceSelector, чтобы разрешать межпространственный трафик только из доверенных пространств имён — это полезно для общих платформенных сервисов.
from:
- namespaceSelector:
matchLabels:
team: platformРазрешение DNS
Распространённая ловушка: строгий запрет исходящего трафика по умолчанию также блокирует DNS, из-за чего перестаёт работать разрешение имён. Не забудьте разрешить UDP/TCP 53 для kube-dns.
egress:
- to: []
ports:
- protocol: UDP
port: 53За пределами Kubernetes
Пользователи Docker получают похожее преимущество благодаря пользовательским сетям: взаимодействовать друг с другом могут только контейнеры в одной сети, что изолирует несвязанные приложения.
docker network create --internal backendПодход нулевого доверия
Сетевое взаимодействие с минимальными привилегиями приближает Вас к принципу нулевого доверия: считайте сеть враждебной, аутентифицируйте и авторизуйте каждое соединение, ничего не разрешайте по умолчанию.
Быстрая проверка
Какую разумную стратегию выбрать в качестве отправной точки для сетевых политик?
Повторение
Теперь Вы умеете безопасно ограничивать трафик:
- Применяйте запрет по умолчанию, а затем добавляйте явные правила разрешения
- Управляйте и входящим, и исходящим трафиком по меткам и пространствам имён
- Не забывайте разрешать DNS; необходим CNI, применяющий правила
- Внутренние сети Docker обеспечивают похожую изоляцию
Сетевое взаимодействие с минимальными привилегиями уменьшает масштаб последствий любого взлома.
Часто задаваемые вопросы
Урок «Сетевые политики и минимальные привилегии в сети» бесплатный?
Да — полный текст урока «Сетевые политики и минимальные привилегии в сети» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Docker & DevOps Fundamentals, подпишись на CoddyKit PRO. Курс Docker & DevOps Fundamentals содержит 4 уроков всего.
Чему я научусь в уроке «Сетевые политики и минимальные привилегии в сети»?
Ограничивайте трафик между контейнерами с помощью сетевых политик с запретом по умолчанию, явных правил разрешения и принципа минимальных привилегий в сети. Ты практикуешь Docker & DevOps Fundamentals с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать Docker & DevOps Fundamentals?
Предыдущий опыт не требуется. Docker & DevOps Fundamentals на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 4 из 4.
Сколько времени занимает урок «Сетевые политики и минимальные привилегии в сети»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке Docker & DevOps Fundamentals?
Да. Каждый урок Docker & DevOps Fundamentals включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Проверка безопасности образов контейнеров
- Безопасность контейнеров во время выполнения
- Управление секретами и RBAC
- Сетевые политики и минимальные привилегии в сети