Когда есть много внешних виртуальных машин, доступных только через брандмауэр, и в кластере есть несколько пространств имен, каждое из которых имеет свой собственный набор внешних виртуальных машин, вы получаете множество ServiceEntries, которые, в свою очередь, вызывают множество DNS-запросов. за
$host.$ns.svc.cluster.local
$host.svc.cluster.local
$host.cluster.local
где $host, например: vm-1.vm-cluster.example.com, скажем, с 10 пространствами имен и 100 модулями в каждом пространстве имен, это довольно много DNS-запросов, на все из которых отвечает NXDOMAIN, поэтому локальный DNS-кэш прокси-сервера istio не работает. Это может привести к ситуации перегрузки модулей coreDNS (размер памяти, включая буферы, увеличивается, что приводит к тому, что модуль DNS переходит в состояние OOM).
Мой вопрос: как я могу предотвратить эти запросы? Решения, которые я придумал, следующие:
Замена $host полным доменным именем, которое включает точку в конце, не работает, поскольку сертификаты X.509 содержат имя хоста без точки в конце.
Измените конфигурацию DNS каждого пода и установите ndots на что-то вроде 3. Но это звучит как кошмар обслуживания.
Я хотел бы решить эту проблему с помощью умной комбинации определений ServiceEntry, VirtualService и Gateway.
K8s версии 1.19 (версия vmware) Istio версии 1.9 (также версия vmware)