YARP Docsv2.3
Документация/Расширяемость/Распознаватели узлов назначения

Распознаватели узлов назначения

YARP использует распознаватель узлов назначения, чтобы расширить набор настроенных адресов узлов назначения.

Расширяемость YARP: распознаватели узлов назначения

Введение

YARP использует распознаватель узлов назначения, чтобы расширить набор настроенных адресов узлов назначения. Распознаватель узлов назначения можно использовать как точку интеграции с системами service discovery.

Структура

У IDestinationResolver есть единственный метод

ResolveDestinationsAsync(IReadOnlyDictionary<string, DestinationConfig> destinations,

CancellationToken cancellationToken) — этот метод должен возвращать экземпляр ResolvedDestinationCollection. ResolvedDestinationCollection содержит коллекцию экземпляров DestinationConfig, а также IChangeToken, уведомляющий прокси о том, что эта информация устарела и должна быть перезагружена, что приведёт к повторному вызову ResolveDestinationsAsync.

DestinationConfig

У DestinationConfig есть свойство Host, которое можно использовать, чтобы задать значение заголовка Host по умолчанию, применяемое прокси при обращении к этому узлу назначения. Это позволяет IDestinationResolver, например, разрешать узлы назначения в коллекцию IP-адресов, не нарушая при этом работу SNI или маршрутизации на основе host.

Жизненный цикл

Запуск

IDestinationResolver следует регистрировать в контейнере DI как singleton. При запуске прокси разрешит этот экземпляр и вызовет ResolveDestinationsAsync(...) с настроенными узлами назначения, полученными из разрешённых IProxyConfigProviders . При этом первом вызове поставщик может:

Выбросить исключение, если поставщик по какой-либо причине не может сформировать корректную конфигурацию прокси. Это предотвратит запуск приложения. Асинхронно разрешить узлы назначения. Это остановит запуск приложения до тех пор, пока разрешённые узлы назначения не станут доступны.

Либо он может вернуть пустой экземпляр ResolvedDestinationCollection, пока

разрешает узлы назначения в фоновом режиме. Поставщику потребуется активировать

IChangeToken, когда конфигурация станет доступна.

Атомарность

Объекты и коллекции узлов назначения, передаваемые прокси, должны быть доступны только для чтения и не изменяться после того, как они были переданы прокси через GetConfig() .

Обновление

Если IChangeToken поддерживает ActiveChangeCallbacks , после обработки начального набора узлов назначения прокси зарегистрирует обратный вызов для этого токена. Если поставщик не поддерживает обратные вызовы, HasChanged будет опрашиваться вместе с токенами изменений IProxyConfig каждые 5 минут.

Когда поставщик хочет предоставить прокси новый набор узлов назначения, ему следует:

Разрешить эти узлы назначения в фоновом режиме. ResolvedDestinationCollection неизменяем, поэтому для любых новых данных необходимо создавать новые экземпляры. Объекты для неизменившихся узлов назначения можно использовать повторно либо создавать новые экземпляры.

Признать недействительным IChangeToken, возвращённый предыдущим вызовом ResolveDestinationsAsync.

После применения новых узлов назначения прокси зарегистрирует обратный вызов для нового IChangeToken . Обратите внимание: если несколько обновлений сигнализируются в быстрой последовательности, прокси может пропустить некоторые из них и разрешить узлы назначения, как только будет готов.

DNS-распознаватель узлов назначения

YARP включает реализацию IDestinationResolver, которая расширяет набор настроенных узлов назначения, разрешая каждое имя узла в один или несколько IP-адресов с помощью DNS и создавая узел назначения для каждого разрешённого IP. DNS-распознаватель узлов назначения можно добавить в реверс-прокси с помощью

IReverseProxyBuilder.AddDnsDestinationResolver(Action)

метода. Метод принимает необязательный делегат для настройки параметров распознавателя — DnsDestinationResolverOptions.

Пример

C#// Add the DNS destination resolver, restricting results to IPv4 addresses
reverseProxyBuilder.AddDnsDestinationResolver(o => o.AddressFamily =
AddressFamily.InterNetwork);

Конфигурация

Параметры DNS-распознавателя узлов назначения, DnsDestinationResolverOptions, включают следующие свойства:

RefreshPeriod

Период между запросами обновления разрешённого имени. Значение по умолчанию — 5 минут.

AddressFamily

При необходимости укажите значение System.Net.Sockets.AddressFamily — AddressFamily.InterNetwork или AddressFamily.InterNetworkV6, — чтобы ограничить разрешение адресами IPv4 или IPv6 соответственно. Значение по умолчанию, null , указывает распознавателю не ограничивать семейство адресов результатов и принимать все возвращаемые адреса.

Примечание

Автор подготовил эту статью с помощью ИИ. Подробнее

Адаптировано из Microsoft Learn , лицензия CC BY 4.0 .