diff --git a/pkg/features/kube_features.go b/pkg/features/kube_features.go index 1513d520e93..a9733e2d00a 100644 --- a/pkg/features/kube_features.go +++ b/pkg/features/kube_features.go @@ -1211,6 +1211,7 @@ var defaultVersionedKubernetesFeatureGates = map[featuregate.Feature]featuregate genericfeatures.AnonymousAuthConfigurableEndpoints: { {Version: version.MustParse("1.31"), Default: false, PreRelease: featuregate.Alpha}, {Version: version.MustParse("1.32"), Default: true, PreRelease: featuregate.Beta}, + {Version: version.MustParse("1.34"), Default: true, PreRelease: featuregate.GA, LockToDefault: true}, }, genericfeatures.APIResponseCompression: { diff --git a/pkg/kubeapiserver/options/authentication.go b/pkg/kubeapiserver/options/authentication.go index 9e9ce159e9e..774052721c4 100644 --- a/pkg/kubeapiserver/options/authentication.go +++ b/pkg/kubeapiserver/options/authentication.go @@ -321,7 +321,6 @@ func (o *BuiltInAuthenticationOptions) AddFlags(fs *pflag.FlagSet) { fs.StringVar(&o.AuthenticationConfigFile, "authentication-config", o.AuthenticationConfigFile, ""+ "File with Authentication Configuration to configure the JWT Token authenticator or the anonymous authenticator. "+ "Requires the StructuredAuthenticationConfiguration feature gate. "+ - "Also requires the feature gate AnonymousAuthConfigurableEndpoints to configure the anonymous authenticator in the config file. "+ "This flag is mutually exclusive with the --oidc-* flags if the file configures the JWT Token authenticator. "+ "This flag is mutually exclusive with --anonymous-auth if the file configures the Anonymous authenticator.") diff --git a/pkg/kubeapiserver/options/authentication_test.go b/pkg/kubeapiserver/options/authentication_test.go index 5143ea2149c..e82fee93b5c 100644 --- a/pkg/kubeapiserver/options/authentication_test.go +++ b/pkg/kubeapiserver/options/authentication_test.go @@ -34,6 +34,7 @@ import ( "github.com/spf13/pflag" utilerrors "k8s.io/apimachinery/pkg/util/errors" + "k8s.io/apimachinery/pkg/util/version" "k8s.io/apimachinery/pkg/util/wait" "k8s.io/apiserver/pkg/apis/apiserver" "k8s.io/apiserver/pkg/authentication/authenticator" @@ -64,6 +65,7 @@ func TestAuthenticationValidate(t *testing.T) { testAuthenticationConfigFile string expectErr string enabledFeatures, disabledFeatures []featuregate.Feature + emulationVersion *version.Version }{ { name: "test when OIDC and ServiceAccounts are nil", @@ -250,6 +252,9 @@ func TestAuthenticationValidate(t *testing.T) { Allow: true, FlagsSet: true, }, + // This allows us to disable the AnonymousAuthConfigurableEndpoints + // feature-gate, otherwise this feature-gate cannot be disabled. + emulationVersion: version.MustParse("1.33"), }, } @@ -261,6 +266,12 @@ func TestAuthenticationValidate(t *testing.T) { options.ServiceAccounts = testcase.testSA options.WebHook = testcase.testWebHook options.AuthenticationConfigFile = testcase.testAuthenticationConfigFile + + // SetFeatureGateEmulationVersionDuringTest needs to be called + // before any calls to SetFeatureGateDuringTest to work reliably. + if testcase.emulationVersion != nil { + featuregatetesting.SetFeatureGateEmulationVersionDuringTest(t, utilfeature.DefaultFeatureGate, version.MustParse("1.33")) + } for _, f := range testcase.enabledFeatures { featuregatetesting.SetFeatureGateDuringTest(t, utilfeature.DefaultFeatureGate, f, true) } @@ -747,7 +758,11 @@ jwt: for _, testcase := range testCases { t.Run(testcase.name, func(t *testing.T) { + if !testcase.enableAnonymousEndpoints { + featuregatetesting.SetFeatureGateEmulationVersionDuringTest(t, utilfeature.DefaultFeatureGate, version.MustParse("1.33")) + } featuregatetesting.SetFeatureGateDuringTest(t, utilfeature.DefaultFeatureGate, features.AnonymousAuthConfigurableEndpoints, testcase.enableAnonymousEndpoints) + opts := NewBuiltInAuthenticationOptions().WithAnonymous() pf := pflag.NewFlagSet("test-builtin-authentication-opts", pflag.ContinueOnError) opts.AddFlags(pf) 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 0ede8f9cb95..4d51a3e9665 100644 --- a/staging/src/k8s.io/apiserver/pkg/features/kube_features.go +++ b/staging/src/k8s.io/apiserver/pkg/features/kube_features.go @@ -272,6 +272,7 @@ var defaultVersionedKubernetesFeatureGates = map[featuregate.Feature]featuregate AnonymousAuthConfigurableEndpoints: { {Version: version.MustParse("1.31"), Default: false, PreRelease: featuregate.Alpha}, {Version: version.MustParse("1.32"), Default: true, PreRelease: featuregate.Beta}, + {Version: version.MustParse("1.34"), Default: true, PreRelease: featuregate.GA, LockToDefault: true}, }, APIResponseCompression: { diff --git a/test/compatibility_lifecycle/reference/versioned_feature_list.yaml b/test/compatibility_lifecycle/reference/versioned_feature_list.yaml index 2b27eee96ae..d7e148a7dca 100644 --- a/test/compatibility_lifecycle/reference/versioned_feature_list.yaml +++ b/test/compatibility_lifecycle/reference/versioned_feature_list.yaml @@ -77,6 +77,10 @@ lockToDefault: false preRelease: Beta version: "1.32" + - default: true + lockToDefault: true + preRelease: GA + version: "1.34" - name: AnyVolumeDataSource versionedSpecs: - default: false diff --git a/test/integration/apiserver/anonymous/anonymous_test.go b/test/integration/apiserver/anonymous/anonymous_test.go index 11b76ee03aa..32eb80ee058 100644 --- a/test/integration/apiserver/anonymous/anonymous_test.go +++ b/test/integration/apiserver/anonymous/anonymous_test.go @@ -80,8 +80,6 @@ func TestStructuredAuthenticationConfig(t *testing.T) { t.Log("Testing anonymous authenticator with authentication config") featuregatetesting.SetFeatureGateDuringTest(t, utilfeature.DefaultFeatureGate, features.StructuredAuthenticationConfiguration, true) - featuregatetesting.SetFeatureGateDuringTest(t, utilfeature.DefaultFeatureGate, features.AnonymousAuthConfigurableEndpoints, true) - testCases := []struct { desc string authConfig string