この文書は自動機械翻訳技術を使用して翻訳されています。 正確な翻訳を提供するように努めておりますが、翻訳された内容の完全性、正確性、信頼性については一切保証いたしません。 相違がある場合は、元の英語版 英語 が優先され、正式なテキストとなります。

これは未公開の文書です Admission Controller 1.34-dev.

新しいGatekeeper Regoポリシーを作成する

このチュートリアルでは、Open Policy Agentで作成したのと同じポリシーを実装します。 具体的には、`default`ネームスペースをターゲットにするリソースを拒否するポリシーです。

既存のポリシーを移植するためのベースとして使用できるhttps://github.com/kubewarden/gatekeeper-policy-template[リポジトリテンプレート]があります。

要件

必要なツールは次のとおりです:

  • opa

  • kwctl

ポリシー

Gatekeeperポリシーは、違反オブジェクトを0個以上返す必要があります。 違反が報告されない場合、リクエストは受け入れられます。 1つ以上の違反が報告された場合、リクエストは拒否されます。

`rego-policy`という名前の新しいディレクトリを作成します。 その中に、次の内容を持つ`policy.rego`ファイルを作成します:

package policy

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

この場合、エントリポイントは`policy/violation`であり、Regoの動作により、ポリシーは次の結果を持つことができます:

  • 1つの違反を返す:レビューされたオブジェクトがデフォルトのネームスペースをターゲットにしています。

  • 0の違反を返す:レビューされたオブジェクトがポリシーに準拠しています。

このポリシーを、Open Policy Agentセクションで作成したものと比較してみてください。 そのポリシーは、全体の`AdmissionReview`レスポンスを構築する必要があり、入力はわずかに異なっていました。 ゲートキーパー モードでは、AdmissionRequest オブジェクトに input.review 属性が提供されます。 AdmissionRequest のすべての属性は object とともに読み取ることができます。

次のセクションで評価するリクエストを作成できます。

最初に、`data`ディレクトリ内に次の内容を持つ`default-ns.json`ファイルを作成します。

{
  "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"
      }
    }
  }
}

今度は、default とは異なるネームスペースをターゲットにした別の AdmissionReview オブジェクトを作成します。 このファイルに other-ns.json という名前を付けてください。 以下の内容があります:

{
  "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"
      }
    }
  }
}

これにより、other というネームスペースの下で別のポッド作成リクエストがシミュレートされることがわかります。