Skip to content

Commit 5521bf2

Browse files
committed
add temporary feature gate to allow disabling aggregated discovery timeout
1 parent 2f1f997 commit 5521bf2

File tree

5 files changed

+43
-40
lines changed

5 files changed

+43
-40
lines changed

cmd/kube-apiserver/app/aggregator.go

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ import (
4141
utilfeature "k8s.io/apiserver/pkg/util/feature"
4242
kubeexternalinformers "k8s.io/client-go/informers"
4343
"k8s.io/client-go/tools/cache"
44-
"k8s.io/kube-aggregator/pkg/apis/apiregistration/v1"
44+
v1 "k8s.io/kube-aggregator/pkg/apis/apiregistration/v1"
4545
v1helper "k8s.io/kube-aggregator/pkg/apis/apiregistration/v1/helper"
4646
"k8s.io/kube-aggregator/pkg/apis/apiregistration/v1beta1"
4747
aggregatorapiserver "k8s.io/kube-aggregator/pkg/apiserver"
@@ -50,6 +50,7 @@ import (
5050
informers "k8s.io/kube-aggregator/pkg/client/informers/externalversions/apiregistration/v1"
5151
"k8s.io/kube-aggregator/pkg/controllers/autoregister"
5252
"k8s.io/kubernetes/cmd/kube-apiserver/app/options"
53+
kubefeatures "k8s.io/kubernetes/pkg/features"
5354
"k8s.io/kubernetes/pkg/master/controller/crdregistration"
5455
)
5556

@@ -109,10 +110,11 @@ func createAggregatorConfig(
109110
SharedInformerFactory: externalInformers,
110111
},
111112
ExtraConfig: aggregatorapiserver.ExtraConfig{
112-
ProxyClientCert: certBytes,
113-
ProxyClientKey: keyBytes,
114-
ServiceResolver: serviceResolver,
115-
ProxyTransport: proxyTransport,
113+
ProxyClientCert: certBytes,
114+
ProxyClientKey: keyBytes,
115+
ServiceResolver: serviceResolver,
116+
ProxyTransport: proxyTransport,
117+
EnableAggregatedDiscoveryTimeout: utilfeature.DefaultFeatureGate.Enabled(kubefeatures.EnableAggregatedDiscoveryTimeout),
116118
},
117119
}
118120

pkg/features/kube_features.go

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -495,6 +495,13 @@ const (
495495
//
496496
// Enables the startupProbe in kubelet worker.
497497
StartupProbe featuregate.Feature = "StartupProbe"
498+
499+
// owner @deads2k
500+
// deprecated: v1.16
501+
//
502+
// Enable the aggregated discovery timeout to ensure client responsiveness. Note this feature is present
503+
// only for backward compatibility, it will be removed in the 1.17 release.
504+
EnableAggregatedDiscoveryTimeout featuregate.Feature = "EnableAggregatedDiscoveryTimeout"
498505
)
499506

500507
func init() {
@@ -597,6 +604,8 @@ var defaultKubernetesFeatureGates = map[featuregate.Feature]featuregate.FeatureS
597604
apiextensionsfeatures.CustomResourcePublishOpenAPI: {Default: true, PreRelease: featuregate.GA, LockToDefault: true},
598605
apiextensionsfeatures.CustomResourceDefaulting: {Default: true, PreRelease: featuregate.Beta},
599606

607+
EnableAggregatedDiscoveryTimeout: {Default: true, PreRelease: featuregate.Deprecated},
608+
600609
// features that enable backwards compatibility but are scheduled to be removed
601610
// ...
602611
HPAScaleToZero: {Default: false, PreRelease: featuregate.Alpha},

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

Lines changed: 22 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,8 @@ type ExtraConfig struct {
7171

7272
// Mechanism by which the Aggregator will resolve services. Required.
7373
ServiceResolver ServiceResolver
74+
75+
EnableAggregatedDiscoveryTimeout bool
7476
}
7577

7678
// Config represents the configuration needed to create an APIAggregator.
@@ -132,6 +134,8 @@ type APIAggregator struct {
132134

133135
// openAPIAggregationController downloads and merges OpenAPI specs.
134136
openAPIAggregationController *openapicontroller.AggregationController
137+
138+
enableAggregatedDiscoveryTimeout bool
135139
}
136140

137141
// Complete fills in any fields not set that are required to have valid data. It's mutating the receiver.
@@ -172,17 +176,18 @@ func (c completedConfig) NewWithDelegate(delegationTarget genericapiserver.Deleg
172176
)
173177

174178
s := &APIAggregator{
175-
GenericAPIServer: genericServer,
176-
delegateHandler: delegationTarget.UnprotectedHandler(),
177-
proxyClientCert: c.ExtraConfig.ProxyClientCert,
178-
proxyClientKey: c.ExtraConfig.ProxyClientKey,
179-
proxyTransport: c.ExtraConfig.ProxyTransport,
180-
proxyHandlers: map[string]*proxyHandler{},
181-
handledGroups: sets.String{},
182-
lister: informerFactory.Apiregistration().V1().APIServices().Lister(),
183-
APIRegistrationInformers: informerFactory,
184-
serviceResolver: c.ExtraConfig.ServiceResolver,
185-
openAPIConfig: openAPIConfig,
179+
GenericAPIServer: genericServer,
180+
delegateHandler: delegationTarget.UnprotectedHandler(),
181+
proxyClientCert: c.ExtraConfig.ProxyClientCert,
182+
proxyClientKey: c.ExtraConfig.ProxyClientKey,
183+
proxyTransport: c.ExtraConfig.ProxyTransport,
184+
proxyHandlers: map[string]*proxyHandler{},
185+
handledGroups: sets.String{},
186+
lister: informerFactory.Apiregistration().V1().APIServices().Lister(),
187+
APIRegistrationInformers: informerFactory,
188+
serviceResolver: c.ExtraConfig.ServiceResolver,
189+
openAPIConfig: openAPIConfig,
190+
enableAggregatedDiscoveryTimeout: c.ExtraConfig.EnableAggregatedDiscoveryTimeout,
186191
}
187192

188193
apiGroupInfo := apiservicerest.NewRESTStorage(c.GenericConfig.MergedResourceConfig, c.GenericConfig.RESTOptionsGetter)
@@ -286,11 +291,12 @@ func (s *APIAggregator) AddAPIService(apiService *v1.APIService) error {
286291

287292
// register the proxy handler
288293
proxyHandler := &proxyHandler{
289-
localDelegate: s.delegateHandler,
290-
proxyClientCert: s.proxyClientCert,
291-
proxyClientKey: s.proxyClientKey,
292-
proxyTransport: s.proxyTransport,
293-
serviceResolver: s.serviceResolver,
294+
localDelegate: s.delegateHandler,
295+
proxyClientCert: s.proxyClientCert,
296+
proxyClientKey: s.proxyClientKey,
297+
proxyTransport: s.proxyTransport,
298+
serviceResolver: s.serviceResolver,
299+
enableAggregatedDiscoveryTimeout: s.enableAggregatedDiscoveryTimeout,
294300
}
295301
proxyHandler.updateAPIService(apiService)
296302
if s.openAPIAggregationController != nil {

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

Lines changed: 4 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,6 @@ import (
2020
"context"
2121
"net/http"
2222
"net/url"
23-
"os"
24-
"strconv"
2523
"strings"
2624
"sync/atomic"
2725
"time"
@@ -31,7 +29,6 @@ import (
3129
"k8s.io/apimachinery/pkg/util/httpstream/spdy"
3230
utilnet "k8s.io/apimachinery/pkg/util/net"
3331
"k8s.io/apimachinery/pkg/util/proxy"
34-
utilruntime "k8s.io/apimachinery/pkg/util/runtime"
3532
"k8s.io/apiserver/pkg/endpoints/handlers/responsewriters"
3633
endpointmetrics "k8s.io/apiserver/pkg/endpoints/metrics"
3734
genericapirequest "k8s.io/apiserver/pkg/endpoints/request"
@@ -50,19 +47,6 @@ const (
5047
aggregatedDiscoveryTimeout = 5 * time.Second
5148
)
5249

53-
var (
54-
// TODO this should be unconditionally true once we remove the env var override
55-
enableAggregatedDiscoveryTimeout = true
56-
)
57-
58-
func init() {
59-
disableAggregatedDiscoveryTimeout, err := strconv.ParseBool(os.Getenv("DEPRECATED_DISABLE_AGGREGATOR_DISCOVERY_TIMEOUT"))
60-
if err != nil {
61-
utilruntime.HandleError(err)
62-
}
63-
enableAggregatedDiscoveryTimeout = !disableAggregatedDiscoveryTimeout
64-
}
65-
6650
// proxyHandler provides a http.Handler which will proxy traffic to locations
6751
// specified by items implementing Redirector.
6852
type proxyHandler struct {
@@ -79,6 +63,8 @@ type proxyHandler struct {
7963
serviceResolver ServiceResolver
8064

8165
handlingInfo atomic.Value
66+
67+
enableAggregatedDiscoveryTimeout bool
8268
}
8369

8470
type proxyHandlingInfo struct {
@@ -162,7 +148,7 @@ func (r *proxyHandler) ServeHTTP(w http.ResponseWriter, req *http.Request) {
162148
location.Path = req.URL.Path
163149
location.RawQuery = req.URL.Query().Encode()
164150

165-
newReq, cancelFn := newRequestForProxy(location, req)
151+
newReq, cancelFn := newRequestForProxy(location, req, r.enableAggregatedDiscoveryTimeout)
166152
defer cancelFn()
167153

168154
if handlingInfo.proxyRoundTripper == nil {
@@ -191,7 +177,7 @@ func (r *proxyHandler) ServeHTTP(w http.ResponseWriter, req *http.Request) {
191177
}
192178

193179
// newRequestForProxy returns a shallow copy of the original request with a context that may include a timeout for discovery requests
194-
func newRequestForProxy(location *url.URL, req *http.Request) (*http.Request, context.CancelFunc) {
180+
func newRequestForProxy(location *url.URL, req *http.Request, enableAggregatedDiscoveryTimeout bool) (*http.Request, context.CancelFunc) {
195181
newCtx := context.Background()
196182
cancelFn := func() {}
197183

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -540,7 +540,7 @@ func TestGetContextForNewRequest(t *testing.T) {
540540
}
541541
location.Path = req.URL.Path
542542

543-
newReq, cancelFn := newRequestForProxy(location, req)
543+
newReq, cancelFn := newRequestForProxy(location, req, true)
544544
defer cancelFn()
545545

546546
theproxy := proxy.NewUpgradeAwareHandler(location, server.Client().Transport, true, false, &responder{w: w})

0 commit comments

Comments
 (0)