Сетевые политики разрабатываются Kubernetes для ограничения доступа к pod. Как межсетевой экран на уровне приложений, сетевые политики повышают безопасность сети. Возможности, поддерживаемые сетевыми политиками, зависят от возможностей сетевых дополнений кластера.
По умолчанию, если в пространстве имён нет ни одной политики, pod'ы в этом пространстве имён принимают трафик из любого источника и отправляют трафик в любой пункт назначения.
Для сетевых политик доступны следующие селекторы:
Помимо портов сервисов и CIDR‑блоков, необходимо учитывать порты и CIDR‑блоки, требуемые критическими компонентами кластера, такими как CoreDNS и NodeLocal DNSCache. Их отсутствие может повлиять на стабильность сервисов.
Тип кластера | CCE Standard Cluster | CCE Standard Cluster | CCE Turbo Cluster |
|---|---|---|---|
Сетевая модель | Туннельная сеть | Сеть VPC | Cloud Native Network 2.0 |
Политики сети | Включено по умолчанию | Отключено по умолчанию (Чтобы использовать политики сети, включите 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, or later | Кластеры v1.34.3-r10 и новее |
Версии кластера для правил исходящего трафика | v1.23 и позже | ||
Селектор для ingress‑правил | namespaceSelector podSelector | namespaceSelector podSelector ipBlock | namespaceSelector podSelector ipBlock |
Селектор для egress‑правил | namespaceSelector podSelector ipBlock | ||
Максимальное количество объектов NetworkPolicy, которые могут быть применены к pod | 15 | Не ограничено. Рекомендуется поддерживать количество ниже 100. | Не ограничено. Рекомендуется поддерживать количество ниже 100. |
Поддерживаемые ОС | EulerOS CentOS HCE OS 2.0 | HCE OS 2.0 поддерживается. Кластеры v1.28.15-r70, v1.29.15-r30, v1.30.14-r30, v1.31.10-r30, v1.32.6-r30, v1.33.5-r20, v1.34.1-r0 и более поздние версии поддерживают Ubuntu 22.04. | HCE OS 2.0 поддерживается. Кластеры v1.28.15-r70, v1.29.15-r30, v1.30.14-r30, v1.31.10-r30, v1.32.6-r30, v1.33.5-r20, v1.34.1-r0 и более поздние версии поддерживают Ubuntu 22.04. |
Политики сети IPv6 | Не поддерживается | Не поддерживается | Поддерживается |
Защищённые контейнеры | Not supported | Not supported | Not supported |
IPBlock область | Нет ограничений | Подсети внутри pod CIDR block, Service CIDR block и node IP addresses | Подсети внутри pod CIDR block, Service CIDR block и node IP addresses |
Ограничение доступа к ClusterIP через метки workload | Not supported | Поддерживается | Поддерживается |
Ограничение внутреннего cloud server CIDR block 100.125.0.0/16 | Поддерживается | Поддерживается | Поддерживается |
SCTP | Не поддерживается | Поддерживается | Поддерживается |
Всегда разрешать доступ к pod‑ам на узле с других узлов | Поддерживается | Поддерживается | Поддерживается |
Настройка EndPort в сетевых политиках | Не поддерживается | Поддерживается | Поддерживается |
Figure 1 podSelector

Например, pod с меткой role=db открывает порт 6379 и принимает трафик только от pods с меткой role=frontend. Чтобы достичь этого, выполните следующие шаги:
Parameter | Description | Example |
|---|---|---|
Policy Name | Настройте имя для network policy. | access-ingress1 |
Namespace | Выберите пространство имён, к которому применяется политика. | default |
Selector | Введите селектор меток для целевого pod и нажмите Add. Если оставить пустым, будут выбраны все pod в пространстве имён. Нажмите Reference Workload Label, чтобы использовать метку существующей рабочей нагрузки. | Ключ: role Значение: db |
Inbound Rule | Нажмите | |
Outbound Rule | Нажмите | N/A |
Parameter | Description | Пример |
|---|---|---|
Protocol & Port | Выберите тип протокола и порт. Поддерживаются TCP и UDP. | Protocol: TCP Port: 6379 |
Source CIDR Block | Для кластеров v1.27.16-r10, v1.28.15-r0, v1.29.10-r0, v1.30.6-r0 или более поздних версий с включённым DataPlane V2 вы можете настроить source CIDR block. Указанный source CIDR block разрешает трафик из destination CIDR block (можно указать несколько exception CIDR block). Разделяйте destination и exception CIDR block вертикальной чертой (|). Если указано несколько exception CIDR block, разделяйте их запятыми (,). Например, 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. | N/A |
Source Namespace | Выберите namespace, объекты которого могут быть доступны. По умолчанию используется namespace политики, если не указано. | default |
Source Pod Label | Введите селектор меток для разрешённых source pod и нажмите Add. Если оставить пустым, все pod в source namespace разрешены. | Key: role Value: frontend |
vim access-ingress1.yaml
Содержимое файла:
apiVersion: networking.k8s.io/v1kind: NetworkPolicymetadata:name: access-ingress1namespace: defaultspec:podSelector: # This rule applies only to pods labeled role=db .matchLabels:role: dbingress: # This is an ingress rule.- from:- podSelector: # Allow access only from pods labeled 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. Чтобы выполнить это, выполните следующие действия:
Параметр | Описание | Пример |
|---|---|---|
Имя политики | Настройте имя для сетевой политики. | access-ingress2 |
Namespace | Выберите namespace, в котором применяется политика. | default |
Selector | Введите селектор меток для целевого pod и нажмите Add. Если оставить пустым, будут выбраны все pod в namespace. Нажмите Reference Workload Label, чтобы использовать метку существующей workload. | Key: role Value: db |
Inbound Rule | Нажмите | |
Исходящее правило | Нажмите | N/A |
Параметр | Описание | Пример |
|---|---|---|
Протокол и порт | Выберите тип протокола и порт. Поддерживаются TCP и UDP. | Protocol: TCP Port: 6379 |
Исходный 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. | N/A |
Source Namespace | Выберите пространство имён, объекты которого могут быть доступны. По умолчанию используется пространство имён политики, если не указано. | myproject |
Source Pod Label | Введите селектор меток для разрешённых исходных pod‑ов и нажмите Add. Если оставить пустым, разрешены все pod‑ы в исходном пространстве имён. | N/A |
vim access-ingress2.yaml
Содержимое файла:
apiVersion: networking.k8s.io/v1kind: NetworkPolicymetadata:name: access-ingress2spec:podSelector: # This rule applies only to pods labeled role=db .matchLabels:role: dbingress: # This is an ingress rule.- from:- namespaceSelector: # Allow access only from pods in namespaces labeled 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

Pod, помеченный role=db, разрешает доступ к своему порту 6379 только из pod с меткой role=frontend в пространстве имён, помеченном project=myproject. Чтобы достичь этого, выполните следующие шаги:
Параметр | Описание | Пример |
|---|---|---|
Имя политики | Укажите имя для сетевой политики. | access-ingress3 |
Пространство имён | Выберите пространство имён, к которому применяется политика. | default |
Selector | Введите селектор меток для целевого pod и нажмите Add. Если оставить пустым, все pod в пространстве имён будут выбраны. Нажмите Reference Workload Label, чтобы использовать метку существующей рабочей нагрузки. | Key: role Value: db |
Inbound Rule | Нажмите | |
Outbound Rule | Нажмите | N/A |
Parameter | Description | Example |
|---|---|---|
Protocol & Port | Выберите тип протокола и порт. Поддерживаются TCP и UDP. | Protocol: TCP Port: 6379 |
Source CIDR Block | Для кластеров 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. | N/A |
Source Namespace | Выберите пространство имён, объекты которого могут быть доступны. Если не указано, по умолчанию используется пространство имён политики. | myproject |
Source Pod Label | Введите селектор меток для разрешённых исходных pod‑ов и нажмите Add. Если оставить пустым, разрешены все pod‑ы в исходном пространстве имён. | Key: role Value: frontend |
vim access-ingress3.yaml
Содержимое файла:
apiVersion: networking.k8s.io/v1kind: NetworkPolicymetadata:name: access-ingress3spec:podSelector: # This rule applies only to pods labeled role=db .matchLabels:role: dbingress: # This is an ingress rule.- from:- namespaceSelector: # Allow access only from pods in namespaces labeled project=myproject .matchLabels:project: myprojectpodSelector: # Allow access only from pods labeled 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
Рисунок 4 ipBlock

Pods с меткой role=db допускают доступ только к 172.16.0.0/16, исключая 172.16.0.40/32. Чтобы выполнить это, выполните следующие действия:
Параметр | Описание | Пример |
|---|---|---|
Имя политики | Настройте имя для сетевой политики. | access-ingress3 |
Namespace | Выберите namespace, к которому применяется политика. | default |
Selector | Введите селектор меток для целевого pod и нажмите Add. Если оставить пустым, все pod в namespace будут выбраны. Нажмите Reference Workload Label, чтобы использовать метку существующего workload. | Key: role Value: db |
Inbound Rule | Нажмите | N/A |
Outbound Rule | Нажмите |
Parameter | Description | Example |
|---|---|---|
Protocol & Port | Выберите тип протокола и порт. Поддерживаются TCP и UDP. Если не указано, разрешены все протоколы и порты. | N/A |
Destination CIDR Block | Разрешить маршрутизацию запросов к указанному 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. | 172.16.0.0/16|172.16.0.40/32 |
Destination Namespace | Выберите пространство имён, объекты которого могут быть доступны. Если не указано, по умолчанию используется пространство имён политики. | N/A |
Destination Pod Label | Label selector для целевого pod, разрешённый этим правилом. Если оставить пустым, разрешаются все pod в destination namespace. | N/A |
vim access-egress1.yaml
Содержимое файла:
apiVersion: networking.k8s.io/v1kind: NetworkPolicymetadata:name: access-egress1namespace: defaultspec:policyTypes: # Must be specified for egress rules.- EgresspodSelector: # This rule applies only to pods labeled role=db .matchLabels:role: dbegress: # This is an egress rule.- to:- ipBlock:cidr: 172.16.0.0/16 # Allows outbound traffic to this CIDR block.except:- 172.16.0.40/32 # Blocks access to this CIDR block, which is in the range specified by the cidr parameter.
kubectl apply -f access-egress1.yaml
Ожидаемый вывод:
networkpolicy.networking.k8s.io/access-egress1 created
Figure 5 Использование как входящего, так и исходящего трафика

Pod с меткой role=db разрешает доступ к своему порту 6379 только от pod с меткой role=frontend, и этот pod может обращаться только к pod с меткой role=web. Вы можете использовать то же правило для настройки как входящего, так и исходящего трафика в network policy. Чтобы выполнить это, выполните следующие действия:
Параметр | Описание | Пример |
|---|---|---|
Policy Name | Настройте имя для сетевой политики. | access-ingress3 |
Namespace | Выберите пространство имён, к которому применяется политика. | default |
Selector | Введите селектор меток для целевого pod и нажмите Add. Если оставить пустым, будут выбраны все pod в пространстве имён. Нажмите Reference Workload Label, чтобы использовать метку существующей рабочей нагрузки. | Key: role Value: db |
Inbound Rule | Нажмите | |
Outbound Rule | Нажмите |
Parameter | Description | Example |
|---|---|---|
Protocol & Port | Выберите тип протокола и порт. Поддерживаются TCP и UDP. | Protocol: TCP Port: 6379 |
Source CIDR Block | Для кластеров v1.27.16-r10, v1.28.15-r0, v1.29.10-r0, v1.30.6-r0 или более поздних версий с включённым DataPlane V2 вы можете настроить исходный CIDR‑блок. Указанный исходный 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. | N/A |
Source Namespace | Выберите пространство имён, объекты которого могут быть доступны. Если не указано, по умолчанию используется пространство имён политики. | default |
Source Pod Label | Введите селектор меток для разрешённых исходных pod и нажмите Add. Если оставить пустым, разрешены все pod в исходном пространстве имён. | Key: role Value: frontend |
Parameter | Description | Example |
|---|---|---|
Protocol & Port | Выберите тип протокола и порт. Поддерживаются TCP и UDP. Если не указано, разрешены все протоколы и порты. | N/A |
Destination CIDR Block | Разрешить маршрутизацию запросов к указанному 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. | N/A |
Destination Namespace | Выберите пространство имён, объекты которого могут быть доступны. Если не указано, по умолчанию используется пространство имён политики. | default |
Destination Pod Label | Селектор меток для целевого pod, разрешённого этим правилом. Если оставить пустым, разрешены все pod в целевом пространстве имён. | Ключ: role Значение: web |
vim access-egress2.yaml
Содержимое файла:
apiVersion: networking.k8s.io/v1kind: NetworkPolicymetadata:name: access-egress2namespace: defaultspec:policyTypes:- Ingress- EgresspodSelector: # This rule applies only to pods labeled role=db .matchLabels:role: dbingress: # This is an ingress rule.- from:- podSelector: # Allow access only from pods labeled 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