mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-07-27 05:27:21 +00:00
configure the ReadIdleTimeout and PingTimeout of the h2 transport
This commit is contained in:
parent
f98d3842c2
commit
8ee10ce6aa
@ -33,6 +33,7 @@ import (
|
|||||||
"regexp"
|
"regexp"
|
||||||
"strconv"
|
"strconv"
|
||||||
"strings"
|
"strings"
|
||||||
|
"time"
|
||||||
"unicode"
|
"unicode"
|
||||||
"unicode/utf8"
|
"unicode/utf8"
|
||||||
|
|
||||||
@ -132,13 +133,31 @@ func SetTransportDefaults(t *http.Transport) *http.Transport {
|
|||||||
if s := os.Getenv("DISABLE_HTTP2"); len(s) > 0 {
|
if s := os.Getenv("DISABLE_HTTP2"); len(s) > 0 {
|
||||||
klog.Infof("HTTP2 has been explicitly disabled")
|
klog.Infof("HTTP2 has been explicitly disabled")
|
||||||
} else if allowsHTTP2(t) {
|
} else if allowsHTTP2(t) {
|
||||||
if err := http2.ConfigureTransport(t); err != nil {
|
if err := configureHTTP2Transport(t); err != nil {
|
||||||
klog.Warningf("Transport failed http2 configuration: %v", err)
|
klog.Warningf("Transport failed http2 configuration: %v", err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return t
|
return t
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func configureHTTP2Transport(t *http.Transport) error {
|
||||||
|
t2, err := http2.ConfigureTransports(t)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
// The following enables the HTTP/2 connection health check added in
|
||||||
|
// https://github.com/golang/net/pull/55. The health check detects and
|
||||||
|
// closes broken transport layer connections. Without the health check,
|
||||||
|
// a broken connection can linger too long, e.g., a broken TCP
|
||||||
|
// connection will be closed by the Linux kernel after 13 to 30 minutes
|
||||||
|
// by default, which caused
|
||||||
|
// https://github.com/kubernetes/client-go/issues/374 and
|
||||||
|
// https://github.com/kubernetes/kubernetes/issues/87615.
|
||||||
|
t2.ReadIdleTimeout = 30 * time.Second
|
||||||
|
t2.PingTimeout = 15 * time.Second
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
func allowsHTTP2(t *http.Transport) bool {
|
func allowsHTTP2(t *http.Transport) bool {
|
||||||
if t.TLSClientConfig == nil || len(t.TLSClientConfig.NextProtos) == 0 {
|
if t.TLSClientConfig == nil || len(t.TLSClientConfig.NextProtos) == 0 {
|
||||||
// the transport expressed no NextProto preference, allow
|
// the transport expressed no NextProto preference, allow
|
||||||
|
Loading…
Reference in New Issue
Block a user