Ensure service routing resolves kubernetes.default.svc correctly

This commit is contained in:
Jordan Liggitt 2018-04-16 09:27:41 -04:00
parent 1ee2ac07c1
commit fe23fa3eee
No known key found for this signature in database
GPG Key ID: 39928704103C7229
2 changed files with 27 additions and 0 deletions

View File

@ -507,6 +507,13 @@ func BuildGenericConfig(
versionedInformers.Core().V1().Services().Lister(),
)
}
// resolve kubernetes.default.svc locally
localHost, err := url.Parse(genericConfig.LoopbackClientConfig.Host)
if err != nil {
lastErr = err
return
}
serviceResolver = aggregatorapiserver.NewLoopbackServiceResolver(serviceResolver, localHost)
genericConfig.Authentication.Authenticator, genericConfig.OpenAPIConfig.SecurityDefinitions, err = BuildAuthenticator(s, clientgoExternalClient, sharedInformers)
if err != nil {

View File

@ -61,3 +61,23 @@ type aggregatorClusterRouting struct {
func (r *aggregatorClusterRouting) ResolveEndpoint(namespace, name string) (*url.URL, error) {
return proxy.ResolveCluster(r.services, namespace, name)
}
// NewLoopbackServiceResolver returns a ServiceResolver that routes the kubernetes/default service to loopback.
func NewLoopbackServiceResolver(delegate ServiceResolver, host *url.URL) ServiceResolver {
return &loopbackResolver{
delegate: delegate,
host: host,
}
}
type loopbackResolver struct {
delegate ServiceResolver
host *url.URL
}
func (r *loopbackResolver) ResolveEndpoint(namespace, name string) (*url.URL, error) {
if namespace == "default" && name == "kubernetes" {
return r.host, nil
}
return r.delegate.ResolveEndpoint(namespace, name)
}