diff --git a/pkg/controlplane/apiserver/config.go b/pkg/controlplane/apiserver/config.go index 9df8aeecb5e..d72fcd78996 100644 --- a/pkg/controlplane/apiserver/config.go +++ b/pkg/controlplane/apiserver/config.go @@ -23,8 +23,6 @@ import ( "net/http" "time" - noopoteltrace "go.opentelemetry.io/otel/trace/noop" - "k8s.io/apimachinery/pkg/api/meta" "k8s.io/apimachinery/pkg/runtime" utilnet "k8s.io/apimachinery/pkg/util/net" @@ -168,10 +166,8 @@ func BuildGenericConfig( if lastErr = s.EgressSelector.ApplyTo(genericConfig); lastErr != nil { return } - if utilfeature.DefaultFeatureGate.Enabled(genericfeatures.APIServerTracing) { - if lastErr = s.Traces.ApplyTo(genericConfig.EgressSelector, genericConfig); lastErr != nil { - return - } + if lastErr = s.Traces.ApplyTo(genericConfig.EgressSelector, genericConfig); lastErr != nil { + return } // wrap the definitions to revert any changes from disabled features getOpenAPIDefinitions = openapi.GetOpenAPIDefinitionsWithoutDisabledFeatures(getOpenAPIDefinitions) @@ -189,11 +185,7 @@ func BuildGenericConfig( if genericConfig.EgressSelector != nil { s.Etcd.StorageConfig.Transport.EgressLookup = genericConfig.EgressSelector.Lookup } - if utilfeature.DefaultFeatureGate.Enabled(genericfeatures.APIServerTracing) { - s.Etcd.StorageConfig.Transport.TracerProvider = genericConfig.TracerProvider - } else { - s.Etcd.StorageConfig.Transport.TracerProvider = noopoteltrace.NewTracerProvider() - } + s.Etcd.StorageConfig.Transport.TracerProvider = genericConfig.TracerProvider storageFactoryConfig := kubeapiserver.NewStorageFactoryConfigEffectiveVersion(genericConfig.EffectiveVersion) storageFactoryConfig.APIResourceConfig = genericConfig.MergedResourceConfig diff --git a/pkg/features/kube_features.go b/pkg/features/kube_features.go index e168f20e2c8..10d0177fc81 100644 --- a/pkg/features/kube_features.go +++ b/pkg/features/kube_features.go @@ -2095,12 +2095,6 @@ var defaultVersionedKubernetesFeatureGates = map[featuregate.Feature]featuregate {Version: version.MustParse("1.26"), Default: true, PreRelease: featuregate.Beta}, }, - genericfeatures.APIServerTracing: { - {Version: version.MustParse("1.22"), Default: false, PreRelease: featuregate.Alpha}, - {Version: version.MustParse("1.27"), Default: true, PreRelease: featuregate.Beta}, - {Version: version.MustParse("1.34"), Default: true, PreRelease: featuregate.GA, LockToDefault: true}, // remove in 1.37 - }, - genericfeatures.APIServingWithRoutine: { {Version: version.MustParse("1.30"), Default: false, PreRelease: featuregate.Alpha}, }, @@ -2643,8 +2637,6 @@ var defaultKubernetesFeatureGateDependencies = map[featuregate.Feature][]feature genericfeatures.APIServerIdentity: {}, - genericfeatures.APIServerTracing: {}, - genericfeatures.APIServingWithRoutine: {}, genericfeatures.AggregatedDiscoveryRemoveBetaType: {}, diff --git a/staging/src/k8s.io/apiserver/pkg/features/kube_features.go b/staging/src/k8s.io/apiserver/pkg/features/kube_features.go index 6bb53031d7e..cc53a9a4a26 100644 --- a/staging/src/k8s.io/apiserver/pkg/features/kube_features.go +++ b/staging/src/k8s.io/apiserver/pkg/features/kube_features.go @@ -44,11 +44,6 @@ const ( // Assigns each kube-apiserver an ID in a cluster. APIServerIdentity featuregate.Feature = "APIServerIdentity" - // owner: @dashpole - // - // Add support for distributed tracing in the API Server - APIServerTracing featuregate.Feature = "APIServerTracing" - // owner: @linxiulei // // Enables serving watch requests in separate goroutines. @@ -313,12 +308,6 @@ var defaultVersionedKubernetesFeatureGates = map[featuregate.Feature]featuregate {Version: version.MustParse("1.26"), Default: true, PreRelease: featuregate.Beta}, }, - APIServerTracing: { - {Version: version.MustParse("1.22"), Default: false, PreRelease: featuregate.Alpha}, - {Version: version.MustParse("1.27"), Default: true, PreRelease: featuregate.Beta}, - {Version: version.MustParse("1.34"), Default: true, PreRelease: featuregate.GA, LockToDefault: true}, // remove in 1.37 - }, - APIServingWithRoutine: { {Version: version.MustParse("1.30"), Default: false, PreRelease: featuregate.Alpha}, }, diff --git a/staging/src/k8s.io/apiserver/pkg/server/config.go b/staging/src/k8s.io/apiserver/pkg/server/config.go index f197b55cd1a..2c7b970f2a0 100644 --- a/staging/src/k8s.io/apiserver/pkg/server/config.go +++ b/staging/src/k8s.io/apiserver/pkg/server/config.go @@ -1069,9 +1069,7 @@ func DefaultBuildHandlerChain(apiHandler http.Handler, c *Config) http.Handler { // WithTracing comes after authentication so we can allow authenticated // clients to influence sampling. - if c.FeatureGate.Enabled(genericfeatures.APIServerTracing) { - handler = genericapifilters.WithTracing(handler, c.TracerProvider) - } + handler = genericapifilters.WithTracing(handler, c.TracerProvider) failedHandler = filterlatency.TrackCompleted(failedHandler) handler = filterlatency.TrackCompleted(handler) handler = genericapifilters.WithAuthentication(handler, c.Authentication.Authenticator, failedHandler, c.Authentication.APIAudiences, c.Authentication.RequestHeaderConfig) diff --git a/staging/src/k8s.io/apiserver/pkg/server/options/coreapi.go b/staging/src/k8s.io/apiserver/pkg/server/options/coreapi.go index 12a65517e1f..d8f1fd6e375 100644 --- a/staging/src/k8s.io/apiserver/pkg/server/options/coreapi.go +++ b/staging/src/k8s.io/apiserver/pkg/server/options/coreapi.go @@ -21,9 +21,7 @@ import ( "time" "github.com/spf13/pflag" - "k8s.io/apiserver/pkg/features" "k8s.io/apiserver/pkg/server" - "k8s.io/apiserver/pkg/util/feature" clientgoinformers "k8s.io/client-go/informers" clientgoclientset "k8s.io/client-go/kubernetes" "k8s.io/client-go/rest" @@ -72,9 +70,7 @@ func (o *CoreAPIOptions) ApplyTo(config *server.RecommendedConfig) error { return err } } - if feature.DefaultFeatureGate.Enabled(features.APIServerTracing) { - kubeconfig.Wrap(tracing.WrapperFor(config.TracerProvider)) - } + kubeconfig.Wrap(tracing.WrapperFor(config.TracerProvider)) clientgoExternalClient, err := clientgoclientset.NewForConfig(kubeconfig) if err != nil { return fmt.Errorf("failed to create Kubernetes clientset: %v", err) diff --git a/staging/src/k8s.io/apiserver/pkg/server/options/tracing.go b/staging/src/k8s.io/apiserver/pkg/server/options/tracing.go index b0cce593761..e8393edc950 100644 --- a/staging/src/k8s.io/apiserver/pkg/server/options/tracing.go +++ b/staging/src/k8s.io/apiserver/pkg/server/options/tracing.go @@ -34,7 +34,6 @@ import ( "k8s.io/apimachinery/pkg/runtime/serializer" "k8s.io/apiserver/pkg/apis/apiserver" "k8s.io/apiserver/pkg/apis/apiserver/install" - "k8s.io/apiserver/pkg/features" "k8s.io/apiserver/pkg/server" "k8s.io/apiserver/pkg/server/egressselector" "k8s.io/apiserver/pkg/util/feature" @@ -87,9 +86,6 @@ func (o *TracingOptions) ApplyTo(es *egressselector.EgressSelector, c *server.Co if o == nil || o.ConfigFile == "" { return nil } - if !feature.DefaultFeatureGate.Enabled(features.APIServerTracing) { - return fmt.Errorf("APIServerTracing feature is not enabled, but tracing config file was provided") - } traceConfig, err := ReadTracingConfiguration(o.ConfigFile) if err != nil { diff --git a/staging/src/k8s.io/apiserver/pkg/storage/storagebackend/factory/etcd3.go b/staging/src/k8s.io/apiserver/pkg/storage/storagebackend/factory/etcd3.go index 6b60601a784..0482c8aa84e 100644 --- a/staging/src/k8s.io/apiserver/pkg/storage/storagebackend/factory/etcd3.go +++ b/staging/src/k8s.io/apiserver/pkg/storage/storagebackend/factory/etcd3.go @@ -319,17 +319,15 @@ var newETCD3Client = func(c storagebackend.TransportConfig) (*kubernetes.Client, grpc.WithChainUnaryInterceptor(grpcpromClientMetrics.UnaryClientInterceptor()), grpc.WithChainStreamInterceptor(grpcpromClientMetrics.StreamClientInterceptor()), } - if utilfeature.DefaultFeatureGate.Enabled(genericfeatures.APIServerTracing) { - tracingOpts := []otelgrpc.Option{ - otelgrpc.WithMessageEvents(otelgrpc.ReceivedEvents, otelgrpc.SentEvents), - otelgrpc.WithPropagators(tracing.Propagators()), - otelgrpc.WithTracerProvider(c.TracerProvider), - } - // Even with Noop TracerProvider, the otelgrpc still handles context propagation. - // See https://github.com/open-telemetry/opentelemetry-go/tree/main/example/passthrough - dialOptions = append(dialOptions, - grpc.WithStatsHandler(otelgrpc.NewClientHandler(tracingOpts...))) + tracingOpts := []otelgrpc.Option{ + otelgrpc.WithMessageEvents(otelgrpc.ReceivedEvents, otelgrpc.SentEvents), + otelgrpc.WithPropagators(tracing.Propagators()), + otelgrpc.WithTracerProvider(c.TracerProvider), } + // Even with Noop TracerProvider, the otelgrpc still handles context propagation. + // See https://github.com/open-telemetry/opentelemetry-go/tree/main/example/passthrough + dialOptions = append(dialOptions, + grpc.WithStatsHandler(otelgrpc.NewClientHandler(tracingOpts...))) if egressDialer != nil { dialer := func(ctx context.Context, addr string) (net.Conn, error) { if strings.Contains(addr, "//") { diff --git a/staging/src/k8s.io/apiserver/pkg/util/webhook/authentication.go b/staging/src/k8s.io/apiserver/pkg/util/webhook/authentication.go index 0816b45a102..6ccc5fa8cdd 100644 --- a/staging/src/k8s.io/apiserver/pkg/util/webhook/authentication.go +++ b/staging/src/k8s.io/apiserver/pkg/util/webhook/authentication.go @@ -29,9 +29,7 @@ import ( corev1 "k8s.io/api/core/v1" utilnet "k8s.io/apimachinery/pkg/util/net" - "k8s.io/apiserver/pkg/features" egressselector "k8s.io/apiserver/pkg/server/egressselector" - "k8s.io/apiserver/pkg/util/feature" "k8s.io/client-go/rest" "k8s.io/client-go/tools/clientcmd" clientcmdapi "k8s.io/client-go/tools/clientcmd/api" @@ -59,9 +57,7 @@ func NewDefaultAuthenticationInfoResolverWrapper( if err != nil { return nil, err } - if feature.DefaultFeatureGate.Enabled(features.APIServerTracing) { - ret.Wrap(tracing.WrapperFor(tp)) - } + ret.Wrap(tracing.WrapperFor(tp)) if egressSelector != nil { networkContext := egressselector.ControlPlane.AsNetworkContext() @@ -84,9 +80,7 @@ func NewDefaultAuthenticationInfoResolverWrapper( if err != nil { return nil, err } - if feature.DefaultFeatureGate.Enabled(features.APIServerTracing) { - ret.Wrap(tracing.WrapperFor(tp)) - } + ret.Wrap(tracing.WrapperFor(tp)) if egressSelector != nil { networkContext := egressselector.Cluster.AsNetworkContext() diff --git a/staging/src/k8s.io/kube-aggregator/pkg/apiserver/handler_proxy.go b/staging/src/k8s.io/kube-aggregator/pkg/apiserver/handler_proxy.go index ed9cd4592a0..ee763b8f461 100644 --- a/staging/src/k8s.io/kube-aggregator/pkg/apiserver/handler_proxy.go +++ b/staging/src/k8s.io/kube-aggregator/pkg/apiserver/handler_proxy.go @@ -167,7 +167,7 @@ func (r *proxyHandler) ServeHTTP(w http.ResponseWriter, req *http.Request) { proxyRoundTripper = transport.NewAuthProxyRoundTripper(user.GetName(), userUID, user.GetGroups(), user.GetExtra(), proxyRoundTripper) - if utilfeature.DefaultFeatureGate.Enabled(genericfeatures.APIServerTracing) && !upgrade { + if !upgrade { tracingWrapper := tracing.WrapperFor(r.tracerProvider) proxyRoundTripper = tracingWrapper(proxyRoundTripper) } diff --git a/test/compatibility_lifecycle/reference/feature_list.md b/test/compatibility_lifecycle/reference/feature_list.md index b9847c9be1f..2de2b870498 100644 --- a/test/compatibility_lifecycle/reference/feature_list.md +++ b/test/compatibility_lifecycle/reference/feature_list.md @@ -7,7 +7,6 @@ |---------|---------|--------|-------|------|----|------------|--------------|-------| | APIResponseCompression | :ballot_box_with_check: 1.16+ | | 1.8–1.15 | 1.16– | | | | [code](https://cs.k8s.io/?q=%5CbAPIResponseCompression%5Cb&i=nope&files=&excludeFiles=CHANGELOG&repos=kubernetes/kubernetes) [KEPs](https://cs.k8s.io/?q=%5CbAPIResponseCompression%5Cb&i=nope&files=&excludeFiles=CHANGELOG&repos=kubernetes/enhancements) | | APIServerIdentity | :ballot_box_with_check: 1.26+ | | 1.20–1.25 | 1.26– | | | | [code](https://cs.k8s.io/?q=%5CbAPIServerIdentity%5Cb&i=nope&files=&excludeFiles=CHANGELOG&repos=kubernetes/kubernetes) [KEPs](https://cs.k8s.io/?q=%5CbAPIServerIdentity%5Cb&i=nope&files=&excludeFiles=CHANGELOG&repos=kubernetes/enhancements) | -| APIServerTracing | :ballot_box_with_check: 1.27+ | :closed_lock_with_key: 1.34+ | 1.22–1.26 | 1.27–1.33 | 1.34– | | | [code](https://cs.k8s.io/?q=%5CbAPIServerTracing%5Cb&i=nope&files=&excludeFiles=CHANGELOG&repos=kubernetes/kubernetes) [KEPs](https://cs.k8s.io/?q=%5CbAPIServerTracing%5Cb&i=nope&files=&excludeFiles=CHANGELOG&repos=kubernetes/enhancements) | | APIServingWithRoutine | | | 1.30– | | | | | [code](https://cs.k8s.io/?q=%5CbAPIServingWithRoutine%5Cb&i=nope&files=&excludeFiles=CHANGELOG&repos=kubernetes/kubernetes) [KEPs](https://cs.k8s.io/?q=%5CbAPIServingWithRoutine%5Cb&i=nope&files=&excludeFiles=CHANGELOG&repos=kubernetes/enhancements) | | AggregatedDiscoveryRemoveBetaType | :ballot_box_with_check: 1.33+ | :closed_lock_with_key: 1.35+ | | | 1.0–1.32 | 1.33– | | [code](https://cs.k8s.io/?q=%5CbAggregatedDiscoveryRemoveBetaType%5Cb&i=nope&files=&excludeFiles=CHANGELOG&repos=kubernetes/kubernetes) [KEPs](https://cs.k8s.io/?q=%5CbAggregatedDiscoveryRemoveBetaType%5Cb&i=nope&files=&excludeFiles=CHANGELOG&repos=kubernetes/enhancements) | | AllowDNSOnlyNodeCSR | :ballot_box_with_check: 1.0+ | | | | 1.0–1.30 | 1.31– | | [code](https://cs.k8s.io/?q=%5CbAllowDNSOnlyNodeCSR%5Cb&i=nope&files=&excludeFiles=CHANGELOG&repos=kubernetes/kubernetes) [KEPs](https://cs.k8s.io/?q=%5CbAllowDNSOnlyNodeCSR%5Cb&i=nope&files=&excludeFiles=CHANGELOG&repos=kubernetes/enhancements) | diff --git a/test/compatibility_lifecycle/reference/versioned_feature_list.yaml b/test/compatibility_lifecycle/reference/versioned_feature_list.yaml index 135a3b72341..181d22ad927 100644 --- a/test/compatibility_lifecycle/reference/versioned_feature_list.yaml +++ b/test/compatibility_lifecycle/reference/versioned_feature_list.yaml @@ -87,20 +87,6 @@ lockToDefault: false preRelease: Beta version: "1.26" -- name: APIServerTracing - versionedSpecs: - - default: false - lockToDefault: false - preRelease: Alpha - version: "1.22" - - default: true - lockToDefault: false - preRelease: Beta - version: "1.27" - - default: true - lockToDefault: true - preRelease: GA - version: "1.34" - name: APIServingWithRoutine versionedSpecs: - default: false