mirror of
https://git.vectorsigma.ru/public/k3s.git
synced 2026-07-29 07:19:33 +00:00
Replace DefaultProxyDialerFn dialer injection with EgressSelector support
Signed-off-by: Brad Davidson <brad.davidson@rancher.com>
This commit is contained in:
committed by
Brad Davidson
parent
e763fadbba
commit
ce5b9347c9
@@ -50,7 +50,7 @@ func (c *Cluster) newListener(ctx context.Context) (net.Listener, http.Handler,
|
||||
return nil, nil, err
|
||||
}
|
||||
storage := tlsStorage(ctx, c.config.DataDir, c.config.Runtime)
|
||||
return dynamiclistener.NewListener(tcp, storage, cert, key, dynamiclistener.Config{
|
||||
return wrapHandler(dynamiclistener.NewListener(tcp, storage, cert, key, dynamiclistener.Config{
|
||||
ExpirationDaysCheck: config.CertificateRenewDays,
|
||||
Organization: []string{version.Program},
|
||||
SANs: append(c.config.SANs, "kubernetes", "kubernetes.default", "kubernetes.default.svc", "kubernetes.default.svc."+c.config.ClusterDomain),
|
||||
@@ -70,7 +70,7 @@ func (c *Cluster) newListener(ctx context.Context) (net.Listener, http.Handler,
|
||||
}
|
||||
return false
|
||||
},
|
||||
})
|
||||
}))
|
||||
}
|
||||
|
||||
// initClusterAndHTTPS sets up the dynamic tls listener, request router,
|
||||
@@ -131,3 +131,18 @@ func tlsStorage(ctx context.Context, dataDir string, runtime *config.ControlRunt
|
||||
return runtime.Core
|
||||
}, metav1.NamespaceSystem, version.Program+"-serving", cache)
|
||||
}
|
||||
|
||||
// wrapHandler wraps the dynamiclistener request handler, adding a User-Agent value to
|
||||
// CONNECT requests that will prevent DynamicListener from adding the request's Host
|
||||
// header to the SAN list. CONNECT requests set the Host header to the target of the
|
||||
// proxy connection, so it is not correct to add this value to the certificate. It would
|
||||
// be nice if we could do this with with the FilterCN callback, but unfortunately that
|
||||
// callback does not offer access to the request that triggered the change.
|
||||
func wrapHandler(listener net.Listener, handler http.Handler, err error) (net.Listener, http.Handler, error) {
|
||||
return listener, http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
||||
if r.Method == http.MethodConnect {
|
||||
r.Header.Add("User-Agent", "mozilla")
|
||||
}
|
||||
handler.ServeHTTP(w, r)
|
||||
}), err
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user