2015-07-12 04:04:52 +00:00
<!-- BEGIN MUNGE: UNVERSIONED_WARNING -->
<!-- BEGIN STRIP_FOR_RELEASE -->
2015-07-16 17:02:26 +00:00
< img src = "http://kubernetes.io/img/warning.png" alt = "WARNING"
width="25" height="25">
< img src = "http://kubernetes.io/img/warning.png" alt = "WARNING"
width="25" height="25">
< img src = "http://kubernetes.io/img/warning.png" alt = "WARNING"
width="25" height="25">
< img src = "http://kubernetes.io/img/warning.png" alt = "WARNING"
width="25" height="25">
< img src = "http://kubernetes.io/img/warning.png" alt = "WARNING"
width="25" height="25">
2015-07-13 22:15:35 +00:00
2015-07-16 17:02:26 +00:00
< h2 > PLEASE NOTE: This document applies to the HEAD of the source tree< / h2 >
2015-07-12 04:04:52 +00:00
2015-07-16 17:02:26 +00:00
If you are using a released version of Kubernetes, you should
refer to the docs that go with that version.
2015-07-12 04:04:52 +00:00
2015-07-16 17:02:26 +00:00
< strong >
The latest 1.0.x release of this document can be found
[here ](http://releases.k8s.io/release-1.0/docs/admin/admission-controllers.md ).
Documentation for other releases can be found at
[releases.k8s.io ](http://releases.k8s.io ).
< / strong >
--
2015-07-13 22:15:35 +00:00
2015-07-12 04:04:52 +00:00
<!-- END STRIP_FOR_RELEASE -->
<!-- END MUNGE: UNVERSIONED_WARNING -->
2015-07-17 22:35:41 +00:00
2015-06-03 00:19:17 +00:00
# Admission Controllers
2015-07-13 17:57:44 +00:00
**Table of Contents**
<!-- BEGIN MUNGE: GENERATED_TOC -->
2015-07-17 16:20:19 +00:00
2015-07-13 17:57:44 +00:00
- [Admission Controllers ](#admission-controllers )
2015-07-15 18:26:51 +00:00
- [What are they? ](#what-are-they )
- [Why do I need them? ](#why-do-i-need-them )
- [How do I turn on an admission control plug-in? ](#how-do-i-turn-on-an-admission-control-plug-in )
- [What does each plug-in do? ](#what-does-each-plug-in-do )
2015-07-13 17:57:44 +00:00
- [AlwaysAdmit ](#alwaysadmit )
- [AlwaysDeny ](#alwaysdeny )
- [DenyExecOnPrivileged ](#denyexeconprivileged )
- [ServiceAccount ](#serviceaccount )
- [SecurityContextDeny ](#securitycontextdeny )
- [ResourceQuota ](#resourcequota )
- [LimitRanger ](#limitranger )
2015-08-11 20:41:00 +00:00
- [NamespaceExists (deprecated) ](#namespaceexists-deprecated )
2015-07-17 00:56:56 +00:00
- [NamespaceAutoProvision (deprecated) ](#namespaceautoprovision-deprecated )
2015-07-13 17:57:44 +00:00
- [NamespaceLifecycle ](#namespacelifecycle )
2015-07-15 18:26:51 +00:00
- [Is there a recommended set of plug-ins to use? ](#is-there-a-recommended-set-of-plug-ins-to-use )
2015-07-13 17:57:44 +00:00
<!-- END MUNGE: GENERATED_TOC -->
2015-06-03 00:19:17 +00:00
## What are they?
An admission control plug-in is a piece of code that intercepts requests to the Kubernetes
API server prior to persistence of the object, but after the request is authenticated
and authorized. The plug-in code is in the API server process
and must be compiled into the binary in order to be used at this time.
Each admission control plug-in is run in sequence before a request is accepted into the cluster. If
any of the plug-ins in the sequence reject the request, the entire request is rejected immediately
and an error is returned to the end-user.
Admission control plug-ins may mutate the incoming object in some cases to apply system configured
defaults. In addition, admission control plug-ins may mutate related resources as part of request
processing to do things like increment quota usage.
## Why do I need them?
Many advanced features in Kubernetes require an admission control plug-in to be enabled in order
to properly support the feature. As a result, a Kubernetes API server that is not properly
configured with the right set of admission control plug-ins is an incomplete server and will not
support all the features you expect.
## How do I turn on an admission control plug-in?
2015-08-14 18:40:48 +00:00
The Kubernetes API server supports a flag, `admission-control` that takes a comma-delimited,
2015-06-03 00:19:17 +00:00
ordered list of admission control choices to invoke prior to modifying objects in the cluster.
## What does each plug-in do?
### AlwaysAdmit
Use this plugin by itself to pass-through all requests.
### AlwaysDeny
Rejects all requests. Used for testing.
### DenyExecOnPrivileged
This plug-in will intercept all requests to exec a command in a pod if that pod has a privileged container.
If your cluster supports privileged containers, and you want to restrict the ability of end-users to exec
commands in those containers, we strongly encourage enabling this plug-in.
### ServiceAccount
2015-07-15 05:07:44 +00:00
This plug-in implements automation for [serviceAccounts ](../user-guide/service-accounts.md ).
2015-07-19 05:58:13 +00:00
We strongly recommend using this plug-in if you intend to make use of Kubernetes `ServiceAccount` objects.
2015-06-03 00:19:17 +00:00
### SecurityContextDeny
2015-07-19 05:58:13 +00:00
This plug-in will deny any pod with a [SecurityContext ](../user-guide/security-context.md ) that defines options that were not available on the `Container` .
2015-06-03 00:19:17 +00:00
### ResourceQuota
This plug-in will observe the incoming request and ensure that it does not violate any of the constraints
2015-07-19 05:58:13 +00:00
enumerated in the `ResourceQuota` object in a `Namespace` . If you are using `ResourceQuota`
2015-06-03 00:19:17 +00:00
objects in your Kubernetes deployment, you MUST use this plug-in to enforce quota constraints.
2015-07-17 17:12:08 +00:00
See the [resourceQuota design doc ](../design/admission_control_resource_quota.md ) and the [example of Resource Quota ](../user-guide/resourcequota/ ) for more details.
2015-06-03 00:19:17 +00:00
It is strongly encouraged that this plug-in is configured last in the sequence of admission control plug-ins. This is
so that quota is not prematurely incremented only for the request to be rejected later in admission control.
### LimitRanger
This plug-in will observe the incoming request and ensure that it does not violate any of the constraints
2015-07-19 05:58:13 +00:00
enumerated in the `LimitRange` object in a `Namespace` . If you are using `LimitRange` objects in
2015-07-17 17:12:08 +00:00
your Kubernetes deployment, you MUST use this plug-in to enforce those constraints. LimitRanger can also
be used to apply default resource requests to Pods that don't specify any; currently, the default LimitRanger
2015-07-19 05:58:13 +00:00
applies a 0.1 CPU requirement to all Pods in the `default` namespace.
2015-06-03 00:19:17 +00:00
2015-08-04 14:46:51 +00:00
See the [limitRange design doc ](../design/admission_control_limit_range.md ) and the [example of Limit Range ](limitrange/ ) for more details.
2015-06-03 00:19:17 +00:00
2015-08-11 20:41:00 +00:00
### NamespaceExists (deprecated)
2015-06-03 00:19:17 +00:00
2015-07-19 05:58:13 +00:00
This plug-in will observe all incoming requests that attempt to create a resource in a Kubernetes `Namespace`
and reject the request if the `Namespace` was not previously created. We strongly recommend running
2015-06-03 00:19:17 +00:00
this plug-in to ensure integrity of your data.
2015-08-11 20:41:00 +00:00
The functionality of this admission controller has been merged into `NamespaceLifecycle`
2015-06-03 00:19:17 +00:00
### NamespaceAutoProvision (deprecated)
2015-07-19 05:58:13 +00:00
This plug-in will observe all incoming requests that attempt to create a resource in a Kubernetes `Namespace`
and create a new `Namespace` if one did not already exist previously.
2015-06-03 00:19:17 +00:00
2015-08-11 20:41:00 +00:00
We strongly recommend `NamespaceLifecycle` over `NamespaceAutoProvision` .
2015-06-03 00:19:17 +00:00
### NamespaceLifecycle
2015-08-11 20:41:00 +00:00
This plug-in enforces that a `Namespace` that is undergoing termination cannot have new objects created in it,
and ensures that requests in a non-existant `Namespace` are rejected.
2015-06-03 00:19:17 +00:00
2015-07-19 05:58:13 +00:00
A `Namespace` deletion kicks off a sequence of operations that remove all objects (pods, services, etc.) in that
2015-06-03 00:19:17 +00:00
namespace. In order to enforce integrity of that process, we strongly recommend running this plug-in.
## Is there a recommended set of plug-ins to use?
Yes.
For Kubernetes 1.0, we strongly recommend running the following set of admission control plug-ins (order matters):
2015-07-20 16:40:32 +00:00
```
2015-08-11 20:41:00 +00:00
--admission-control=NamespaceLifecycle,LimitRanger,SecurityContextDeny,ServiceAccount,ResourceQuota
2015-06-03 00:19:17 +00:00
```
2015-07-14 00:13:09 +00:00
<!-- BEGIN MUNGE: GENERATED_ANALYTICS -->
2015-07-10 19:39:25 +00:00
[![Analytics ](https://kubernetes-site.appspot.com/UA-36037335-10/GitHub/docs/admin/admission-controllers.md?pixel )]()
2015-07-14 00:13:09 +00:00
<!-- END MUNGE: GENERATED_ANALYTICS -->