0Pricing
DevOps Bootcamp · Урок

Сетевые политики и минимальные привилегии в сети

Ограничивайте трафик между контейнерами с помощью сетевых политик с запретом по умолчанию, явных правил разрешения и принципа минимальных привилегий в сети.

«Сетевые политики и минимальные привилегии в сети» — бесплатный урок DevOps Bootcamp на CoddyKit. Это урок 4 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения DevOps Bootcamp, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс DevOps Bootcamp содержит 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) и разблокировать остальной курс DevOps Bootcamp, подпишись на CoddyKit PRO. Курс DevOps Bootcamp содержит 4 уроков всего.

Чему я научусь в уроке «Сетевые политики и минимальные привилегии в сети»?

Ограничивайте трафик между контейнерами с помощью сетевых политик с запретом по умолчанию, явных правил разрешения и принципа минимальных привилегий в сети. Ты практикуешь DevOps Bootcamp с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать DevOps Bootcamp?

Предыдущий опыт не требуется. DevOps Bootcamp на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 4 из 4.

Сколько времени занимает урок «Сетевые политики и минимальные привилегии в сети»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке DevOps Bootcamp?

Да. Каждый урок DevOps Bootcamp включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Проверка безопасности образов контейнеров
  2. Безопасность контейнеров во время выполнения
  3. Управление секретами и RBAC
  4. Сетевые политики и минимальные привилегии в сети
← Назад к DevOps Bootcamp