Nguon: Microsoft Learn · .NET 8.0

YARP Extensibility - Destination Resolvers (Bộ giải quyết đích)

Nguồn: YARP Extensibility Destination Resolvers

Giới thiệu

YARP sử dụng một destination resolver (bộ giải quyết đích) để mở rộng tập hợp các địa chỉ destination đã được cấu hình. Destination resolver có thể được sử dụng như một điểm tích hợp với các hệ thống service discovery (khám phá dịch vụ).

Cấu trúc

IDestinationResolver có một phương thức duy nhất ResolveDestinationsAsync(IReadOnlyDictionary<string, DestinationConfig> destinations, CancellationToken cancellationToken) nên trả về một instance của ResolvedDestinationCollection. ResolvedDestinationCollection có một tập hợp các instance DestinationConfig, cũng như một IChangeToken để thông báo cho proxy khi thông tin này đã lỗi thời và cần được tải lại, điều này sẽ khiến ResolveDestinationsAsync được gọi lại.

DestinationConfig

DestinationConfig có thuộc tính Host có thể được sử dụng để chỉ định giá trị header Host mặc định mà proxy nên sử dụng khi giao tiếp với destination đó. Điều này cho phép IDestinationResolver giải quyết các destination thành một tập hợp các địa chỉ IP, chẳng hạn, mà không gây ra lỗi cho SNI hoặc host-based routing.

Vòng đời

Khởi động

IDestinationResolver nên được đăng ký trong DI container dưới dạng singleton (đơn lẻ). Khi khởi động, proxy sẽ resolve instance này và gọi ResolveDestinationsAsync(...) với các destination đã được cấu hình lấy từ các IProxyConfigProviders đã được resolve. Trong lần gọi đầu tiên này, provider có thể chọn:

Tính nguyên tử (Atomicity)

Các đối tượng và collection destination được cung cấp cho proxy nên là read-only và không được sửa đổi sau khi chúng đã được bàn giao cho proxy thông qua GetConfig().

Tải lại

Nếu IChangeToken hỗ trợ ActiveChangeCallbacks, sau khi proxy đã xử lý tập hợp destinations ban đầu, nó sẽ đăng ký một callback với token này. Nếu provider không hỗ trợ callbacks thì HasChanged sẽ được polling cùng với IProxyConfig change tokens, mỗi 5 phút một lần.

Khi provider muốn cung cấp một tập hợp destinations mới cho proxy, nó nên:

Sau khi các destinations mới đã được áp dụng, proxy sẽ đăng ký một callback với IChangeToken mới. Lưu ý nếu có nhiều lần tải lại được báo hiệu trong khoảng thời gian ngắn liên tiếp, proxy có thể bỏ qua một số và resolve destinations ngay khi sẵn sàng.

DNS Destination Resolver

YARP bao gồm một triển khai IDestinationResolver mở rộng tập hợp các destinations đã cấu hình bằng cách giải quyết mỗi hostname thành một hoặc nhiều địa chỉ IP bằng DNS, tạo một destination cho mỗi IP được resolve. DNS destination resolver có thể được thêm vào reverse proxy của bạn bằng phương thức IReverseProxyBuilder.AddDnsDestinationResolver(Action<DnsDestinationResolverOptions>). Phương thức này chấp nhận một delegate tùy chọn để cấu hình các tùy chọn của resolver, DnsDestinationResolverOptions.

Ví dụ

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

Cấu hình

Các tùy chọn của DNS destination resolver, DnsDestinationResolverOptions, có các thuộc tính sau:

RefreshPeriod

Khoảng thời gian giữa các lần yêu cầu làm mới tên đã được resolve. Mặc định là 5 phút.

AddressFamily

Tùy chọn, chỉ định giá trị System.Net.Sockets.AddressFamilyAddressFamily.InterNetwork hoặc AddressFamily.InterNetworkV6 để giới hạn kết quả resolve chỉ theo địa chỉ IPv4 hoặc IPv6. Giá trị mặc định, null, hướng dẫn resolver không giới hạn address family của kết quả và chấp nhận tất cả các địa chỉ được trả về.