У меня есть кластер на Google Kubernetes Engine, в нем включены сетевые политики с помощью Calico.
До сих пор я написал 12 сетевых политик в виде файлов YAML.
Одна вещь, которую я не могу понять, - это то, что порядок, в котором создаются эти сетевые политики, имеет значение.
Например, допустим, у меня есть эти две политики:
Pol # 1 - Запретить все входящие соединения
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: deny-all-ingress
namespace: default
spec:
podSelector: {}
policyTypes:
- Ingress
Pol # 2 - Разрешить доступ к базе данных серверной части:
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: allow-db-to-be-accessed-by-backend
namespace: default
spec:
podSelector:
matchLabels:
app: mysql
release: production
policyTypes:
- Ingress
ingress:
- from:
- podSelector:
matchLabels:
app: backend
release: production
ports:
- protocol: TCP
port: 3306
Получу ли я разные результаты, если применю Pol # 1, затем Pol # 2, по сравнению с применением Pol # 2 сначала, а затем Pol # 1?
Нет, не имеет значения, в каком порядке вы применяете свои правила. В вашем случае правило Pol # 2 все равно будет работать.
Еще один пример NetworkPolicy: предположим, что у вас есть 2 политики: 1 правило для запрета всего трафика и 2 для разрешения трафика для выбранного приложения. Какой бы порядок правил вы ни выбрали, входящий трафик будет разрешен для модулей с меткой app: web
в поле зрения namespace: default
deny-all.yaml:
kind: NetworkPolicy
apiVersion: networking.k8s.io/v1
metadata:
name: default-deny-all
namespace: default
spec:
podSelector: {}
ingress: []
применить-nginx-app.yaml:
kind: NetworkPolicy
apiVersion: networking.k8s.io/v1
metadata:
name: web-allow-all
namespace: default
spec:
podSelector:
matchLabels:
app: web
ingress:
- {}
Кстати, вы можете найти множество примеров сетевых политик с пошаговым объяснением. Вот.
Надеюсь, это поможет.