Ограничение исходящего вызова Kubernetes с пространством имен
У меня есть приложение, работающее в K3s, и я хочу реализовать сетевую политику, основанную только на пространстве имен.
Предположим, что в настоящее время у меня есть три пространства имен A, B и C. Я хочу разрешить выход (внешний вызов в Интернет из модуля) для
namespace-A
и оставшиеся
namespace[B & C]
исходящие вызовы должны быть заблокированы / отклонены.
Возможно ли это в сетевой политике Kubernetes (а не в ситце или ресничке)?
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:
- 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).