In addition to {product-title} default admission plug-ins, dynamic admission can be implemented through webhook admission plug-ins that call webhook servers, to extend the functionality of the admission chain. Webhook servers are called over HTTP at defined endpoints.
There are two types of webhook admission plug-ins in {product-title}:
-
During the admission process, the mutating admission plug-in can perform tasks, such as injecting affinity labels.
-
At the end of the admission process, the validating admission plug-in can be used to make sure an object is configured properly, for example ensuring affinity labels are as expected. If the validation passes, {product-title} schedules the object as configured.
When an API request comes in, mutating or validating admission plug-ins use the list of external webhooks in the configuration and call them in parallel:
-
If all of the webhooks approve the request, the admission chain continues.
-
If any of the webhooks deny the request, the admission request is denied and the reason for doing so is based on the first denial.
-
If more than one webhook denies the admission request, only the first denial reason is returned to the user.
-
If an error is encountered when calling a webhook, the request is either denied or the webhook is ignored depending on the error policy set. If the error policy is set to
Ignore
, the request is unconditionally accepted in the event of a failure. If the policy is set toFail
, failed requests are denied. UsingIgnore
can result in unpredictable behavior for all clients.
Communication between the webhook admission plug-in and the webhook server must use TLS. Generate a CA certificate and use the certificate to sign the server certificate that is used by your webhook admission server. The PEM-encoded CA certificate is supplied to the webhook admission plug-in using a mechanism, such as service serving certificate secrets.
The following diagram illustrates the sequential admission chain process within which multiple webhook servers are called.
An example webhook admission plug-in use case is where all pods must have a common set of labels. In this example, the mutating admission plug-in can inject labels and the validating admission plug-in can check that labels are as expected. {product-title} would subsequently schedule pods that include required labels and reject those that do not.
Some common webhook admission plug-in use cases include:
-
Namespace reservation.
-
Limiting custom network resources managed by the SR-IOV network device plug-in.
-
Defining tolerations that enable taints to qualify which pods should be scheduled on a node.
-
Pod priority class validation.