grpc / grpc-node

gRPC for Node.js
https://grpc.io
Apache License 2.0
4.45k stars 644 forks source link

Implement authority overrides in the DNS resolver #2775

Closed atollena closed 2 months ago

atollena commented 3 months ago

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.

atollena commented 3 months ago

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.

murgatroid99 commented 3 months ago

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.

gkampitakis commented 3 months ago

Something like this where you create a new resolver https://github.com/gkampitakis/grpc-node/pull/1?

murgatroid99 commented 3 months ago

I see. I didn't realize that the Resolver class had its own setServers method. That should do it.

gkampitakis commented 3 months ago

I am happy to send a pr for this 😄

gkampitakis commented 3 months ago

I have created the pr with the above changes 👍

atollena commented 2 months ago

Fixed in https://github.com/grpc/grpc-node/pull/2776.