...

Source file src/k8s.io/kubernetes/pkg/kubeapiserver/options/plugins.go

Documentation: k8s.io/kubernetes/pkg/kubeapiserver/options

     1  /*
     2  Copyright 2014 The Kubernetes Authors.
     3  
     4  Licensed under the Apache License, Version 2.0 (the "License");
     5  you may not use this file except in compliance with the License.
     6  You may obtain a copy of the License at
     7  
     8      http://www.apache.org/licenses/LICENSE-2.0
     9  
    10  Unless required by applicable law or agreed to in writing, software
    11  distributed under the License is distributed on an "AS IS" BASIS,
    12  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    13  See the License for the specific language governing permissions and
    14  limitations under the License.
    15  */
    16  
    17  package options
    18  
    19  // This file exists to force the desired plugin implementations to be linked.
    20  // This should probably be part of some configuration fed into the build for a
    21  // given binary target.
    22  import (
    23  	validatingadmissionpolicy "k8s.io/apiserver/pkg/admission/plugin/policy/validating"
    24  	// Admission policies
    25  	"k8s.io/kubernetes/plugin/pkg/admission/admit"
    26  	"k8s.io/kubernetes/plugin/pkg/admission/alwayspullimages"
    27  	"k8s.io/kubernetes/plugin/pkg/admission/antiaffinity"
    28  	certapproval "k8s.io/kubernetes/plugin/pkg/admission/certificates/approval"
    29  	"k8s.io/kubernetes/plugin/pkg/admission/certificates/ctbattest"
    30  	certsigning "k8s.io/kubernetes/plugin/pkg/admission/certificates/signing"
    31  	certsubjectrestriction "k8s.io/kubernetes/plugin/pkg/admission/certificates/subjectrestriction"
    32  	"k8s.io/kubernetes/plugin/pkg/admission/defaulttolerationseconds"
    33  	"k8s.io/kubernetes/plugin/pkg/admission/deny"
    34  	"k8s.io/kubernetes/plugin/pkg/admission/eventratelimit"
    35  	"k8s.io/kubernetes/plugin/pkg/admission/extendedresourcetoleration"
    36  	"k8s.io/kubernetes/plugin/pkg/admission/gc"
    37  	"k8s.io/kubernetes/plugin/pkg/admission/imagepolicy"
    38  	"k8s.io/kubernetes/plugin/pkg/admission/limitranger"
    39  	"k8s.io/kubernetes/plugin/pkg/admission/namespace/autoprovision"
    40  	"k8s.io/kubernetes/plugin/pkg/admission/namespace/exists"
    41  	"k8s.io/kubernetes/plugin/pkg/admission/network/defaultingressclass"
    42  	"k8s.io/kubernetes/plugin/pkg/admission/network/denyserviceexternalips"
    43  	"k8s.io/kubernetes/plugin/pkg/admission/noderestriction"
    44  	"k8s.io/kubernetes/plugin/pkg/admission/nodetaint"
    45  	"k8s.io/kubernetes/plugin/pkg/admission/podnodeselector"
    46  	"k8s.io/kubernetes/plugin/pkg/admission/podtolerationrestriction"
    47  	podpriority "k8s.io/kubernetes/plugin/pkg/admission/priority"
    48  	"k8s.io/kubernetes/plugin/pkg/admission/runtimeclass"
    49  	"k8s.io/kubernetes/plugin/pkg/admission/security/podsecurity"
    50  	"k8s.io/kubernetes/plugin/pkg/admission/serviceaccount"
    51  	"k8s.io/kubernetes/plugin/pkg/admission/storage/persistentvolume/label"
    52  	"k8s.io/kubernetes/plugin/pkg/admission/storage/persistentvolume/resize"
    53  	"k8s.io/kubernetes/plugin/pkg/admission/storage/storageclass/setdefault"
    54  	"k8s.io/kubernetes/plugin/pkg/admission/storage/storageobjectinuseprotection"
    55  
    56  	"k8s.io/apimachinery/pkg/util/sets"
    57  	"k8s.io/apiserver/pkg/admission"
    58  	"k8s.io/apiserver/pkg/admission/plugin/namespace/lifecycle"
    59  	"k8s.io/apiserver/pkg/admission/plugin/resourcequota"
    60  	mutatingwebhook "k8s.io/apiserver/pkg/admission/plugin/webhook/mutating"
    61  	validatingwebhook "k8s.io/apiserver/pkg/admission/plugin/webhook/validating"
    62  )
    63  
    64  // AllOrderedPlugins is the list of all the plugins in order.
    65  var AllOrderedPlugins = []string{
    66  	admit.PluginName,                        // AlwaysAdmit
    67  	autoprovision.PluginName,                // NamespaceAutoProvision
    68  	lifecycle.PluginName,                    // NamespaceLifecycle
    69  	exists.PluginName,                       // NamespaceExists
    70  	antiaffinity.PluginName,                 // LimitPodHardAntiAffinityTopology
    71  	limitranger.PluginName,                  // LimitRanger
    72  	serviceaccount.PluginName,               // ServiceAccount
    73  	noderestriction.PluginName,              // NodeRestriction
    74  	nodetaint.PluginName,                    // TaintNodesByCondition
    75  	alwayspullimages.PluginName,             // AlwaysPullImages
    76  	imagepolicy.PluginName,                  // ImagePolicyWebhook
    77  	podsecurity.PluginName,                  // PodSecurity
    78  	podnodeselector.PluginName,              // PodNodeSelector
    79  	podpriority.PluginName,                  // Priority
    80  	defaulttolerationseconds.PluginName,     // DefaultTolerationSeconds
    81  	podtolerationrestriction.PluginName,     // PodTolerationRestriction
    82  	eventratelimit.PluginName,               // EventRateLimit
    83  	extendedresourcetoleration.PluginName,   // ExtendedResourceToleration
    84  	label.PluginName,                        // PersistentVolumeLabel
    85  	setdefault.PluginName,                   // DefaultStorageClass
    86  	storageobjectinuseprotection.PluginName, // StorageObjectInUseProtection
    87  	gc.PluginName,                           // OwnerReferencesPermissionEnforcement
    88  	resize.PluginName,                       // PersistentVolumeClaimResize
    89  	runtimeclass.PluginName,                 // RuntimeClass
    90  	certapproval.PluginName,                 // CertificateApproval
    91  	certsigning.PluginName,                  // CertificateSigning
    92  	ctbattest.PluginName,                    // ClusterTrustBundleAttest
    93  	certsubjectrestriction.PluginName,       // CertificateSubjectRestriction
    94  	defaultingressclass.PluginName,          // DefaultIngressClass
    95  	denyserviceexternalips.PluginName,       // DenyServiceExternalIPs
    96  
    97  	// new admission plugins should generally be inserted above here
    98  	// webhook, resourcequota, and deny plugins must go at the end
    99  
   100  	mutatingwebhook.PluginName,           // MutatingAdmissionWebhook
   101  	validatingadmissionpolicy.PluginName, // ValidatingAdmissionPolicy
   102  	validatingwebhook.PluginName,         // ValidatingAdmissionWebhook
   103  	resourcequota.PluginName,             // ResourceQuota
   104  	deny.PluginName,                      // AlwaysDeny
   105  }
   106  
   107  // RegisterAllAdmissionPlugins registers all admission plugins.
   108  // The order of registration is irrelevant, see AllOrderedPlugins for execution order.
   109  func RegisterAllAdmissionPlugins(plugins *admission.Plugins) {
   110  	admit.Register(plugins) // DEPRECATED as no real meaning
   111  	alwayspullimages.Register(plugins)
   112  	antiaffinity.Register(plugins)
   113  	defaulttolerationseconds.Register(plugins)
   114  	defaultingressclass.Register(plugins)
   115  	denyserviceexternalips.Register(plugins)
   116  	deny.Register(plugins) // DEPRECATED as no real meaning
   117  	eventratelimit.Register(plugins)
   118  	extendedresourcetoleration.Register(plugins)
   119  	gc.Register(plugins)
   120  	imagepolicy.Register(plugins)
   121  	limitranger.Register(plugins)
   122  	autoprovision.Register(plugins)
   123  	exists.Register(plugins)
   124  	noderestriction.Register(plugins)
   125  	nodetaint.Register(plugins)
   126  	label.Register(plugins) // DEPRECATED, future PVs should not rely on labels for zone topology
   127  	podnodeselector.Register(plugins)
   128  	podtolerationrestriction.Register(plugins)
   129  	runtimeclass.Register(plugins)
   130  	resourcequota.Register(plugins)
   131  	podsecurity.Register(plugins)
   132  	podpriority.Register(plugins)
   133  	serviceaccount.Register(plugins)
   134  	setdefault.Register(plugins)
   135  	resize.Register(plugins)
   136  	storageobjectinuseprotection.Register(plugins)
   137  	certapproval.Register(plugins)
   138  	certsigning.Register(plugins)
   139  	ctbattest.Register(plugins)
   140  	certsubjectrestriction.Register(plugins)
   141  }
   142  
   143  // DefaultOffAdmissionPlugins get admission plugins off by default for kube-apiserver.
   144  func DefaultOffAdmissionPlugins() sets.String {
   145  	defaultOnPlugins := sets.NewString(
   146  		lifecycle.PluginName,                    // NamespaceLifecycle
   147  		limitranger.PluginName,                  // LimitRanger
   148  		serviceaccount.PluginName,               // ServiceAccount
   149  		setdefault.PluginName,                   // DefaultStorageClass
   150  		resize.PluginName,                       // PersistentVolumeClaimResize
   151  		defaulttolerationseconds.PluginName,     // DefaultTolerationSeconds
   152  		mutatingwebhook.PluginName,              // MutatingAdmissionWebhook
   153  		validatingwebhook.PluginName,            // ValidatingAdmissionWebhook
   154  		resourcequota.PluginName,                // ResourceQuota
   155  		storageobjectinuseprotection.PluginName, // StorageObjectInUseProtection
   156  		podpriority.PluginName,                  // Priority
   157  		nodetaint.PluginName,                    // TaintNodesByCondition
   158  		runtimeclass.PluginName,                 // RuntimeClass
   159  		certapproval.PluginName,                 // CertificateApproval
   160  		certsigning.PluginName,                  // CertificateSigning
   161  		ctbattest.PluginName,                    // ClusterTrustBundleAttest
   162  		certsubjectrestriction.PluginName,       // CertificateSubjectRestriction
   163  		defaultingressclass.PluginName,          // DefaultIngressClass
   164  		podsecurity.PluginName,                  // PodSecurity
   165  		validatingadmissionpolicy.PluginName,    // ValidatingAdmissionPolicy, only active when feature gate ValidatingAdmissionPolicy is enabled
   166  	)
   167  
   168  	return sets.NewString(AllOrderedPlugins...).Difference(defaultOnPlugins)
   169  }
   170  

View as plain text