Сетевые политики разрабатываются Kubernetes для ограничения доступа к pod. Как межсетевой экран на уровне приложений, сетевые политики повышают безопасность сети. Возможности, поддерживаемые сетевыми политиками, зависят от возможностей сетевых дополнений кластера.
По умолчанию, если в пространстве имён нет ни одной политики, pod'ы в этом пространстве имён принимают трафик из любого источника и отправляют трафик в любой пункт назначения.
Для сетевых политик доступны следующие селекторы:
Тип кластера | CCE Standard Cluster | CCE Standard Cluster | CCE Turbo Cluster |
|---|---|---|---|
Сетевая модель | Туннельная сеть | VPC Network | 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, или более поздние | Кластеры v1.34.3-r10 или более поздние |
Версии кластера для правил исходящего трафика | v1.23 и более поздние | ||
Селектор для правил входящего трафика | namespaceSelector podSelector | namespaceSelector podSelector ipBlock | namespaceSelector podSelector ipBlock |
Селектор для правил исходящего трафика | namespaceSelector podSelector ipBlock | ||
Поддерживаемые ОС | 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 | Не поддерживается | Не поддерживается | Поддерживается |
Защищённые контейнеры | Не поддерживается | Не поддерживается | Не поддерживается |
Область IPBlock | Не ограничено | Подсети в пределах блока pod CIDR, блока Service CIDR и IP-адресов узлов | Подсети в пределах блока pod CIDR, блока Service CIDR и IP-адресов узлов |
Ограничение доступа к ClusterIP через метки рабочих нагрузок | Не поддерживается | Поддерживается | Поддерживается |
Ограничение внутреннего блока CIDR облачного сервера 100.125.0.0/16 | Поддерживается | Поддерживается | Поддерживается |
SCTP | Не поддерживается | Поддерживается | Поддерживается |
Постоянное разрешение доступа к pod на узле с других узлов | Поддерживается | Поддерживается | Поддерживается |
Настройка EndPort в сетевых политиках | Не поддерживается | Поддерживается | Поддерживается |
Рисунок 1 podSelector

Под pod с меткой role=db разрешает доступ к своему порту 6379 только от pod с меткой role=frontend. Чтобы выполнить это, выполните следующие шаги:
vim access-ingress1.yaml
Содержимое файла:
apiVersion: networking.k8s.io/v1kind: NetworkPolicymetadata:name: access-ingress1namespace: defaultspec:podSelector: # The rule applies only to pods labeled with role=db .matchLabels:role: dbingress: # This is an ingress rule.- from:- podSelector: # 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-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 applies only to pods labeled with role=db .matchLabels:role: dbingress: # This is an ingress rule.- from:- namespaceSelector: # Allow access only from pods in namespaces 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

Pod с меткой role=db разрешает доступ к своему порту 6379 только pod с меткой 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: # Allow access only from pods in namespaces 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
Рисунок 4 ipBlock

Pod'ы с меткой 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 applies only to pods labeled with role=db .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, which is in the range specified by the cidr parameter.
kubectl apply -f access-egress1.yaml
Ожидаемый вывод:
networkpolicy.networking.k8s.io/access-egress1 created
Рисунок 5 Использование как ingress, так и egress

Pod с меткой role=db разрешает доступ к своему порту 6379 только от pod'ов с меткой role=frontend, и этот pod может получать доступ только к pod'ам с меткой role=web. Вы можете использовать то же правило для настройки как ingress, так и egress в сетевой политике. Чтобы выполнить это, выполните следующие действия:
vim access-egress2.yaml
Содержимое файла:
apiVersion: networking.k8s.io/v1kind: NetworkPolicymetadata:name: access-egress2namespace: defaultspec:policyTypes:- Ingress- EgresspodSelector: # The rule applies only to pods labeled with role=db .matchLabels:role: dbingress: # This is an ingress rule.- from:- podSelector: # Allow access only from 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. |
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 недоступны. |
Source Namespace | Выберите namespace, объекты которого могут быть доступны. Если этот параметр не указан, объект принадлежит тому же namespace, что и текущая политика. |
Source Pod Label | Разрешить доступ к pod с этой label. Если этот параметр не указан, доступны все pod в namespace. |
, чтобы добавить outbound rule. Для получения подробной информации о параметрах см. Table 2.
Parameter | Description |
|---|---|
Protocol & Port | Выберите тип протокола и порт. В настоящее время поддерживаются TCP и UDP. Если этот параметр не указан, тип протокола не ограничен. |
Destination CIDR Block | Разрешить маршрутизацию запросов к указанному 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 недоступны. |
Destination Namespace | Выберите пространство имён, объекты которого могут быть доступны. Если этот параметр не указан, объект принадлежит тому же пространству имён, что и текущая политика. |
Destination Pod Label | Разрешить доступ к pod‑ам с этой меткой. Если этот параметр не указан, доступны все pod‑ы в пространстве имён. |