Dieses Dokument wurde mithilfe automatisierter maschineller Übersetzungstechnologie übersetzt. Wir bemühen uns um korrekte Übersetzungen, übernehmen jedoch keine Gewähr für die Vollständigkeit, Richtigkeit oder Zuverlässigkeit der übersetzten Inhalte. Im Falle von Abweichungen ist die englische Originalversion maßgebend und stellt den verbindlichen Text dar.

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

Erstellen einer neuen Gatekeeper Rego-Richtlinie

Für dieses Tutorial implementieren Sie die gleiche Richtlinie, die Sie mit Open Policy Agent geschrieben haben. Nämlich eine Richtlinie, die eine Ressource ablehnt, wenn sie auf den default Namespace abzielt.

Es gibt eine Repository-Vorlage, die Sie als Basis verwenden können, um eine vorhandene Richtlinie zu portieren.

Anforderungen

Sie benötigen die folgenden Tools:

  • opa

  • kwctl

Die Richtlinie

Gatekeeper-Richtlinien müssen keine oder mehrere Verstöße zurückgeben. Wenn keine Verstöße gemeldet werden, wird die Anfrage akzeptiert. Wenn ein oder mehrere Verstöße gemeldet werden, wird die Anfrage abgelehnt.

Erstellen Sie ein neues Verzeichnis mit dem Namen rego-policy. Erstellen Sie darin eine policy.rego-Datei mit dem Inhalt:

package policy

violation[{"msg": msg}] {
        input.review.object.metadata.namespace == "default"
        msg := "it is forbidden to use the default namespace"
}

In diesem Fall ist der Einstiegspunkt policy/violation, und aufgrund der Funktionsweise von Rego kann die Richtlinie die folgenden Ergebnisse haben:

  • 1 Verstoß zurückgeben: das überprüfte Objekt zielt auf den Standard-Namespace ab.

  • 0 Verstöße zurückgeben: das überprüfte Objekt entspricht der Richtlinie.

Nehmen Sie sich einen Moment Zeit, um diese Richtlinie mit der in der Open Policy Agent-Sektion geschriebenen zu vergleichen. Diese musste die gesamte AdmissionReview Antwort erstellen, und die Eingaben waren leicht unterschiedlich. Im Gatekeeper-Modus wird das AdmissionRequest-Objekt mit dem input.review-Attribut bereitgestellt. Alle Attribute des AdmissionRequest sind zusammen mit object lesbar.

Jetzt können Sie die Anfragen erstellen, die im nächsten Abschnitt bewertet werden sollen.

Zuerst erstellen Sie eine default-ns.json-Datei mit den folgenden Inhalten im data-Verzeichnis:

{
  "apiVersion": "admission.k8s.io/v1",
  "kind": "AdmissionReview",
  "request": {
    "uid": "1299d386-525b-4032-98ae-1949f69f9cfc",
    "operation": "CREATE",
    "object": {
      "kind": "Pod",
      "apiVersion": "v1",
      "metadata": {
        "name": "nginx",
        "namespace": "default",
        "uid": "04dc7a5e-e1f1-4e34-8d65-2c9337a43e64"
      }
    }
  }
}

Erstellen Sie jetzt ein weiteres AdmissionReview-Objekt, das diesmal auf einen anderen Namespace als den default abzielt. Nennen Sie diese Datei other-ns.json. Es enthält die folgenden Inhalte:

{
  "apiVersion": "admission.k8s.io/v1",
  "kind": "AdmissionReview",
  "request": {
    "uid": "1299d386-525b-4032-98ae-1949f69f9cfc",
    "operation": "CREATE",
    "object": {
      "kind": "Pod",
      "apiVersion": "v1",
      "metadata": {
        "name": "nginx",
        "namespace": "other",
        "uid": "04dc7a5e-e1f1-4e34-8d65-2c9337a43e64"
      }
    }
  }
}

Sie können sehen, dass dies eine weitere Pod-Erstellungsanfrage simuliert, diesmal unter einem Namespace namens other.