#microservices #istio #envoyproxy
Вопрос:
Как это работает с посланником?
Допустим, я настроил восходящий кластер следующим образом:
clusters:
-
name: "service_a_cluster"
connect_timeout: "0.25s"
type: "strict_dns"
lb_policy: "ROUND_ROBIN"
hosts:
-
socket_address:
address: "service_a"
port_value: 8786
Как мой экземпляр посланника (ClusterManager?) собираетесь решать service_a
?
Кому он будет отправлять DNS — запросы?
Ответ №1:
У посланника есть внутренние механизмы для принятия решений, и все они доступны через конфигурацию. Похоже, что вы используете API-интерфейсы Envoy v2, поэтому соответствующая конфигурация высокого уровня находится в объекте кластера здесь.
Если вы прочтете это, вы заметите hosts
, что поле ссылается на type
поле. В этом type
поле указано, как обрабатывать обнаружение/разрешение. Полная информация об этом механизме находится здесь.
Комментарии:
1. Спасибо за ссылку. Я проверил это, но никаких примеров, очень кратких, просто упоминающих политики DNS. У вас есть какие-нибудь примеры?
2.О, конечно; значения, которые вы можете использовать, — это просто строковые литералы с заглавной буквы этих значений:
STATIC
,STRICT_DNS
,LOGICAL_DNS
,EDS
илиORIGINAL_DST
другая ссылка3. Я хотел спросить, как разрешать DNS-запросы? С кем поговорить? Строгая DNS При использовании строгого обнаружения службы DNS Envoy будет непрерывно и асинхронно разрешать указанные целевые объекты DNS . Каждый возвращенный IP-адрес в результате DNS будет считаться явным хостом в вышестоящем кластере. Это означает, что если запрос вернет три IP-адреса , Envoy будет предполагать, что в кластере три хоста, и все три должны быть сбалансированы по нагрузке. В документах ничего не говорится о том, как это сделать.
Ответ №2:
В установке kubernetes по умолчанию встроены DNS и обнаружение служб. Вы можете найти соответствующие модули в kube-system
пространстве имен.
$ kubectl get pods -n kube-system
[...]
kube-dns-6c7b8dc9f9-ngdq2 4/4 Running 0 25h
kube-dns-6c7b8dc9f9-pctnl 4/4 Running 0 26h
kube-dns-autoscaler-844c9d9448-sswll 1/1 Running 0 27h
[...]
До версии 1.12 kubernetes использовался kube-dns
для разрешения DNS и обнаружения служб (отсюда и название модуля). В настоящее время он использует CoreDNS.
Примечание об именовании:
Примечание
kube-dns
. В этом поле указана службаmetadata.name
CoreDNS.
Это делается для обеспечения большей совместимости с рабочими нагрузками, которые полагались на устаревшее имя службы kube-dns для разрешения внутренних адресов кластера. Использование службы с именем kube-dns абстрагирует детали реализации того, какой поставщик DNS работает под этим общим именем.
Таким образом, все DNS-запросы на самом деле отправляются в эти модули и решаются ими.
Когда дело доходит до Истио, все немного сложнее. Вышеизложенное работает для служб kubernetes по умолчанию ,любые пользовательские ServiceEntry
функции (например, добавленные Istio) не будут распознаны.
В дополнение к захвату трафика приложений Istio может также захватывать DNS-запросы для повышения производительности и удобства использования вашей сети. При проксировании DNS все DNS-запросы от приложения будут перенаправлены в боковую панель, в которой хранится локальное сопоставление доменных имен с IP-адресами. Если запрос может быть обработан боковой тележкой, он будет напрямую возвращать ответ приложению, избегая обратной связи с вышестоящим DNS-сервером. В противном случае запрос пересылается вверх по потоку в соответствии со стандартной
/etc/resolv.conf
конфигурацией DNS.В то время как Kubernetes предоставляет разрешение DNS для Kubernetes
Service
s из коробки, любые пользовательскиеServiceEntry
s не будут распознаны. С помощью этой функцииerviceEntry
адреса могут быть разрешены без необходимости пользовательской настройки DNS-сервера. Для KubernetesService
s ответ DNS будет таким же, но с уменьшенной нагрузкойkube-dns
и повышенной производительностью.Эта функция также доступна для служб, работающих за пределами Kubernetes. Это означает, что все внутренние службы могут быть разрешены без неуклюжих обходных путей для предоставления записей DNS Kubernetes за пределами кластера.
Источник
Комментарии:
1. Как насчет ванильного посланника? Поблизости нет к8.
2. В мой ответ я добавил дополнительную информацию о том, как разрешение DNS работает с Istio. Помните — Istio использует посланника для проксирования, и запуск Istio без K8s, мягко говоря, нецелесообразен, поэтому без K8s посланника не существует.
3. Я понимаю, как это работает с k8. Ценю ваш ответ, но мне любопытно узнать о развертываниях посланника barebone, поскольку посланник поддерживает обнаружение служб из коробки.
4. хорошо, тогда что вы подразумеваете под «посланником голой кости»?
5. Я хотел сказать, просто посланник, никаких к8 или Истио.