Ограничение исходящего вызова 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).