Admission Controller
Un contrôleur d’admission est un morceau de code qui intercepte les demandes adressées au serveur API de Kubernetes avant la persistance de l’objet, mais après l’authentification et l’autorisation de la demande. Ils ne peuvent être configurés que par l’administrateur du cluster. Dans les admissions controllers possibles, il y en a deux spéciaux : MutatingAdmissionWebhook et ValidatingAdmissionWebhook. Ils exécutent les webhooks de contrôle d’admission mutant et validant (respectivement) qui sont configurés dans l’API. Les contrôleurs d’admission peuvent être “validants”, “mutants” ou les deux. Les contrôleurs mutants peuvent modifier les objets qu’ils admettent ; les contrôleurs validants ne le peuvent pas. Les contrôleurs d’admission limitent les demandes de création, de suppression, de modification ou de connexion (proxy). Ils ne prennent pas en charge les demandes de lecture. Le processus de contrôle d’admission se déroule en deux phases. Dans la première phase, les contrôleurs d’admission mutants sont exécutés. Dans la deuxième phase, les contrôleurs d’admission de validation sont exécutés. N Certains contrôleurs sont à la fois mutant et validant.
Structure
apiVersion: admissionregistration.k8s.io/v1beta1
kind: ValidatingWebhookConfiguration
metadata:
name: <NOM_DE_LA_CONFIGURATION>
webhooks:
- name: <NOM_DU_WEBHOOK>
rules:
- apiGroups:
- apps
apiVersions:
- v1 #<== liste des versions impactées par ce webhook
operations:
- CREATE #<== liste des verbes HTTP qui déclencheront l'appel vers le Webhook
resources:
- deployments #<== liste des resources qui sont concernées
clientConfig:
url: "https://my-webhook.example.com:9443/my-webhook-path" <== soit une url
service: <= soit un service
namespace: <NAMESPACE_DU_SERVICE>
name: <NOM_DU-SERVICE>
path: /<Chemin>
port: <Port>
caBundle: <pem encoded ca cert du serveur webhook>
GateKeeper
Un outil comme GateKeeper adaptation dédiée kubernetes d’OPA utilise ce principe pour permettre de définir ce qui a le droit d’être fait ou pas sur votre cluster. Par exemple, on peut déclarer des règles qui vont empêcher :
- les objets Ingress de différents namespace de partager le même nom d’hôte.
- la récupération d’images docker hors de certaines registry.
Il existe des exemples de règles applicables ici.