0Pricing
DevOps Bootcamp · Урок

Сетевые политики для изоляции

Управляйте потоком сетевого трафика между Pods и пространствами имён с помощью сетевых политик Kubernetes.

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

Сетевые политики: регулировщики трафика

В Kubernetes поды по умолчанию могут свободно взаимодействовать друг с другом. Это удобно, но не всегда оптимально с точки зрения безопасности.

Сетевые политики действуют как брандмауэры для подов и управляют тем, какой сетевой трафик разрешён на входе (ingress) и выходе (egress).

По умолчанию все поды могут взаимодействовать

По умолчанию после развёртывания Pod может взаимодействовать с любым другим Pod в кластере независимо от пространства имён. Такая модель «плоской сети» упрощает настройку, но не обеспечивает изоляцию.

В производственных средах часто требуется ограничить взаимодействие, чтобы повысить безопасность и предотвратить несанкционированный доступ между компонентами приложения.

Правила ingress и egress

Сетевые политики определяют правила взаимодействия подов. В основном они регулируют два типа трафика:

  • Ingress: входящий трафик в Pod.
  • Egress: исходящий трафик из Pod.

Эти правила применяются к определённым подам с помощью меток и могут задавать другие поды, пространства имён или диапазоны IP.

Требование к плагину CNI

Сетевые политики — не волшебство! Чтобы они работали, в вашем кластере Kubernetes должен быть плагин интерфейса контейнерной сети (CNI), который их поддерживает.

Популярные плагины CNI, такие как Calico, Cilium и Weave Net, предоставляют такую функциональность. Без поддерживающего CNI сетевые политики не будут действовать.

Структура политики

Сетевые политики определяются с помощью YAML. К основным полям относятся:

  • metadata.name: уникальное имя политики.
  • spec.podSelector: выбирает поды, к которым применяется эта политика.
  • spec.policyTypes: указывает, применяется ли политика к Ingress, Egress или обоим типам.
  • spec.ingress/spec.egress: содержит правила разрешённого трафика.

Блокировка всего входящего трафика

Создадим политику, запрещающую весь входящий трафик к подам с меткой app: backend в текущем пространстве имён. Это распространённая отправная точка для политики безопасности «запрещать по умолчанию».

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: deny-all-backend-ingress
spec:
  podSelector:
    matchLabels:
      app: backend
  policyTypes:
  - Ingress
  ingress: [] # An empty ingress list denies all incoming traffic

Разрешение ingress от фронтенда

Теперь изменим нашу политику так, чтобы разрешить входящий трафик к подам app: backend только от подов с меткой app: frontend в том же пространстве имён.

Обратите внимание на раздел from, задающий исходные поды.

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: allow-frontend-to-backend
spec:
  podSelector:
    matchLabels:
      app: backend
  policyTypes:
  - Ingress
  ingress:
  - from:
    - podSelector:
        matchLabels:
          app: frontend

Управление исходящим трафиком

Как и входящим трафиком, можно управлять исходящим трафиком (egress). Здесь мы создадим политику, которая разрешает подам app: backend отправлять запросы только подам с меткой app: database.

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: backend-egress-to-db
spec:
  podSelector:
    matchLabels:
      app: backend
  policyTypes:
  - Egress
  egress:
  - to:
    - podSelector:
        matchLabels:
          app: database

Обращение к другим пространствам имён

Что делать, если ваш фронтенд находится в другом пространстве имён, например web-apps? Для выбора подов в разных пространствах имён можно использовать namespaceSelector.

Эта политика разрешает входящий трафик к подам app: backend от любого Pod в пространстве имён web-apps.

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: allow-web-apps-ingress
spec:
  podSelector:
    matchLabels:
      app: backend
  policyTypes:
  - Ingress
  ingress:
  - from:
    - namespaceSelector:
        matchLabels:
          name: web-apps
      podSelector: {} # All pods in the selected namespace

Задача о политиках

Рассмотрим Pod с метками app: web и env: prod. Какая сетевая политика разрешит только входящий трафик от подов из пространства имён monitoring?

Итоги: защитите свою сеть

Отличная работа! Вы узнали, как сетевые политики Kubernetes обеспечивают важную сетевую изоляцию для ваших приложений.

  • Они действуют как брандмауэры для подов.
  • Управляют входящим (in) и исходящим (out) трафиком.
  • Требуют плагин CNI с поддержкой сетевых политик.
  • Определяются с помощью YAML, используя podSelector, policyTypes и определения правил.
  • Могут выбирать поды по меткам и даже целые пространства имён.

Используйте их, чтобы реализовать сетевую модель с минимальными привилегиями!

Часто задаваемые вопросы

Урок «Сетевые политики для изоляции» бесплатный?

Да — полный текст урока «Сетевые политики для изоляции» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс DevOps Bootcamp, подпишись на CoddyKit PRO. Курс DevOps Bootcamp содержит 4 уроков всего.

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

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

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

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

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

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

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

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

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

  1. Ролевое управление доступом (RBAC)
  2. Сетевые политики для изоляции
  3. Стандарты безопасности Pod
  4. Сервисные аккаунты и идентичность рабочих нагрузок
← Назад к DevOps Bootcamp