Aracılığıyla paylaş


YARP Genişletilebilirlik Hedef Çözümleyicileri

Giriş

YARP, yapılandırılmış hedef adres kümesini genişletmek için bir hedef çözümleyici kullanır. Hedef çözümleyici, hizmet bulma sistemleriyle bir tümleştirme noktası olarak kullanılabilir.

Yapı

IDestinationResolver, bir ResolveDestinationsAsync(IReadOnlyDictionary<string, DestinationConfig> destinations, CancellationToken cancellationToken) örneği döndüren tek bir yöntem 'ye sahiptir. ResolvedDestinationCollection, DestinationConfig örneklerinin yanı sıra bu bilgilerin güncel olmadığını ve yeniden yüklenmesi gerektiğini proxy'ye bildirmeye yönelik bir IChangeToken sahiptir ve bu da ResolveDestinationsAsync yeniden çağrılmasına neden olur.

DestinationConfig

DestinationConfig, ara sunucunun bu hedefle iletişim kurarken kullanması gereken varsayılan Host üst bilgi değerini belirtmek için kullanılabilecek bir Host özelliği vardır. Bu, IDestinationResolver'ın, örneğin SNI veya konak tabanlı yönlendirmenin başarısız olmasına neden olmadan, hedefleri bir IP adresi koleksiyonuna çözümlemesine olanak tanır.

Yaşam Döngüsü

Başlangıç

IDestinationResolver, DI kapsayıcısında tekil olarak kaydedilmelidir. Başlangıçta, proxy bu örneği çözecek ve çözümlenen ResolveDestinationsAsync(...) den alınan yapılandırılmış hedeflerle IProxyConfigProviders çağıracaktır. Bu ilk çağrıda sağlayıcı aşağıdakileri seçebilir:

  • Sağlayıcı herhangi bir nedenle geçerli bir ara sunucu yapılandırması oluşturamıyorsa özel durum oluşturma. Bu, uygulamanın başlatılmasını engeller.
  • Hedefleri eşzamansız olarak çözümleyin. Bu, çözümlenen hedefler kullanılabilir olana kadar uygulamanın başlatılmasını durdurur.
  • Alternatif olarak, arka planda hedefleri çözümlerken boş bir ResolvedDestinationCollection örneği döndürmeyi de seçebilir. Yapılandırma kullanılabilir olduğunda sağlayıcının IChangeToken tetiklemesi gerekir.

Atomiklik

Proxy'ye sağlanan hedef nesneleri ve koleksiyonları salt okunur olmalı ve GetConfig()aracılığıyla ara sunucuya teslim edildikten sonra değiştirilmemelidir.

Yeni -den yükle

IChangeToken ActiveChangeCallbacksdestekliyorsa, ara sunucu ilk hedef kümesini işledikten sonra bu belirteçle bir geri çağırma kaydeder. Sağlayıcı geri çağırmaları desteklemiyorsa, her 5 dakikada bir HasChanged, IProxyConfig değişiklik belirteçlerinin yanı sıra yoklanır.

Sağlayıcı ara sunucuya yeni bir hedef kümesi sağlamak istediğinde şu şekilde olmalıdır:

  • Arka planda bu hedefleri çözümleyin.
    • ResolvedDestinationCollection sabit olduğundan, yeni veriler için yeni örneklerin oluşturulması gerekir.
    • Değişmeyen hedeflere yönelik nesneler yeniden kullanılabilir veya yeni örnekler oluşturulabilir.
  • Önceki IChangeToken çağrısından döndürülen ResolveDestinationsAsync'ı geçersiz kılın.

Yeni hedefler uygulandıktan sonra, ara sunucu yeni IChangeTokenile bir geri çağırma kaydeder. Birbirini izleyen birden fazla yeniden yükleme sinyali varsa, ara sunucu bazılarını atlayabilir ve hazır olduğunda hedefleri çözümleyebilir.

DNS Hedef Çözümleyicisi

YARP, her ana bilgisayar adını DNS kullanarak bir veya daha fazla IP adresine çözümleyerek, çözümlenen her IP için bir hedef oluşturarak yapılandırılmış hedef kümesini genişleten bir IDestinationResolver uygulaması içerir. DNS hedef çözümleyicisi, IReverseProxyBuilder.AddDnsDestinationResolver(Action<DnsDestinationResolverOptions>) yöntemi kullanılarak ters proxy'nize eklenebilir. Yöntem, çözümleyicinin seçeneklerini yapılandırmak amacıyla isteğe bağlı bir temsilciyi kabul eder, DnsDestinationResolverOptions.

Örnek

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

Konfigürasyon

DnsDestinationResolverOptions DNS hedef çözümleyicisinin seçenekleri aşağıdaki özelliklere sahiptir:

Yenileme Süresi

Çözümlenen bir adın yenilenmesini isteme arasındaki süre. Bu varsayılan olarak 5 dakikadır.

Adres Ailesi

İsteğe bağlı olarak, çözümlenen adresleri IPv4 veya IPv6 adresleriyle kısıtlamak için System.Net.Sockets.AddressFamily değerini sırasıyla AddressFamily.InterNetwork veya AddressFamily.InterNetworkV6 olarak belirtin. nullvarsayılan değeri çözümleyiciye sonuçların adres ailesini kısıtlamamasını ve döndürülen tüm adresleri kabul etme özelliğini kullanmasını sağlar.