У меня есть приложение, работающее в K3s, и я хочу реализовать сетевую политику только на основе пространства имен.
Предположим, что в настоящее время у меня есть три пространства имен A, B и C. Я хочу разрешить исходящий вызов (внешний вызов в Интернет из модуля) для namespace-A
, а оставшиеся namespace[B & C]
исходящие вызовы должны быть заблокированы/отклонены.
Возможно ли это в сетевой политике Kubernetes (а не в calico или cilium)?
Ограничение вызова Kubernetes Egress пространством имен
Ответы (1)
Вы можете определить политику deny all egress
, как описано в документация:
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: default-deny-egress
namespce: your-namespace
spec:
podSelector: {}
policyTypes:
- Egress
Эта политика будет применяться ко всем модулям в пространстве имен, поскольку селектор модулей пуст, а это означает (цитируя документация):
Пустой podSelector выбирает все модули в пространстве имен.
Политика будет блокировать весь исходящий трафик, поскольку она имеет тип политики Egress
, но не имеет раздела egress
.
Если вы хотите разрешить выход из кластера, вы можете добавить в политику раздел egress
, например:
egress:
- to:
- namespaceSelector:
matchLabels:
networking/namespace: kube-system
podSelector:
matchLabels:
k8s-app: kube-dns
ports:
- protocol: TCP
port: 53
- protocol: UDP
port: 53
Это разрешает весь трафик из пространства имен, где вы создаете сетевую политику, к модулям, помеченным k8s-app: kube-dns
в пространстве имен kube-system
через порт 53 (TCP и UDP).
person
whites11
schedule
06.07.2021
@ Whites11- Мне требуется контроль выхода на основе пространства имен, а не портов tcp/udp. Просто разрешите исходящие вызовы для NS-A и запретите/заблокируйте исходящие вызовы для NS-B и NS-C. Также я не хочу прерывать что-либо в вызовах Ingress.
- person solveit; 06.07.2021