plugins.go 7.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149
  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/runtimeclass"
  40. "k8s.io/kubernetes/plugin/pkg/admission/security/podsecuritypolicy"
  41. "k8s.io/kubernetes/plugin/pkg/admission/securitycontext/scdeny"
  42. "k8s.io/kubernetes/plugin/pkg/admission/serviceaccount"
  43. "k8s.io/kubernetes/plugin/pkg/admission/storage/persistentvolume/label"
  44. "k8s.io/kubernetes/plugin/pkg/admission/storage/persistentvolume/resize"
  45. "k8s.io/kubernetes/plugin/pkg/admission/storage/storageclass/setdefault"
  46. "k8s.io/kubernetes/plugin/pkg/admission/storage/storageobjectinuseprotection"
  47. "k8s.io/apimachinery/pkg/util/sets"
  48. "k8s.io/apiserver/pkg/admission"
  49. "k8s.io/apiserver/pkg/admission/plugin/namespace/lifecycle"
  50. mutatingwebhook "k8s.io/apiserver/pkg/admission/plugin/webhook/mutating"
  51. validatingwebhook "k8s.io/apiserver/pkg/admission/plugin/webhook/validating"
  52. )
  53. // AllOrderedPlugins is the list of all the plugins in order.
  54. var AllOrderedPlugins = []string{
  55. admit.PluginName, // AlwaysAdmit
  56. autoprovision.PluginName, // NamespaceAutoProvision
  57. lifecycle.PluginName, // NamespaceLifecycle
  58. exists.PluginName, // NamespaceExists
  59. scdeny.PluginName, // SecurityContextDeny
  60. antiaffinity.PluginName, // LimitPodHardAntiAffinityTopology
  61. podpreset.PluginName, // PodPreset
  62. limitranger.PluginName, // LimitRanger
  63. serviceaccount.PluginName, // ServiceAccount
  64. noderestriction.PluginName, // NodeRestriction
  65. nodetaint.PluginName, // TaintNodesByCondition
  66. alwayspullimages.PluginName, // AlwaysPullImages
  67. imagepolicy.PluginName, // ImagePolicyWebhook
  68. podsecuritypolicy.PluginName, // PodSecurityPolicy
  69. podnodeselector.PluginName, // PodNodeSelector
  70. podpriority.PluginName, // Priority
  71. defaulttolerationseconds.PluginName, // DefaultTolerationSeconds
  72. podtolerationrestriction.PluginName, // PodTolerationRestriction
  73. exec.DenyEscalatingExec, // DenyEscalatingExec
  74. exec.DenyExecOnPrivileged, // DenyExecOnPrivileged
  75. eventratelimit.PluginName, // EventRateLimit
  76. extendedresourcetoleration.PluginName, // ExtendedResourceToleration
  77. label.PluginName, // PersistentVolumeLabel
  78. setdefault.PluginName, // DefaultStorageClass
  79. storageobjectinuseprotection.PluginName, // StorageObjectInUseProtection
  80. gc.PluginName, // OwnerReferencesPermissionEnforcement
  81. resize.PluginName, // PersistentVolumeClaimResize
  82. mutatingwebhook.PluginName, // MutatingAdmissionWebhook
  83. validatingwebhook.PluginName, // ValidatingAdmissionWebhook
  84. runtimeclass.PluginName, //RuntimeClass
  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. runtimeclass.Register(plugins)
  111. resourcequota.Register(plugins)
  112. podsecuritypolicy.Register(plugins)
  113. podpriority.Register(plugins)
  114. scdeny.Register(plugins)
  115. serviceaccount.Register(plugins)
  116. setdefault.Register(plugins)
  117. resize.Register(plugins)
  118. storageobjectinuseprotection.Register(plugins)
  119. }
  120. // DefaultOffAdmissionPlugins get admission plugins off by default for kube-apiserver.
  121. func DefaultOffAdmissionPlugins() sets.String {
  122. defaultOnPlugins := sets.NewString(
  123. lifecycle.PluginName, //NamespaceLifecycle
  124. limitranger.PluginName, //LimitRanger
  125. serviceaccount.PluginName, //ServiceAccount
  126. setdefault.PluginName, //DefaultStorageClass
  127. resize.PluginName, //PersistentVolumeClaimResize
  128. defaulttolerationseconds.PluginName, //DefaultTolerationSeconds
  129. mutatingwebhook.PluginName, //MutatingAdmissionWebhook
  130. validatingwebhook.PluginName, //ValidatingAdmissionWebhook
  131. resourcequota.PluginName, //ResourceQuota
  132. storageobjectinuseprotection.PluginName, //StorageObjectInUseProtection
  133. podpriority.PluginName, //PodPriority
  134. nodetaint.PluginName, //TaintNodesByCondition
  135. runtimeclass.PluginName, //RuntimeClass, gates internally on the feature
  136. )
  137. return sets.NewString(AllOrderedPlugins...).Difference(defaultOnPlugins)
  138. }