Dies ist eine unveröffentlichte Dokumentation für Admission Controller 1.37-dev.

Verteilen einer Gatekeeper-Richtlinie mit SUSE Security Admission Controller

Richtlinien müssen annotiert werden, damit sie gepusht und schließlich von der SUSE Security Admission Controller policy-server in einem Kubernetes-Cluster ausgeführt werden können.

Das Annotieren und Verteilen einer Gatekeeper-Richtlinie ist ähnlich wie das Verteilen einer Open Policy Agent-Richtlinie.

Die Richtlinie annotieren

Sie werden eine metadata.yaml-Datei in Ihrem Richtlinienverzeichnis mit folgendem Inhalt schreiben:

rules:
- apiGroups: [""]
  apiVersions: ["*"]
  resources: ["*"]
  operations: ["CREATE"]
mutating: false
contextAware: false
executionMode: gatekeeper
annotations:
  io.kubewarden.policy.title: no-default-namespace
  io.kubewarden.policy.version: 0.1.0 # should match the OCI tag
  io.kubewarden.policy.description: This policy will reject any resource created inside the default namespace
  io.kubewarden.policy.author: The Admission Controller Authors
  io.kubewarden.policy.url: https://github.com/kubewarden/some-policy
  io.kubewarden.policy.source: https://github.com/kubewarden/some-policy
  io.kubewarden.policy.license: Apache-2.0
  io.kubewarden.policy.usage: |
      This policy is just an example.

      You can write interesting descriptions about the policy here.

Sie können sehen, dass alles dasselbe ist wie die Metadaten der Open Policy Agent-Version, außer für den executionMode: gatekeeper-Teil.

Fahren Sie fort und annotieren Sie die Richtlinie:

$ kwctl annotate policy.wasm --metadata-path metadata.yaml --output-path annotated-policy.wasm

Die Richtlinie pushen

Pushen Sie Ihre Richtlinie in eine OCI-Registry:

$ kwctl push annotated-policy.wasm registry.my-company.com/kubewarden/no-default-namespace-gatekeeper:v0.0.1
Policy successfully pushed

Bereitstellung auf Kubernetes

Sie müssen Ihre Richtlinie zuerst in Ihren kwctl lokalen Speicher ziehen:

$ kwctl pull registry://registry.my-company.com/kubewarden/no-default-namespace-gatekeeper:v0.0.1
pulling policy...

Sie können jetzt eine Scaffold-ClusterAdmissionPolicy-Ressource erstellen:

$ kwctl scaffold manifest registry://registry.my-company.com/kubewarden/no-default-namespace-gatekeeper:v0.0.1 --type ClusterAdmissionPolicy
---
apiVersion: policies.kubewarden.io/v1alpha2
kind: ClusterAdmissionPolicy
metadata:
  name: generated-policy
spec:
  module: "registry://registry.my-company.com/kubewarden/no-default-namespace-gatekeeper:v0.0.1"
  settings: {}
  rules:
    - apiGroups:
        - ""
      apiVersions:
        - "*"
      resources:
        - "*"
      operations:
        - CREATE
  mutating: false

Verwenden Sie jetzt diese ClusterAdmissionPolicy-Ressource, um Ihre Richtlinie in einem Kubernetes-Cluster bereitzustellen.