Skip to content

Commit 90ef2db

Browse files
Merge pull request #18218 from deads2k/admission-04-fix-inclusiontest
Automatic merge from submit-queue (batch tested with PRs 17953, 18218, 18247). fix admission usage test and add missing plugins Fixes https://bugzilla.redhat.com/show_bug.cgi?id=1536288 Our test for including upstream admission plugins wasn't good. I fixed it to run based on the upstream registration functions. I also added the EventRateLimiter to fix the perceived problem. /assign soltysh /assign sttts @mfojtik
2 parents 8dbafed + 9ec2165 commit 90ef2db

File tree

4 files changed

+55
-34
lines changed

4 files changed

+55
-34
lines changed

pkg/cmd/server/origin/admission/chain_builder.go

+22
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,11 @@ var (
4949

5050
// kubeAdmissionPlugins gives the in-order default admission chain for kube resources.
5151
kubeAdmissionPlugins = []string{
52+
"AlwaysAdmit",
53+
"NamespaceAutoProvision",
54+
"NamespaceExists",
5255
lifecycle.PluginName,
56+
"EventRateLimit",
5357
"RunOnceDuration",
5458
"PodNodeConstraints",
5559
"OriginPodNodeEnvironment",
@@ -61,10 +65,15 @@ var (
6165
imagequalify.PluginName,
6266
"ImagePolicyWebhook",
6367
"PodPreset",
68+
"InitialResources",
6469
"LimitRanger",
6570
"ServiceAccount",
6671
noderestriction.PluginName,
72+
"SecurityContextDeny",
6773
sccadmission.PluginName,
74+
"PodSecurityPolicy",
75+
"DenyEscalatingExec",
76+
"DenyExecOnPrivileged",
6877
storageclassdefaultadmission.PluginName,
6978
expandpvcadmission.PluginName,
7079
"AlwaysPullImages",
@@ -73,13 +82,15 @@ var (
7382
"PersistentVolumeLabel",
7483
"OwnerReferencesPermissionEnforcement",
7584
ingressadmission.IngressAdmission,
85+
"Priority",
7686
"ExtendedResourceToleration",
7787
"DefaultTolerationSeconds",
7888
"PVCProtection",
7989
"Initializers",
8090
"MutatingAdmissionWebhook",
8191
"ValidatingAdmissionWebhook",
8292
"PodTolerationRestriction",
93+
"AlwaysDeny",
8394
// NOTE: ResourceQuota and ClusterResourceQuota must be the last 2 plugins.
8495
// DO NOT ADD ANY PLUGINS AFTER THIS LINE!
8596
"ResourceQuota",
@@ -90,7 +101,11 @@ var (
90101
// When possible, this list is used. The set of openshift+kube chains must exactly match this set. In addition,
91102
// the order specified in the openshift and kube chains must match the order here.
92103
combinedAdmissionControlPlugins = []string{
104+
"AlwaysAdmit",
105+
"NamespaceAutoProvision",
106+
"NamespaceExists",
93107
lifecycle.PluginName,
108+
"EventRateLimit",
94109
"ProjectRequestLimit",
95110
"OriginNamespaceLifecycle",
96111
"openshift.io/RestrictSubjectBindings",
@@ -109,10 +124,15 @@ var (
109124
imagequalify.PluginName,
110125
"ImagePolicyWebhook",
111126
"PodPreset",
127+
"InitialResources",
112128
"LimitRanger",
113129
"ServiceAccount",
114130
noderestriction.PluginName,
131+
"SecurityContextDeny",
115132
sccadmission.PluginName,
133+
"PodSecurityPolicy",
134+
"DenyEscalatingExec",
135+
"DenyExecOnPrivileged",
116136
storageclassdefaultadmission.PluginName,
117137
expandpvcadmission.PluginName,
118138
"AlwaysPullImages",
@@ -121,13 +141,15 @@ var (
121141
"PersistentVolumeLabel",
122142
"OwnerReferencesPermissionEnforcement",
123143
ingressadmission.IngressAdmission,
144+
"Priority",
124145
"ExtendedResourceToleration",
125146
"DefaultTolerationSeconds",
126147
"PVCProtection",
127148
"Initializers",
128149
"MutatingAdmissionWebhook",
129150
"ValidatingAdmissionWebhook",
130151
"PodTolerationRestriction",
152+
"AlwaysDeny",
131153
// NOTE: ResourceQuota and ClusterResourceQuota must be the last 2 plugins.
132154
// DO NOT ADD ANY PLUGINS AFTER THIS LINE!
133155
"ResourceQuota",

pkg/cmd/server/origin/admission/config_test.go

+14-30
Original file line numberDiff line numberDiff line change
@@ -7,13 +7,11 @@ import (
77

88
"k8s.io/apimachinery/pkg/util/sets"
99
"k8s.io/apiserver/pkg/admission"
10-
"k8s.io/apiserver/pkg/admission/plugin/namespace/lifecycle"
1110

1211
configapi "github.com/openshift/origin/pkg/cmd/server/api"
1312
overrideapi "github.com/openshift/origin/pkg/quota/admission/clusterresourceoverride/api"
1413
sccadmission "github.com/openshift/origin/pkg/security/admission"
1514
serviceadmit "github.com/openshift/origin/pkg/service/admission"
16-
expandpvcadmission "k8s.io/kubernetes/plugin/pkg/admission/persistentvolume/resize"
1715
)
1816

1917
// TestAdmissionPluginChains makes sure that the admission plugin lists are coherent.
@@ -73,41 +71,27 @@ var legacyOpenshiftAdmissionPlugins = sets.NewString(
7371
"ResourceQuota",
7472
)
7573

76-
// kubeAdmissionPlugins tracks kube plugins we use. You may add to this list, but ONLY if they're from upstream kube
77-
var usedKubeAdmissionPlugins = sets.NewString(
78-
lifecycle.PluginName,
79-
"PodPreset",
80-
"LimitRanger",
81-
"ServiceAccount",
82-
"DefaultStorageClass",
83-
"ImagePolicyWebhook",
84-
"AlwaysPullImages",
85-
"LimitPodHardAntiAffinityTopology",
86-
"SCCExecRestrictions",
87-
"PersistentVolumeLabel",
88-
"OwnerReferencesPermissionEnforcement",
89-
"PodNodeSelector",
90-
"DefaultTolerationSeconds",
91-
"ResourceQuota",
92-
"Initializers",
93-
"ValidatingAdmissionWebhook",
94-
"MutatingAdmissionWebhook",
95-
"PodTolerationRestriction",
96-
"ExtendedResourceToleration",
97-
"PVCProtection",
98-
"NodeRestriction",
99-
expandpvcadmission.PluginName,
100-
)
101-
10274
// TestAdmissionPluginNames makes sure that openshift admission plugins are prefixed with `openshift.io/`.
10375
func TestAdmissionPluginNames(t *testing.T) {
104-
for _, plugin := range combinedAdmissionControlPlugins {
105-
if !strings.HasPrefix(plugin, "openshift.io/") && !usedKubeAdmissionPlugins.Has(plugin) && !legacyOpenshiftAdmissionPlugins.Has(plugin) {
76+
originAdmissionPlugins := admission.NewPlugins()
77+
registerOpenshiftAdmissionPlugins(originAdmissionPlugins)
78+
79+
for _, plugin := range originAdmissionPlugins.Registered() {
80+
if !strings.HasPrefix(plugin, "openshift.io/") && !legacyOpenshiftAdmissionPlugins.Has(plugin) {
10681
t.Errorf("openshift admission plugins must be prefixed with openshift.io/ %v", plugin)
10782
}
10883
}
10984
}
11085

86+
func TestUnusuedKubeAdmissionPlugins(t *testing.T) {
87+
allAdmissionPlugins := sets.NewString(OriginAdmissionPlugins.Registered()...)
88+
knownAdmissionPlugins := sets.NewString(combinedAdmissionControlPlugins...)
89+
90+
if unorderedPlugins := allAdmissionPlugins.Difference(knownAdmissionPlugins); len(unorderedPlugins) != 0 {
91+
t.Errorf("%v need to be ordered and enabled/disabled", unorderedPlugins.List())
92+
}
93+
}
94+
11195
func TestSeparateAdmissionChainDetection(t *testing.T) {
11296
testCases := []struct {
11397
name string

pkg/cmd/server/origin/admission/register.go

+17-2
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,10 @@ func init() {
5252
func RegisterAllAdmissionPlugins(plugins *admission.Plugins) {
5353
kubeapiserver.RegisterAllAdmissionPlugins(plugins)
5454
genericapiserver.RegisterAllAdmissionPlugins(plugins)
55+
registerOpenshiftAdmissionPlugins(plugins)
56+
}
57+
58+
func registerOpenshiftAdmissionPlugins(plugins *admission.Plugins) {
5559
authorizationrestrictusers.Register(plugins)
5660
buildjenkinsbootstrapper.Register(plugins)
5761
buildsecretinjector.Register(plugins)
@@ -114,15 +118,26 @@ var (
114118
"LimitPodHardAntiAffinityTopology",
115119
"DefaultTolerationSeconds",
116120
"PodPreset", // default to off while PodPreset is alpha
117-
118-
// these are new, reassess post-rebase
121+
"EventRateLimit",
122+
"PodSecurityPolicy",
123+
"Priority",
119124
"Initializers",
120125
"ValidatingAdmissionWebhook",
121126
"MutatingAdmissionWebhook",
122127
"PodTolerationRestriction",
123128
"ExtendedResourceToleration",
124129
"PVCProtection",
125130
expandpvcadmission.PluginName,
131+
132+
// these should usually be off.
133+
"AlwaysAdmit",
134+
"AlwaysDeny",
135+
"DenyEscalatingExec",
136+
"DenyExecOnPrivileged",
137+
"InitialResources",
138+
"NamespaceAutoProvision",
139+
"NamespaceExists",
140+
"SecurityContextDeny",
126141
)
127142
)
128143

pkg/cmd/server/origin/admission/sync_test.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -69,8 +69,8 @@ func TestAdmissionOnOffCoverage(t *testing.T) {
6969

7070
if !configuredAdmissionPlugins.Equal(allCoveredAdmissionPlugins) {
7171
t.Errorf("every admission plugin must be default on or default off. differences: %v and %v",
72-
configuredAdmissionPlugins.Difference(allCoveredAdmissionPlugins),
73-
allCoveredAdmissionPlugins.Difference(configuredAdmissionPlugins))
72+
configuredAdmissionPlugins.Difference(allCoveredAdmissionPlugins).List(),
73+
allCoveredAdmissionPlugins.Difference(configuredAdmissionPlugins).List())
7474
}
7575

7676
for plugin := range DefaultOnPlugins {

0 commit comments

Comments
 (0)