Gli oggetti vincolo di Policy Controller consentono di applicare i criteri per i cluster Kubernetes. Per testare i criteri, puoi aggiungere un'azione di applicazione ai vincoli. Puoi quindi visualizzare le violazioni negli oggetti dei vincoli e nei log.
Tipi di provvedimenti
Sono previsti tre provvedimenti: deny
, dryrun
e warn
.
deny
è il provvedimento predefinito. Viene abilitato automaticamente, anche se
non aggiungi un'azione di applicazione nel vincolo. Usa deny
per evitare che una determinata operazione del cluster si verifichi in caso di violazione.
dryrun
ti consente di monitorare le violazioni delle regole senza bloccare
attivamente le transazioni. Puoi utilizzarlo per verificare se i vincoli funzionano come previsto, prima di abilitare l'applicazione attiva utilizzando l'azione deny
. Testando i vincoli in questo modo puoi evitare interruzioni causate da un vincolo configurato in modo errato.
warn
è simile a dryrun
, ma fornisce anche un messaggio immediato sulle
violazioni che si verificano al momento dell'ammissione.
Quando testi nuovi vincoli o esegui azioni di migrazione, come l'upgrade delle piattaforme, ti consigliamo di cambiare le azioni di applicazione da deny
a warn
o dryrun
in modo da poter verificare che i criteri funzionino come previsto.
Aggiunta di provvedimenti
Puoi aggiungere enforcementAction: deny
o enforcementAction: dryrun
a un
vincolo.
Il vincolo di esempio seguente, denominato audit.yaml
, aggiunge l'azione 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
Crea il vincolo. Ad esempio, applicalo utilizzando kubectl apply -f
:
kubectl apply -f audit.yaml
Visualizzazione dei risultati del controllo
Le violazioni controllate vengono aggiunte agli oggetti Vincolo e vengono anche scritte nei log. Le violazioni rifiutate dal controller di ammissione non vengono visualizzate nei log.
Visualizzazione dei risultati dell'audit negli oggetti vincolo
Per vedere le violazioni di un determinato vincolo, esegui questo comando e visualizza i campi spec.status
.
kubectl get constraint-kind constraint-name -o yaml
Esempio
Per visualizzare l'output del vincolo da audit.yaml
, esegui questo comando:
kubectl get K8sPSPAllowedUsers user-must-be-3333 -o yaml
L'output che vedi è simile al seguente:
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
Visualizzazione dei risultati degli audit nei log
Puoi utilizzare Esplora log per recuperare, visualizzare e analizzare i dati dei log per Policy Controller.
Per ottenere tutti i log di Policy Controller, esegui questo comando:
kubectl logs -n gatekeeper-system -l gatekeeper.sh/system=yes
I risultati dell'audit contengono "process":"audit"
nelle righe di log, quindi puoi indirizzare l'output a un altro comando e filtrare in base a queste righe. Ad esempio, potresti utilizzare jq
, che analizza i file JSON e consente di impostare un filtro per un tipo di log specifico.
Esempio di risultato del controllo del logging:
{
"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"
}
Passaggi successivi
- Scopri di più sulla creazione di vincoli
- Utilizza la libreria di modelli di vincolo
- Scopri come utilizzare i vincoli invece di PodSecurityPolicies