From c80dcf56ee21f2d6f0feab8e062f0fdc0e69ed74 Mon Sep 17 00:00:00 2001 From: Jordan Liggitt Date: Tue, 25 Feb 2020 17:28:59 -0500 Subject: [PATCH] Ensure webhook/quota/deny admission comes last --- pkg/kubeapiserver/options/BUILD | 1 + pkg/kubeapiserver/options/plugins.go | 14 ++++++---- pkg/kubeapiserver/options/plugins_test.go | 31 +++++++++++++++++++++++ 3 files changed, 41 insertions(+), 5 deletions(-) create mode 100644 pkg/kubeapiserver/options/plugins_test.go diff --git a/pkg/kubeapiserver/options/BUILD b/pkg/kubeapiserver/options/BUILD index be7c2de73dc..0ea52a3fb74 100644 --- a/pkg/kubeapiserver/options/BUILD +++ b/pkg/kubeapiserver/options/BUILD @@ -89,6 +89,7 @@ go_test( "admission_test.go", "authentication_test.go", "authorization_test.go", + "plugins_test.go", ], data = [ "testdata/client-expired.pem", diff --git a/pkg/kubeapiserver/options/plugins.go b/pkg/kubeapiserver/options/plugins.go index ed63fb844a5..e08408c9f6a 100644 --- a/pkg/kubeapiserver/options/plugins.go +++ b/pkg/kubeapiserver/options/plugins.go @@ -86,11 +86,15 @@ var AllOrderedPlugins = []string{ storageobjectinuseprotection.PluginName, // StorageObjectInUseProtection gc.PluginName, // OwnerReferencesPermissionEnforcement resize.PluginName, // PersistentVolumeClaimResize - mutatingwebhook.PluginName, // MutatingAdmissionWebhook - validatingwebhook.PluginName, // ValidatingAdmissionWebhook - runtimeclass.PluginName, //RuntimeClass - resourcequota.PluginName, // ResourceQuota - deny.PluginName, // AlwaysDeny + runtimeclass.PluginName, // RuntimeClass + + // new admission plugins should generally be inserted above here + // webhook, resourcequota, and deny plugins must go at the end + + mutatingwebhook.PluginName, // MutatingAdmissionWebhook + validatingwebhook.PluginName, // ValidatingAdmissionWebhook + resourcequota.PluginName, // ResourceQuota + deny.PluginName, // AlwaysDeny } // RegisterAllAdmissionPlugins registers all admission plugins and diff --git a/pkg/kubeapiserver/options/plugins_test.go b/pkg/kubeapiserver/options/plugins_test.go new file mode 100644 index 00000000000..5eb5c6c4a06 --- /dev/null +++ b/pkg/kubeapiserver/options/plugins_test.go @@ -0,0 +1,31 @@ +/* +Copyright 2020 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package options + +import ( + "strings" + "testing" +) + +func TestAdmissionPluginOrder(t *testing.T) { + // Ensure the last four admission plugins listed are webhooks, quota, and deny + allplugins := strings.Join(AllOrderedPlugins, ",") + expectSuffix := ",MutatingAdmissionWebhook,ValidatingAdmissionWebhook,ResourceQuota,AlwaysDeny" + if !strings.HasSuffix(allplugins, expectSuffix) { + t.Fatalf("AllOrderedPlugins must end with ...%s", expectSuffix) + } +}