Если на уровне инфраструктуры, где работает Deckhouse Kubernetes Platform, есть требования для ограничения сетевого взаимодействия между серверами, то необходимо соблюсти следующие условия:
- Включен режим туннелирования трафика между подами (настройки для CNI Cilium, настройки для CNI Flannel).
- Разрешена передача трафика между
podSubnetCIDR
, инкапсулированного внутри VXLAN (если выполняется инспектирование и фильтрация трафика внутри VXLAN-туннеля). - В случае необходимости интеграции с внешними системами (например, LDAP, SMTP или прочие внешние API), с ними разрешено сетевое взаимодействие.
- Локальное сетевое взаимодействие полностью разрешено в рамках каждого отдельно взятого узла кластера.
- Разрешено взаимодействие между узлами по портам, приведенным в списке сетевого взаимодействия компонентов платформы. Обратите внимание, что большинство портов входит в диапазон 4200-4299. При добавлении новых компонентов платформы им будут назначаться порты из этого диапазона (при наличии возможности).
Настройка сетевых политик стандартными средствами Kubernetes
Пример настроек сетевой политики
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: test-network-policy
namespace: default
spec:
podSelector:
matchLabels:
app: db
policyTypes:
- Ingress
- Egress
ingress:
- from:
- ipBlock:
cidr: 172.17.0.0/16
except:
- 172.17.1.0/24
- namespaceSelector:
matchLabels:
project: myproject
- podSelector:
matchLabels:
role: frontend
ports:
- protocol: TCP
port: 6379
egress:
- to:
- ipBlock:
cidr: 10.0.0.0/24
ports:
- protocol: TCP
port: 5978
Настройка сетевых политик на уровне всего кластера с помощью CiliumClusterwideNetworkPolicy
Для определения сетевых политик на уровне всего кластера в Deckhouse Kubernetes Platform можно использовать объекты CiliumClusterwideNetworkPolicy модуля cni-cilium
.
Использование объектов CiliumClusterwideNetworkPolicy без включения параметра policyAuditMode
в настройках модуля cni-cilium
может привести к некорректной работе control plane или потере доступа ко всем узлам кластера по SSH.
Для использования объектов CiliumClusterwideNetworkPolicy выполните следующие шаги:
-
Примените первичный набор объектов CiliumClusterwideNetworkPolicy. Для этого в настройки модуля
cni-cilium
добавьте конфигурационную опциюpolicyAuditMode
со значениемtrue
.Опция
policyAuditMode
может быть удалена после применения всех объектов CniliumClusterwideNetworkPolicy и проверки корректности их работы в Hubble UI. -
Примените правило политики сетевой безопасности:
apiVersion: "cilium.io/v2" kind: CiliumClusterwideNetworkPolicy metadata: name: "allow-control-plane-connectivity" spec: ingress: - fromEntities: - kube-apiserver nodeSelector: matchLabels: node-role.kubernetes.io/control-plane: ""
В случае, если объекты CiliumClusterwideNetworkPolicy не применяются, control plane может некорректно работать до одной минуты во время перезагрузки подов cilium-agent
. Это происходит из-за сброса Conntrack-таблицы. Привязка к entity kube-apiserver
позволяет избежать проблемы.