Поиск DNS по-прежнему блокируется, даже если он авторизован

#kubernetes #flannel #project-calico #calico #kubernetes-networkpolicy

Вопрос:

Мое правило, разрешающее DNS с сетевой политикой Calico, не работает. Использование CURL с DNS по-прежнему заблокировано !

Мой вариант использования : я хочу, чтобы все внешние сети были удалены, кроме связи со службой S3. Разрешение ТОЛЬКО IP-адреса S3 работает, так как все остальное заблокировано, кроме установленного мной IP-адреса. Но использование DNS, связанного с этим IP-адресом, также блокируется, и я не знаю почему.

 apiVersion: projectcalico.org/v3
kind: NetworkPolicy
metadata:
  name: allow-egress-external
  namespace: demo
spec:
  order: 2
  selector:
    color == 'red'
  types:
    - Egress
  egress:
    - action: Allow
      protocol: UDP
      destination:
        ports:
        - 53
 

Это должно позволить любым блокам с меткой color: red взаимодействовать с DNS.

У меня также есть правило запрета, установленное следующим образом:

 apiVersion: projectcalico.org/v3
kind: NetworkPolicy
metadata:
  name: default-deny
  namespace: demo
spec:
  order: 1
  selector: all()
  types:
  - Egress
 

И, наконец, правило, позволяющее проходить определенный IP-адрес:

 apiVersion: projectcalico.org/v3
kind: NetworkPolicy
metadata:
  name: allow-egress-external
  namespace: demo
spec:
  order: 3
  selector:
    color == 'red'
  types:
    - Egress
  egress:
    - action: Allow
      destination:
        nets:
        - <some_ip>/32
 

Но когда я сворачиваю свой DNS, который должен разрешиться в «<some_ip>», <some_ip>запрос блокируется. Хотя керлинг <some_ip> напрямую работает.

Любая помощь будет признательна,
Thx


Правка 1

Например:

С политикой ВВЕРХ

  • Авторизованный IP-адрес моей целевой службы
  • Авторизованный поиск DNS
 $ curl <targeted_dns> -v
* Expire in 0 ms for 6 (transfer 0x5638bf7edfb0)
* Expire in 1 ms for 1 (transfer 0x5638bf7edfb0)
* Expire in 0 ms for 1 (transfer 0x5638bf7edfb0)
* Expire in 1 ms for 1 (transfer 0x5638bf7edfb0)
* Expire in 0 ms for 1 (transfer 0x5638bf7edfb0)
* Expire in 0 ms for 1 (transfer 0x5638bf7edfb0)
* Expire in 1 ms for 1 (transfer 0x5638bf7edfb0)
[timeout for ever]
 

<targeted_dns> должен был быть разрешен, а затем полученный IP-адрес должен был быть разрешен для прохождения, как это было разрешено вручную.

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

1. Не могли бы вы поделиться некоторыми журналами или подробностями о проблеме? От dns до прокси-сервера. Они были бы полезны.

2. @Катастрофа Я добавил раздел редактирования с выводом curl мой вариант использования вверху. Тнх

3. Здравствуйте, не могли бы вы подробнее рассказать о части связи с S3? Означает ли это, что вы используете управляемый кластер, такой как EKS, или вы создали кластер Kubernetes на AWS, или вы пытаетесь подключиться из локального местоположения. Также без каких-либо Networkpolicies он работает так, как ожидалось?

4. @DawidKruk Эй, я хотел бы, чтобы модули могли взаимодействовать с S3. Вот почему я попытался разрешить разрешение IP и dns S3 (потому что использование IP не очень дружелюбно). Кластер управляется OVH (это облачный провайдер). И да, без сетевых политик я могу использовать DNS, но у меня также есть доступ ко всему Интернету, что не в порядке.