-
Notifications
You must be signed in to change notification settings - Fork 17.8k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
net: add configuration knob to force TCP-only DNS requests in the pure Go resolver on unix #29358
Comments
Change https://golang.org/cl/155378 mentions this issue: |
An alternative implementation would be to look for |
Change https://golang.org/cl/156366 mentions this issue: |
Accepted (proposal 1) for Go 1.13. This is easy and simply implements the existing resolv.conf files more faithfully. |
Context
There is a DNS resolution bug in Kubernetes (UDP response packets get dropped by conntrack, causing timeouts in DNS queries) : kubernetes/kubernetes#56903
A work-around is to configure the linux resolver to use TCP (e.g. using the
use-vc
option inresolv.conf
).This workaround works with the cgo resolver on glibc-based platforms, but not on musl-based plaforms (e.g. Alpine).
This workaround cannot be used with the pure Go resolver, as it always tries UDP before switching to TCP.
Proposal 1
A solution would be to look for the use-vc option in resolv.conf, and switch to TCP when found.
=> https://go-review.googlesource.com/c/go/+/156366
Proposal 2
Another solution would be to be able to configure the Go resolver to use TCP, either using the GODEBUG env var (e.g.
GODEBUG=netdns=go+tcp
) or using a net.Resolver flag (e.g.PreferTCP
).in net/dnsclient_unix.go
=> https://go-review.googlesource.com/c/go/+/155378
The text was updated successfully, but these errors were encountered: