plugins.go 7.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153
  1. /*
  2. Copyright 2014 The Kubernetes Authors.
  3. Licensed under the Apache License, Version 2.0 (the "License");
  4. you may not use this file except in compliance with the License.
  5. You may obtain a copy of the License at
  6. http://www.apache.org/licenses/LICENSE-2.0
  7. Unless required by applicable law or agreed to in writing, software
  8. distributed under the License is distributed on an "AS IS" BASIS,
  9. WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  10. See the License for the specific language governing permissions and
  11. limitations under the License.
  12. */
  13. package options
  14. // This file exists to force the desired plugin implementations to be linked.
  15. // This should probably be part of some configuration fed into the build for a
  16. // given binary target.
  17. import (
  18. // Admission policies
  19. "k8s.io/kubernetes/plugin/pkg/admission/admit"
  20. "k8s.io/kubernetes/plugin/pkg/admission/alwayspullimages"
  21. "k8s.io/kubernetes/plugin/pkg/admission/antiaffinity"
  22. "k8s.io/kubernetes/plugin/pkg/admission/defaulttolerationseconds"
  23. "k8s.io/kubernetes/plugin/pkg/admission/deny"
  24. "k8s.io/kubernetes/plugin/pkg/admission/eventratelimit"
  25. "k8s.io/kubernetes/plugin/pkg/admission/exec"
  26. "k8s.io/kubernetes/plugin/pkg/admission/extendedresourcetoleration"
  27. "k8s.io/kubernetes/plugin/pkg/admission/gc"
  28. "k8s.io/kubernetes/plugin/pkg/admission/imagepolicy"
  29. "k8s.io/kubernetes/plugin/pkg/admission/limitranger"
  30. "k8s.io/kubernetes/plugin/pkg/admission/namespace/autoprovision"
  31. "k8s.io/kubernetes/plugin/pkg/admission/namespace/exists"
  32. "k8s.io/kubernetes/plugin/pkg/admission/noderestriction"
  33. "k8s.io/kubernetes/plugin/pkg/admission/nodetaint"
  34. "k8s.io/kubernetes/plugin/pkg/admission/podnodeselector"
  35. "k8s.io/kubernetes/plugin/pkg/admission/podpreset"
  36. "k8s.io/kubernetes/plugin/pkg/admission/podtolerationrestriction"
  37. podpriority "k8s.io/kubernetes/plugin/pkg/admission/priority"
  38. "k8s.io/kubernetes/plugin/pkg/admission/resourcequota"
  39. "k8s.io/kubernetes/plugin/pkg/admission/security/podsecuritypolicy"
  40. "k8s.io/kubernetes/plugin/pkg/admission/securitycontext/scdeny"
  41. "k8s.io/kubernetes/plugin/pkg/admission/serviceaccount"
  42. "k8s.io/kubernetes/plugin/pkg/admission/storage/persistentvolume/label"
  43. "k8s.io/kubernetes/plugin/pkg/admission/storage/persistentvolume/resize"
  44. "k8s.io/kubernetes/plugin/pkg/admission/storage/storageclass/setdefault"
  45. "k8s.io/kubernetes/plugin/pkg/admission/storage/storageobjectinuseprotection"
  46. "k8s.io/apimachinery/pkg/util/sets"
  47. "k8s.io/apiserver/pkg/admission"
  48. "k8s.io/apiserver/pkg/admission/plugin/namespace/lifecycle"
  49. mutatingwebhook "k8s.io/apiserver/pkg/admission/plugin/webhook/mutating"
  50. validatingwebhook "k8s.io/apiserver/pkg/admission/plugin/webhook/validating"
  51. utilfeature "k8s.io/apiserver/pkg/util/feature"
  52. "k8s.io/kubernetes/pkg/features"
  53. )
  54. // AllOrderedPlugins is the list of all the plugins in order.
  55. var AllOrderedPlugins = []string{
  56. admit.PluginName, // AlwaysAdmit
  57. autoprovision.PluginName, // NamespaceAutoProvision
  58. lifecycle.PluginName, // NamespaceLifecycle
  59. exists.PluginName, // NamespaceExists
  60. scdeny.PluginName, // SecurityContextDeny
  61. antiaffinity.PluginName, // LimitPodHardAntiAffinityTopology
  62. podpreset.PluginName, // PodPreset
  63. limitranger.PluginName, // LimitRanger
  64. serviceaccount.PluginName, // ServiceAccount
  65. noderestriction.PluginName, // NodeRestriction
  66. nodetaint.PluginName, // TaintNodesByCondition
  67. alwayspullimages.PluginName, // AlwaysPullImages
  68. imagepolicy.PluginName, // ImagePolicyWebhook
  69. podsecuritypolicy.PluginName, // PodSecurityPolicy
  70. podnodeselector.PluginName, // PodNodeSelector
  71. podpriority.PluginName, // Priority
  72. defaulttolerationseconds.PluginName, // DefaultTolerationSeconds
  73. podtolerationrestriction.PluginName, // PodTolerationRestriction
  74. exec.DenyEscalatingExec, // DenyEscalatingExec
  75. exec.DenyExecOnPrivileged, // DenyExecOnPrivileged
  76. eventratelimit.PluginName, // EventRateLimit
  77. extendedresourcetoleration.PluginName, // ExtendedResourceToleration
  78. label.PluginName, // PersistentVolumeLabel
  79. setdefault.PluginName, // DefaultStorageClass
  80. storageobjectinuseprotection.PluginName, // StorageObjectInUseProtection
  81. gc.PluginName, // OwnerReferencesPermissionEnforcement
  82. resize.PluginName, // PersistentVolumeClaimResize
  83. mutatingwebhook.PluginName, // MutatingAdmissionWebhook
  84. validatingwebhook.PluginName, // ValidatingAdmissionWebhook
  85. resourcequota.PluginName, // ResourceQuota
  86. deny.PluginName, // AlwaysDeny
  87. }
  88. // RegisterAllAdmissionPlugins registers all admission plugins and
  89. // sets the recommended plugins order.
  90. func RegisterAllAdmissionPlugins(plugins *admission.Plugins) {
  91. admit.Register(plugins) // DEPRECATED as no real meaning
  92. alwayspullimages.Register(plugins)
  93. antiaffinity.Register(plugins)
  94. defaulttolerationseconds.Register(plugins)
  95. deny.Register(plugins) // DEPRECATED as no real meaning
  96. eventratelimit.Register(plugins)
  97. exec.Register(plugins)
  98. extendedresourcetoleration.Register(plugins)
  99. gc.Register(plugins)
  100. imagepolicy.Register(plugins)
  101. limitranger.Register(plugins)
  102. autoprovision.Register(plugins)
  103. exists.Register(plugins)
  104. noderestriction.Register(plugins)
  105. nodetaint.Register(plugins)
  106. label.Register(plugins) // DEPRECATED, future PVs should not rely on labels for zone topology
  107. podnodeselector.Register(plugins)
  108. podpreset.Register(plugins)
  109. podtolerationrestriction.Register(plugins)
  110. resourcequota.Register(plugins)
  111. podsecuritypolicy.Register(plugins)
  112. podpriority.Register(plugins)
  113. scdeny.Register(plugins)
  114. serviceaccount.Register(plugins)
  115. setdefault.Register(plugins)
  116. resize.Register(plugins)
  117. storageobjectinuseprotection.Register(plugins)
  118. }
  119. // DefaultOffAdmissionPlugins get admission plugins off by default for kube-apiserver.
  120. func DefaultOffAdmissionPlugins() sets.String {
  121. defaultOnPlugins := sets.NewString(
  122. lifecycle.PluginName, //NamespaceLifecycle
  123. limitranger.PluginName, //LimitRanger
  124. serviceaccount.PluginName, //ServiceAccount
  125. setdefault.PluginName, //DefaultStorageClass
  126. resize.PluginName, //PersistentVolumeClaimResize
  127. defaulttolerationseconds.PluginName, //DefaultTolerationSeconds
  128. mutatingwebhook.PluginName, //MutatingAdmissionWebhook
  129. validatingwebhook.PluginName, //ValidatingAdmissionWebhook
  130. resourcequota.PluginName, //ResourceQuota
  131. storageobjectinuseprotection.PluginName, //StorageObjectInUseProtection
  132. )
  133. if utilfeature.DefaultFeatureGate.Enabled(features.PodPriority) {
  134. defaultOnPlugins.Insert(podpriority.PluginName) //PodPriority
  135. }
  136. if utilfeature.DefaultFeatureGate.Enabled(features.TaintNodesByCondition) {
  137. defaultOnPlugins.Insert(nodetaint.PluginName) //TaintNodesByCondition
  138. }
  139. return sets.NewString(AllOrderedPlugins...).Difference(defaultOnPlugins)
  140. }