diff --git a/pkg/features/kube_features.go b/pkg/features/kube_features.go index 32ee5af5bcd..d6f16b73f50 100644 --- a/pkg/features/kube_features.go +++ b/pkg/features/kube_features.go @@ -1186,6 +1186,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 1553cec4951..81b12cc34c1 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 95706ce7181..c85f980572c 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 e31e7102006..9cddc819b17 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 fa6ba89a2dc..ed0c71dbdf8 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