Сетевая политика Kubernetes работает не так, как ожидалось

#nginx #kubernetes #kubernetes-networkpolicy

#nginx #kubernetes #kubernetes-сетевая политика

Вопрос:

Я довольно новичок в сетевой политике Calico. Я создал следующую сетевую политику в своем кластере:

 apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: nginxnp-po
  namespace: default
spec:
  podSelector:
    matchLabels:
      run: nginxnp
  policyTypes:
    - Ingress
  ingress:
  - from:
    - podSelector:
        matchLabels:
          acces: frontend
    ports: 
      - port: 80
  

Вот как я это прочитал: все модули, у которых есть селектор run=nginxnp , доступны только через порт 80 из каждого модуля, у которого есть селектор access=frontend .

Вот мой модуль nginx (с запущенным nginx в нем):

 $ kubectl get pods -l run=nginxnp
NAME                      READY   STATUS    RESTARTS   AGE
nginxnp-9b49f4b8d-tkz6q   1/1     Running   0          36h
  

Я создал контейнер busybox, подобный этому:

 $ kubectl run busybox --image=busybox --restart=Never --labels=access=frontend -- sleep 3600
  

Я вижу, что она соответствует селектору access=frontend :

 $ kubectl get pods -l access=frontend
NAME      READY   STATUS    RESTARTS   AGE
busybox   1/1     Running   0          6m30s
  

Однако, когда я запускаю модуль busybox и пытаюсь wget модуля nginx, соединение по-прежнему отклоняется.

Я также попытался установить исходящее правило, которое разрешает трафик наоборот, но это также ничего не дало. Как я понял, сетевая политика: когда правило не установлено, ничего не блокируется. Следовательно, когда я не устанавливаю правило выхода, выход не должен блокироваться.

Если я удалю сетевую политику, она заработает. Любые указания высоко ценятся.

Комментарии:

1. в matchLabels есть опечатка => acces: frontend это правильно?

2. Нет, конечно, это не так. TLDR: не работайте над чем-либо, если вы устали. Я не был уверен, понял ли я сетевую политику, и хотя: конечно, мое понимание должно быть неправильным…

3. Вы можете использовать хороший инструмент от Tufin, чтобы визуализировать свои сетевые политики, прежде чем применять их здесь

Ответ №1:

В шаблоне сетевой политики есть опечатка acces: frontend должно быть access: frontend

   ingress:
  - from:
    - podSelector:
        matchLabels:
          acces: frontend