Сетевые политики для изоляции
Управляйте потоком сетевого трафика между 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 — локальная установка не требуется.
Все уроки этого курса
- Ролевое управление доступом (RBAC)
- Сетевые политики для изоляции
- Стандарты безопасности Pod
- Сервисные аккаунты и идентичность рабочих нагрузок