Преобразуватели на дестинации
YARP използва преобразувател на дестинации, за да разшири набора от конфигурирани адреси на дестинации. Преобразувателят
Разширяемост на YARP: преобразуватели на дестинации
Въведение
YARP използва преобразувател на дестинации (destination resolver), за да разшири набора от конфигурирани адреси на дестинации. Преобразувателят на дестинации може да се използва като точка за интеграция със системи за откриване на услуги (service discovery).
Структура
IDestinationResolver има един-единствен метод
ResolveDestinationsAsync(IReadOnlyDictionary<string, DestinationConfig> destinations,
CancellationToken cancellationToken), който трябва да връща инстанция на ResolvedDestinationCollection. ResolvedDestinationCollection съдържа колекция от инстанции на DestinationConfig, както и IChangeToken, за да уведомява прокси сървъра, когато тази информация е остаряла и трябва да бъде презаредена, което ще доведе до повторно извикване на ResolveDestinationsAsync.
DestinationConfig
DestinationConfig има свойство Host, което може да се използва за задаване на стойността по подразбиране на заглавната част Host, която прокси сървърът трябва да използва при комуникация с тази дестинация. Това позволява на IDestinationResolver да преобразува дестинациите в колекция от IP адреси, например, без да предизвиква срив на SNI или базираната на хост маршрутизация.
Жизнен цикъл
Стартиране
IDestinationResolver трябва да бъде регистриран в DI контейнера като singleton. При стартиране прокси сървърът ще разреши тази инстанция и ще извика ResolveDestinationsAsync(...) с конфигурираните дестинации, извлечени от разрешените IProxyConfigProviders . При това първо извикване доставчикът може да избере да:
Хвърли изключение, ако доставчикът по някаква причина не може да произведе валидна прокси конфигурация. Това ще попречи на стартирането на приложението. Разреши дестинациите асинхронно. Това ще спре стартирането на приложението, докато не станат налични разрешените дестинации.
Или може да избере да върне празна инстанция на ResolvedDestinationCollection, докато
разрешава дестинациите във фонов режим. Доставчикът ще трябва да задейства
IChangeToken, когато конфигурацията стане налична.
Атомарност
Обектите и колекциите с дестинации, предоставени на прокси сървъра, трябва да бъдат само за четене и да не се променят, след като са предадени на прокси сървъра чрез GetConfig() .
Презареждане
Ако IChangeToken поддържа ActiveChangeCallbacks , щом прокси сървърът обработи първоначалния набор от дестинации, той ще регистрира обратно извикване с този токен. Ако доставчикът не поддържа обратни извиквания, тогава HasChanged ще бъде проверяван периодично заедно с токените за промяна на IProxyConfig, на всеки 5 минути.
Когато доставчикът иска да предостави нов набор от дестинации на прокси сървъра, той трябва да:
Разреши тези дестинации във фонов режим. ResolvedDestinationCollection е неизменяем (immutable), затова за всякакви нови данни трябва да се създават нови инстанции. Обектите за непроменените дестинации могат да бъдат преизползвани или да се създадат нови инстанции.
Обезсили 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 , указва на преобразувателя да не ограничава семейството на адресите на резултатите и да приема всички върнати адреси.
Тази статия е създадена от автора с помощта на AI. Научете повече