Les objets de contrainte Policy Controller vous permettent d'appliquer des règles à vos clusters Kubernetes. Pour tester vos règles, vous pouvez ajouter une action d'application à vos contraintes. Vous pouvez ensuite afficher les non-respects dans les objets de contrainte et les journaux.
Types d'actions d'application
Il existe trois actions d'application : deny
, dryrun
et warn
.
deny
est l'action d'application par défaut. Elle est automatiquement activée, même si vous n'ajoutez pas d'action d'application dans votre contrainte. Utilisez deny
pour éviter qu'une opération de cluster donnée ne se produise en cas de non-respect.
dryrun
vous permet de surveiller les non-respects de vos règles sans bloquer activement les transactions. Elle vous permet de vérifier que vos contraintes fonctionnent comme prévu, avant d'activer l'application active à l'aide de l'action deny
. Tester les contraintes de cette manière peut éviter les perturbations causées par une contrainte mal configurée.
warn
est semblable à dryrun
, mais fournit également un message immédiat sur les violations qui se produisent au moment de l'admission.
Lorsque vous testez de nouvelles contraintes ou effectuez des actions de migration (comme la mise à niveau des plates-formes), il est recommandé de passer les actions d'application de deny
à warn
ou dryrun
afin de pouvoir vérifier que vos règles fonctionnent comme prévu.
Ajouter des actions d'application
Vous pouvez ajouter enforcementAction: deny
ou enforcementAction: dryrun
à une contrainte.
L'exemple de contrainte suivant, nommé audit.yaml
, ajoute l'action dryrun
.
#audit.yaml
apiVersion: constraints.gatekeeper.sh/v1beta1
kind: K8sPSPAllowedUsers
metadata:
name: user-must-be-3333
spec:
enforcementAction: dryrun
match:
kinds:
- apiGroups: [""]
kinds: ["Pod"]
parameters:
runAsUser:
rule: MustRunAs
ranges:
- min: 3333
max: 3333
Créez la contrainte. Par exemple, appliquez-le à l'aide de kubectl apply -f
:
kubectl apply -f audit.yaml
Afficher les résultats d'audit
Les non-respects contrôlées sont ajoutés aux objets Contraintes et sont également écrits dans les journaux. Les non-respects refusés par le contrôleur d'admission n'apparaissent pas dans les journaux.
Afficher les résultats d'audit dans les objets de contrainte
Pour afficher les non-respects d'une contrainte donnée, exécutez la commande suivante et affichez les champs spec.status
.
kubectl get constraint-kind constraint-name -o yaml
Exemple
Pour afficher le résultat de la contrainte de audit.yaml
, exécutez la commande suivante :
kubectl get K8sPSPAllowedUsers user-must-be-3333 -o yaml
Le résultat renvoyé ressemble à ceci :
apiVersion: constraints.gatekeeper.sh/v1beta1
kind: K8sPSPAllowedUsers
metadata:
creationTimestamp: "2020-05-22T01:34:22Z"
generation: 1
name: user-must-be-3333
resourceVersion: "13351707"
selfLink: /apis/constraints.gatekeeper.sh/v1beta1/k8spspallowedusers/user-must-be-3333
uid: 5d0b39a8-9bcc-11ea-bb38-42010a80000c
spec:
enforcementAction: dryrun
match:
kinds:
- apiGroups:
- ""
kinds:
- Pod
parameters:
runAsUser:
ranges:
- max: 3333
min: 3333
rule: MustRunAs
status:
auditTimestamp: "2020-05-22T01:39:05Z"
byPod:
- enforced: true
id: gatekeeper-controller-manager-6b665d4c4d-lwnz5
observedGeneration: 1
totalViolations: 5
violations:
- enforcementAction: dryrun
kind: Pod
message: Container git-sync is attempting to run as disallowed user 65533
name: git-importer-86564db8cb-5r4gs
namespace: config-management-system
- enforcementAction: dryrun
kind: Pod
message: Container manager is attempting to run as disallowed user 1000
name: gatekeeper-controller-manager-6b665d4c4d-lwnz5
namespace: gatekeeper-system
- enforcementAction: dryrun
kind: Pod
message: Container kube-proxy is attempting to run without a required securityContext/runAsUser
name: kube-proxy-gke-fishy131-default-pool-7369b17c-cckf
namespace: kube-system
- enforcementAction: dryrun
kind: Pod
message: Container kube-proxy is attempting to run without a required securityContext/runAsUser
name: kube-proxy-gke-fishy131-default-pool-7369b17c-jnhb
namespace: kube-system
- enforcementAction: dryrun
kind: Pod
message: Container kube-proxy is attempting to run without a required securityContext/runAsUser
name: kube-proxy-gke-fishy131-default-pool-7369b17c-xrd8
namespace: kube-system
Afficher les résultats d'audit dans les journaux
Vous pouvez utiliser l'explorateur de journaux pour récupérer, afficher et analyser les données des journaux de Policy Controller.
Pour obtenir tous les journaux Policy Controller, exécutez la commande suivante :
kubectl logs -n gatekeeper-system -l gatekeeper.sh/system=yes
Les résultats d'audit contiennent "process":"audit"
dans les lignes de journal. Vous pouvez donc acheminer la sortie vers une autre commande et filtrer les lignes en fonction de ces lignes. Par exemple, vous pouvez utiliser jq
, qui analyse les fichiers JSON et vous permet de définir un filtre pour un type de journal spécifique.
Exemple de résultat d'audit à partir de la journalisation :
{
"level":"info",
"ts":1590111401.9769812,
"logger":"controller",
"msg":"Container kube-proxy is attempting to run without a required securityContext/runAsUser",
"process":"audit",
"audit_id":"2020-05-22T01:36:24Z",
"event_type":"violation_audited",
"constraint_kind":"K8sPSPAllowedUsers",
"constraint_name":"user-must-be-3333",
"constraint_namespace":"",
"constraint_action":"dryrun",
"resource_kind":"Pod",
"resource_namespace":"kube-system",
"resource_name":"kube-proxy-gke-fishy131-default-pool-7369b17c-xrd8"
}
Étape suivante
- En savoir plus sur la création de contraintes
- Utiliser la bibliothèque de modèles de contraintes
- Utiliser des contraintes au lieu de règles PodSecurityPolicies