grpc/grpc-node

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".).

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 👍

Fixed in #2776.