Сетевые политики разрабатываются Kubernetes для ограничения доступа к pod. Как межсетевой экран на уровне приложения, сетевые политики повышают безопасность сети. Возможности, поддерживаемые сетевыми политиками, зависят от возможностей сетевых дополнений кластера.
По умолчанию, если пространство имён не имеет ни одной политики, pod'ы в этом пространстве имён принимают трафик из любого источника и отправляют трафик в любой пункт назначения.
Для сетевых политик доступны следующие селекторы:
Тип кластера | CCE Standard Кластер | CCE Standard Кластер | CCE Turbo Кластер |
|---|---|---|---|
Сетевая модель | Туннель | VPC | Cloud Native Network 2.0 |
NetworkPolicy | Включено по умолчанию | Отключено по умолчанию (Чтобы использовать сетевые политики, включите DataPlane V2 при создании кластера.) | Отключено по умолчанию (Чтобы использовать сетевые политики, включите DataPlane V2 при создании кластера.) |
Реализация плоскости данных | OpenvSwitch | eBPF | eBPF |
Версия кластера для правил входящего трафика | Все версии | Версия кластера: v1.27.16-r30, v1.28.15-r20, v1.29.13-r0, v1.30.10-r0, v1.31.6-r0, или новее | Версия кластера: v1.27.16-r10, v1.28.15-r0, v1.29.10-r0, v1.30.6-r0, или позже |
Версия кластера для правил egress | v1.23 и позже | ||
Селектор для правил ingress | namespaceSelector podSelector | namespaceSelector podSelector IPBlock | namespaceSelector podSelector IPBlock |
Селектор для правил egress | namespaceSelector podSelector IPBlock | ||
Поддерживаемая ОС | EulerOS CentOS HCE OS 2.0 | HCE OS 2.0 | HCE OS 2.0 |
IPv6 сетевые политики | Не поддерживается | Не поддерживается | Поддерживается |
Безопасные контейнеры | Не поддерживается | Не поддерживается | Не поддерживается |
IPBlock область | Не ограничено | Подсети в блоке pod CIDR, блоке Service CIDR и IP-адресах узлов | Подсети в блоке pod CIDR, блоке Service CIDR и IP-адресах узлов |
Ограничить доступ к ClusterIP через метки рабочих нагрузок | Не поддерживается | Поддерживается | Поддерживается |
Ограничить внутренний CIDR-блок облачного сервера 100.125.0.0/16 | Поддерживается | Поддерживается | Не поддерживается |
SCTP | Не поддерживается | Поддерживается | Не поддерживается |
Всегда разрешать доступ к pods на узле с других узлов | Поддерживается | Поддерживается | Поддерживается |
Настройте EndPort в сетевых политиках | Не поддерживается | Поддерживается | Не поддерживается |
Рисунок 1 podSelector

Под с меткой role=db разрешает доступ к порту 6379 только от подов с меткой role=frontend. Чтобы достичь этого, выполните следующие действия:
vim access-ingress1.yaml
Содержимое файла:
apiVersion: networking.k8s.io/v1kind: NetworkPolicymetadata:name: access-ingress1namespace: defaultspec:podSelector: # The rule takes effect for pods with the role=db label.matchLabels:role: dbingress: # This is an ingress rule.- from:- podSelector: # Only allows the access of the pods labeled with role=frontend.matchLabels:role: frontendports: # Only TCP can be used to access port 6379.- protocol: TCPport: 6379
kubectl apply -f access-ingress1.yaml
Ожидаемый вывод:
networkpolicy.networking.k8s.io/access-ingress1 created
Рисунок 2 namespaceSelector

Pod с меткой role=db разрешает доступ к своему порту 6379 только pod'ам в пространстве имён, помеченном project=myproject. Чтобы достичь этого, выполните следующие шаги:
vim access-ingress2.yaml
Содержание файла:
apiVersion: networking.k8s.io/v1kind: NetworkPolicymetadata:name: access-ingress2spec:podSelector: # The rule takes effect for pods with the role=db label.matchLabels:role: dbingress: # This is an ingress rule.- from:- namespaceSelector: # Only allows the access of the pods in the namespace labeled with project=myproject.matchLabels:project: myprojectports: # Only TCP can be used to access port 6379.- protocol: TCPport: 6379
kubectl apply -f access-ingress2.yaml
Ожидаемый вывод:
networkpolicy.networking.k8s.io/access-ingress2 created
Рисунок 3 Использование podSelector и namespaceSelector

Под с меткой role=db разрешает доступ к его порту 6379 только из подов с меткой role=frontend в пространстве имён с меткой project=myproject. Чтобы достичь этого, выполните следующие действия:
vim access-ingress3.yaml
Содержимое файла:
apiVersion: networking.k8s.io/v1kind: NetworkPolicymetadata:name: access-ingress3spec:podSelector: # The rule applies only to pods labeled with role=db.matchLabels:role: dbingress: # This is an ingress rule.- from:- namespaceSelector: # Only allow the access of the pods in the namespace labeled with project=myproject.matchLabels:project: myprojectpodSelector: # Allow access only from pods labeled with role=frontend.matchLabels:role: frontendports: # Only TCP can be used to access port 6379.- protocol: TCPport: 6379
kubectl apply -f access-ingress3.yaml
Ожидаемый вывод:
networkpolicy.networking.k8s.io/access-ingress3 created
Кластеры версии v1.23 и выше, использующие туннельную сеть, поддерживают исходящие правила. Операционная система узла может быть только CentOS 7.x или HCE OS 2.0.
Исходящие правила доступны только в кластерах CCE Turbo или других кластерах CCE, использующих сети VPC. Версия кластера должна быть v1.27.16-r10, v1.28.15-r0, v1.29.10-r0, v1.30.6-r0 или новее, и должен быть включён DataPlane V2. Кроме того, узлы в этих кластерах должны работать HCE OS 2.0.
Рисунок 4 IPBlock

Поды с меткой role=db разрешают доступ только к 172.16.0.0/16, исключая 172.16.0.40/32. Чтобы достичь этого, выполните следующие шаги:
vim access-egress1.yaml
Содержимое файла:
apiVersion: networking.k8s.io/v1kind: NetworkPolicymetadata:name: access-egress1namespace: defaultspec:policyTypes: # This policy type must be specified for egress rules.- EgresspodSelector: # The rule takes effect for pods with the role=db label.matchLabels:role: dbegress: # This is an egress rule.- to:- ipBlock:cidr: 172.16.0.0/16 # Allows access to this CIDR block in the outbound direction.except:- 172.16.0.40/32 # Blocks access to this CIDR block. This CIDR block is in the allowed CIDR block.
kubectl apply -f access-egress1.yaml
Ожидаемый вывод:
networkpolicy.networking.k8s.io/access-egress1 created
Рисунок 5 Используя как ingress, так и egress

Под, помеченный role=db разрешает доступ к своему порту 6379 только от подов с меткой role=frontend, и этот pod может получать доступ только к подам с меткой role=web. Вы можете использовать то же правило для настройки как ingress, так и egress в сетевой политике. Чтобы достичь этого, выполните следующие шаги:
vim access-egress2.yaml
Содержимое файла:
apiVersion: networking.k8s.io/v1kind: NetworkPolicymetadata:name: access-egress2namespace: defaultspec:policyTypes:- Ingress- EgresspodSelector: # The rule takes effect for pods with the role=db label.matchLabels:role: dbingress: # This is an ingress rule.- from:- podSelector: # Only allows the access of the pods labeled with role=frontend.matchLabels:role: frontendports: # Only TCP can be used to access port 6379.- protocol: TCPport: 6379egress: # This is an egress rule.- to:- podSelector: # The rule takes effect for pods with the role=web label.matchLabels:role: web
kubectl apply -f access-egress2.yaml
Ожидаемый вывод:
networkpolicy.networking.k8s.io/access-egress2 created
чтобы добавить входящее правило. Для получения подробной информации о параметрах см. Table 1.
Параметр | Описание |
|---|---|
Протокол & Порт | Выберите тип протокола и порт. В настоящее время поддерживаются TCP и UDP. |
Исходный CIDR Блок | Для кластеров v1.27.16-r10, v1.28.15-r0, v1.29.10-r0, v1.30.6-r0 или более поздних версий с включённым DataPlane V2 вы можете настроить исходный CIDR‑блок. Указанный исходный CIDR‑блок позволяет трафик от целевого CIDR‑блока (можно указать несколько CIDR‑блоков исключения). Разделяйте целевой и исключающий CIDR‑блок вертикальной чертой (|). Если указано несколько CIDR‑блоков исключения, разделяйте их запятыми (,). Например, 172.17.0.0/16|172.17.1.0/24,172.17.2.0/24 означает, что 172.17.0.0/16 доступен, а 172.17.1.0/24 и 172.17.2.0/24 недоступны. |
Исходное пространство имён | Выберите пространство имён, объекты которого могут быть доступны. Если этот параметр не указан, объект принадлежит тому же пространству имён, что и текущая политика. |
Исходная метка Pod | Разрешить доступ к pod'ам с этой меткой. Если этот параметр не указан, могут быть доступны все pod'ы в пространстве имён. |
чтобы добавить исходящее правило. Для получения подробностей о настройках параметров см Таблица 2.
Параметр | Описание |
|---|---|
Протокол & Порт | Выберите тип протокола и порт. В настоящее время поддерживаются TCP и UDP. Если этот параметр не указан, тип протокола не ограничен. |
Блок CIDR назначения | Разрешить маршрутизацию запросов к указанному CIDR-блоку (и не к блокам-исключениям CIDR). Разделяйте блоки назначения и блоки-исключения CIDR с помощью вертикальной черты (|). Если имеется несколько блоков-исключений CIDR, разделяйте их запятыми (,). Например, 172.17.0.0/16|172.17.1.0/24,172.17.2.0/24 указывает, что 172.17.0.0/16 доступен, но 172.17.1.0/24 и 172.17.2.0/24 недоступны. |
Пространство имён назначения | Выберите пространство имён, объекты которого могут быть доступны. Если этот параметр не указан, объект принадлежит тому же пространству имён, что и текущая политика. |
Метка Pod назначения | Разрешить доступ к pod‑ам с этой меткой. Если этот параметр не указан, все pod‑ы в пространстве имён могут быть доступны. |