...
1
16
17 package apiserver
18
19 import (
20 "net/url"
21
22 "k8s.io/apiserver/pkg/util/proxy"
23 listersv1 "k8s.io/client-go/listers/core/v1"
24 )
25
26
27 type ServiceResolver interface {
28 ResolveEndpoint(namespace, name string, port int32) (*url.URL, error)
29 }
30
31
32
33 func NewEndpointServiceResolver(services listersv1.ServiceLister, endpoints listersv1.EndpointsLister) ServiceResolver {
34 return &aggregatorEndpointRouting{
35 services: services,
36 endpoints: endpoints,
37 }
38 }
39
40 type aggregatorEndpointRouting struct {
41 services listersv1.ServiceLister
42 endpoints listersv1.EndpointsLister
43 }
44
45 func (r *aggregatorEndpointRouting) ResolveEndpoint(namespace, name string, port int32) (*url.URL, error) {
46 return proxy.ResolveEndpoint(r.services, r.endpoints, namespace, name, port)
47 }
48
49
50
51 func NewClusterIPServiceResolver(services listersv1.ServiceLister) ServiceResolver {
52 return &aggregatorClusterRouting{
53 services: services,
54 }
55 }
56
57 type aggregatorClusterRouting struct {
58 services listersv1.ServiceLister
59 }
60
61 func (r *aggregatorClusterRouting) ResolveEndpoint(namespace, name string, port int32) (*url.URL, error) {
62 return proxy.ResolveCluster(r.services, namespace, name, port)
63 }
64
65
66
67 func NewLoopbackServiceResolver(delegate ServiceResolver, host *url.URL) ServiceResolver {
68 return &loopbackResolver{
69 delegate: delegate,
70 host: host,
71 }
72 }
73
74 type loopbackResolver struct {
75 delegate ServiceResolver
76 host *url.URL
77 }
78
79 func (r *loopbackResolver) ResolveEndpoint(namespace, name string, port int32) (*url.URL, error) {
80 if namespace == "default" && name == "kubernetes" && port == 443 {
81 return r.host, nil
82 }
83 return r.delegate.ResolveEndpoint(namespace, name, port)
84 }
85
View as plain text