Ограничение вызова Kubernetes Egress пространством имен

У меня есть приложение, работающее в K3s, и я хочу реализовать сетевую политику только на основе пространства имен.

Предположим, что в настоящее время у меня есть три пространства имен A, B и C. Я хочу разрешить исходящий вызов (внешний вызов в Интернет из модуля) для namespace-A, а оставшиеся namespace[B & C] исходящие вызовы должны быть заблокированы/отклонены.

Возможно ли это в сетевой политике Kubernetes (а не в calico или cilium)?




Ответы (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
comment
@ Whites11- Мне требуется контроль выхода на основе пространства имен, а не портов tcp/udp. Просто разрешите исходящие вызовы для NS-A и запретите/заблокируйте исходящие вызовы для NS-B и NS-C. Также я не хочу прерывать что-либо в вызовах Ingress. - person solveit; 06.07.2021