Controllo con vincoli

Policy Controller oggetti vincolo consente di applicare in modo forzato i criteri per i tuoi cluster Kubernetes. Per testare i tuoi Google Cloud, puoi aggiungere un'azione di applicazione ai tuoi vincoli. Puoi quindi e 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 attivata automaticamente, anche di non aggiungere un provvedimento nel vincolo. Usa deny per impedire un una determinata operazione di cluster in caso di violazione.

dryrun ti consente di monitorare le violazioni delle regole senza bloccare attivamente transazioni. Puoi utilizzarlo per verificare se i vincoli funzionano prima di abilitare l'applicazione attiva mediante l'azione deny. Test questo modo consente di evitare interruzioni causate da una configurazione errata di blocco.

warn è simile a dryrun, ma fornisce anche un messaggio immediato sull' violazioni che si verificano al momento dell'ammissione.

È consigliabile quando si testano nuovi vincoli o si eseguono azioni di migrazione, come l'upgrade delle piattaforme, per cambiare i provvedimenti da deny a warn oppure dryrun per verificare che i criteri funzionino come previsto.

Aggiunta di provvedimenti

Puoi aggiungere enforcementAction: deny o enforcementAction: dryrun a un di blocco.

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. Violazioni che I rifiuti del controller di ammissione non vengono visualizzati nei log.

Visualizzazione dei risultati dell'audit negli oggetti vincolo

Per vedere le violazioni di un determinato vincolo, esegui questo comando e visualizza il spec.status campi.

kubectl get constraint-kind constraint-name -o yaml

Esempio

Per visualizzare l'output del vincolo da audit.yaml, esegui il comando seguente 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 di 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

Nei risultati del controllo è presente "process":"audit" nelle righe del log, quindi puoi creare una pipeline l'output a un altro comando e filtrare in base a queste righe. Ad esempio: puoi utilizzare jq, che analizza i file JSON e ti 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