Implement authority overrides in the DNS resolver
atollena opened this issue · 7 comments
Is your feature request related to a problem? Please describe.
We have use cases where we would like to use the DNS resolver with a DNS server that is not the system's DNS server.
Describe the solution you'd like
Implement DNS server authority parsing as described in https://github.com/grpc/grpc/blob/master/doc/naming.md:
authority
indicates the DNS server to use, although this is only supported by some implementations. (In C-core, the default DNS resolver does not support this, but the c-ares based resolver supports specifying this in the form "IP:port".).
- Golang implementation
- C-core implementation (only when using
GRPC_DNS_RESOLVER=ares
) - Java: not implemented as customizing DNS server is a bit of a moving target
Describe alternatives you've considered
Do more customisation to the DNS configuration, not involving gRPC directly.
Additional context
We have workloads in javascript that run browser tests and use public DNS for most resolutions, and a custom DNS server for our internal service discovery system to report results to our internal systems.
We are likely willing to provide a patch for this, if that helps. Looking at https://github.com/grpc/grpc-node/blob/a4c2106e63064070f3b9e580b2d1c74b0a9503a4/packages/grpc-js/src/resolver-dns.ts it doesn't seem terribly complicated to add this feature.
I don't see how you would do that. The only way I can see to make requests to a different DNS server is with dns.setServers
, but that is a global setting, as opposed to affecting a single request, so it is inappropriate to use in a library.
Something like this where you create a new resolver gkampitakis#1?
I see. I didn't realize that the Resolver class had its own setServers
method. That should do it.
I am happy to send a pr for this 😄
I have created the pr with the above changes 👍