Skip to content

Commit 4c3aa3f

Browse files
authored
Merge pull request kubernetes#87515 from Sh4d1/proxy_agg
Use network proxy for aggregator api
2 parents 5caeec8 + df9b4e9 commit 4c3aa3f

File tree

5 files changed

+40
-2
lines changed

5 files changed

+40
-2
lines changed

staging/src/k8s.io/kube-aggregator/pkg/apiserver/BUILD

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,7 @@ go_library(
6262
"//staging/src/k8s.io/apiserver/pkg/endpoints/request:go_default_library",
6363
"//staging/src/k8s.io/apiserver/pkg/features:go_default_library",
6464
"//staging/src/k8s.io/apiserver/pkg/server:go_default_library",
65+
"//staging/src/k8s.io/apiserver/pkg/server/egressselector:go_default_library",
6566
"//staging/src/k8s.io/apiserver/pkg/server/storage:go_default_library",
6667
"//staging/src/k8s.io/apiserver/pkg/util/feature:go_default_library",
6768
"//staging/src/k8s.io/apiserver/pkg/util/proxy:go_default_library",

staging/src/k8s.io/kube-aggregator/pkg/apiserver/apiserver.go

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ import (
2525
"k8s.io/apimachinery/pkg/runtime/schema"
2626
"k8s.io/apimachinery/pkg/util/sets"
2727
genericapiserver "k8s.io/apiserver/pkg/server"
28+
"k8s.io/apiserver/pkg/server/egressselector"
2829
serverstorage "k8s.io/apiserver/pkg/server/storage"
2930
"k8s.io/client-go/pkg/version"
3031
openapicommon "k8s.io/kube-openapi/pkg/common"
@@ -133,6 +134,10 @@ type APIAggregator struct {
133134

134135
// openAPIAggregationController downloads and merges OpenAPI specs.
135136
openAPIAggregationController *openapicontroller.AggregationController
137+
138+
// egressSelector selects the proper egress dialer to communicate with the custom apiserver
139+
// overwrites proxyTransport dialer if not nil
140+
egressSelector *egressselector.EgressSelector
136141
}
137142

138143
// Complete fills in any fields not set that are required to have valid data. It's mutating the receiver.
@@ -184,6 +189,7 @@ func (c completedConfig) NewWithDelegate(delegationTarget genericapiserver.Deleg
184189
APIRegistrationInformers: informerFactory,
185190
serviceResolver: c.ExtraConfig.ServiceResolver,
186191
openAPIConfig: openAPIConfig,
192+
egressSelector: c.GenericConfig.EgressSelector,
187193
}
188194

189195
apiGroupInfo := apiservicerest.NewRESTStorage(c.GenericConfig.MergedResourceConfig, c.GenericConfig.RESTOptionsGetter)
@@ -217,6 +223,7 @@ func (c completedConfig) NewWithDelegate(delegationTarget genericapiserver.Deleg
217223
c.ExtraConfig.ProxyClientCert,
218224
c.ExtraConfig.ProxyClientKey,
219225
s.serviceResolver,
226+
c.GenericConfig.EgressSelector,
220227
)
221228
if err != nil {
222229
return nil, err
@@ -301,6 +308,7 @@ func (s *APIAggregator) AddAPIService(apiService *v1.APIService) error {
301308
proxyClientKey: s.proxyClientKey,
302309
proxyTransport: s.proxyTransport,
303310
serviceResolver: s.serviceResolver,
311+
egressSelector: s.egressSelector,
304312
}
305313
proxyHandler.updateAPIService(apiService)
306314
if s.openAPIAggregationController != nil {

staging/src/k8s.io/kube-aggregator/pkg/apiserver/handler_proxy.go

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ import (
3333
endpointmetrics "k8s.io/apiserver/pkg/endpoints/metrics"
3434
genericapirequest "k8s.io/apiserver/pkg/endpoints/request"
3535
genericfeatures "k8s.io/apiserver/pkg/features"
36+
"k8s.io/apiserver/pkg/server/egressselector"
3637
utilfeature "k8s.io/apiserver/pkg/util/feature"
3738
restclient "k8s.io/client-go/rest"
3839
"k8s.io/client-go/transport"
@@ -63,6 +64,10 @@ type proxyHandler struct {
6364
serviceResolver ServiceResolver
6465

6566
handlingInfo atomic.Value
67+
68+
// egressSelector selects the proper egress dialer to communicate with the custom apiserver
69+
// overwrites proxyTransport dialer if not nil
70+
egressSelector *egressselector.EgressSelector
6671
}
6772

6873
type proxyHandlingInfo struct {
@@ -259,7 +264,16 @@ func (r *proxyHandler) updateAPIService(apiService *apiregistrationv1api.APIServ
259264
servicePort: *apiService.Spec.Service.Port,
260265
serviceAvailable: apiregistrationv1apihelper.IsAPIServiceConditionTrue(apiService, apiregistrationv1api.Available),
261266
}
262-
if r.proxyTransport != nil && r.proxyTransport.DialContext != nil {
267+
if r.egressSelector != nil {
268+
networkContext := egressselector.Cluster.AsNetworkContext()
269+
var egressDialer utilnet.DialFunc
270+
egressDialer, err := r.egressSelector.Lookup(networkContext)
271+
if err != nil {
272+
klog.Warning(err.Error())
273+
} else {
274+
newInfo.restConfig.Dial = egressDialer
275+
}
276+
} else if r.proxyTransport != nil && r.proxyTransport.DialContext != nil {
263277
newInfo.restConfig.Dial = r.proxyTransport.DialContext
264278
}
265279
newInfo.proxyRoundTripper, newInfo.transportBuildingError = restclient.TransportFor(newInfo.restConfig)

staging/src/k8s.io/kube-aggregator/pkg/controllers/status/BUILD

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,10 @@ go_library(
1717
"//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library",
1818
"//staging/src/k8s.io/apimachinery/pkg/labels:go_default_library",
1919
"//staging/src/k8s.io/apimachinery/pkg/runtime:go_default_library",
20+
"//staging/src/k8s.io/apimachinery/pkg/util/net:go_default_library",
2021
"//staging/src/k8s.io/apimachinery/pkg/util/runtime:go_default_library",
2122
"//staging/src/k8s.io/apimachinery/pkg/util/wait:go_default_library",
23+
"//staging/src/k8s.io/apiserver/pkg/server/egressselector:go_default_library",
2224
"//staging/src/k8s.io/client-go/informers/core/v1:go_default_library",
2325
"//staging/src/k8s.io/client-go/listers/core/v1:go_default_library",
2426
"//staging/src/k8s.io/client-go/rest:go_default_library",

staging/src/k8s.io/kube-aggregator/pkg/controllers/status/available_controller.go

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,8 +31,10 @@ import (
3131
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
3232
"k8s.io/apimachinery/pkg/labels"
3333
"k8s.io/apimachinery/pkg/runtime"
34+
utilnet "k8s.io/apimachinery/pkg/util/net"
3435
utilruntime "k8s.io/apimachinery/pkg/util/runtime"
3536
"k8s.io/apimachinery/pkg/util/wait"
37+
"k8s.io/apiserver/pkg/server/egressselector"
3638
v1informers "k8s.io/client-go/informers/core/v1"
3739
v1listers "k8s.io/client-go/listers/core/v1"
3840
"k8s.io/client-go/rest"
@@ -90,6 +92,7 @@ func NewAvailableConditionController(
9092
proxyClientCert []byte,
9193
proxyClientKey []byte,
9294
serviceResolver ServiceResolver,
95+
egressSelector *egressselector.EgressSelector,
9396
) (*AvailableConditionController, error) {
9497
c := &AvailableConditionController{
9598
apiServiceClient: apiServiceClient,
@@ -118,9 +121,19 @@ func NewAvailableConditionController(
118121
KeyData: proxyClientKey,
119122
},
120123
}
121-
if proxyTransport != nil && proxyTransport.DialContext != nil {
124+
125+
if egressSelector != nil {
126+
networkContext := egressselector.Cluster.AsNetworkContext()
127+
var egressDialer utilnet.DialFunc
128+
egressDialer, err := egressSelector.Lookup(networkContext)
129+
if err != nil {
130+
return nil, err
131+
}
132+
restConfig.Dial = egressDialer
133+
} else if proxyTransport != nil && proxyTransport.DialContext != nil {
122134
restConfig.Dial = proxyTransport.DialContext
123135
}
136+
124137
transport, err := rest.TransportFor(restConfig)
125138
if err != nil {
126139
return nil, err

0 commit comments

Comments
 (0)