Сетевая политика, запрещающая обмен данными внутри пространства имен - PullRequest
0 голосов
/ 09 июля 2020

У меня проблемы с настройкой сетевой политики, которая мне нравится. Вот 2 модуля в одном пространстве имен

k get po --show-labels
NAME                         READY   STATUS    RESTARTS   AGE   LABELS
nfs-server-ccb8d5ff6-7rtr4   1/1     Running   0          22h   role=nfs-server
nginx-jpm-549b69bf68-x5hd7   1/1     Running   0          21h   app=nginx-jpm

И я ограничиваю трафик c модулем nfs-server, используя следующую сетевую политику spe c:

spec:
  podSelector:
    matchLabels:
      role: nfs-server
  policyTypes:
  - Ingress
  - Egress
  ingress:
  # Allow inbound from nginx-jpm on all ports
  - from:
    - podSelector:
        matchLabels:
          app: nginx-jpm
  egress:
  # Allow outbound DNS traffic inside the cluster (kube-system namespace is not labelled)
  - to:
    - namespaceSelector: {}
    ports:
    - protocol: "UDP"
      port: 53

Я выполняю c в модуле nginx и не могу подключиться к модулю nfs-server

root@nginx-jpm-549b69bf68-x5hd7:/# telnet nfs-server.jenkinsrepo.svc.cluster.local 111
Trying 172.22.117.55...
If I delete the network policy, it works then
root@nginx-jpm-549b69bf68-x5hd7:/# telnet nfs-server.jenkinsrepo.svc.cluster.local 111
Trying 172.22.117.55...
Connected to nfs-server.jenkinsrepo.svc.cluster.local.
Escape character is '^]'.

Что-то я пропустил в своей сетевой политике? В пространстве имен нет другой сетевой политики.

Ответы [ 2 ]

1 голос
/ 09 июля 2020

Поскольку у вас есть podSelector, который выбирает модули с меткой role: nfs-server, правило выхода применяется только к этим модулям, и, следовательно, выход из модуля nginx блокируется. Вероятно, вам следует создать отдельную сетевую политику для исходящего трафика только для DNS кластера, которая применяется ко всем модулям.

0 голосов
/ 03 августа 2020

Ваше исходящее правило транслируется как «применить эти правила к трафику c, где пространство имен не помечено« И », порт 53 UDP, его« И »правил. Несмотря на то, что исходящий трафик DNS c может работать, весь другой исходящий трафик c из всех модулей по-прежнему заблокирован, что может быть причиной.

если вы попробуете следующее, это разрешит исходящий трафик c если: (у целевого модуля есть пространство имен, которое не помечено) ИЛИ ((порт 53 UDP) ИЛИ (порт 53 TCP))

egress:
   - to:
     - namespaceSelector: {}
   - ports:                  # 2nd egress rule
     - port: 53                # allow DNS UDP
       protocol: UDP
     - port: 53                # allow DNS TCP
       protocol: TCP

    

ссылка: https://docs.projectcalico.org/security/tutorials/kubernetes-policy-advanced

...