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

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

変更ポリシー

変更ポリシーの構造は、検証ポリシーと同じです:

  • `validate`および`validate_settings`のwaPC関数を登録する必要があります。

  • ホストとポリシー間で使用される通信APIは、検証ポリシーで使用されるものと同じです。

変更ポリシーはリクエストを受け入れ、`ValidationResponse`オブジェクトを返すことによって、受信オブジェクトの変更を提案できます。これは次のようになります:

{
  "accepted": true,
  "mutated_object": <object to be created>
}

`mutated_object`フィールドには、ポリシーがKubernetesクラスター内で作成したいオブジェクトが含まれており、JSONにシリアライズされています。

具体的な例

ポリシーがこの`ValidationRequest`を受け取ったと仮定します:

{
  "settings": {},
  "request": {
    "operation": "CREATE",
    "object": {
      "apiVersion": "v1",
      "kind": "Pod",
      "metadata": {
        "name": "security-context-demo-4"
      },
      "spec": {
        "containers": [
        {
          "name": "sec-ctx-4",
          "image": "gcr.io/google-samples/node-hello:1.0",
          "securityContext": {
            "capabilities": {
              "add": ["NET_ADMIN", "SYS_TIME"]
            }
          }
        }
        ]
      }
    }
  }
}

この例では、重要なフィールドのみが`request`オブジェクトに含まれています。

このリクエスト生成は、誰かが次のようなPodを作成しようとしたために発生します:

apiVersion: v1
kind: Pod
metadata:
  name: security-context-demo-4
spec:
  containers:
  - name: sec-ctx-4
    image: gcr.io/google-samples/node-hello:1.0
    securityContext:
      capabilities:
        add:
        - NET_ADMIN
        - SYS_TIME

ポリシーが次の`ValidationResponse`で応答すると仮定します:

{
  "accepted": true,
  "mutated_object": {
    "apiVersion": "v1",
    "kind": "Pod",
    "metadata": {
      "name": "security-context-demo-4"
    },
    "spec": {
      "containers": [
        {
          "name": "sec-ctx-4",
          "image": "gcr.io/google-samples/node-hello:1.0",
          "securityContext": {
            "capabilities": {
              "add": [
                "NET_ADMIN",
                "SYS_TIME"
              ],
              "drop": [
                "BPF"
              ]
            }
          }
        }
      ]
    }
  }
}

それはリクエストの受け入れにつながりますが、最終的なPodは次のようになります:

apiVersion: v1
kind: Pod
metadata:
  name: security-context-demo-4
spec:
  containers:
  - name: sec-ctx-4
    image: gcr.io/google-samples/node-hello:1.0
    securityContext:
      capabilities:
        add:
        - NET_ADMIN
        - SYS_TIME
        drop:
        - BPF

ご覧の通り、ポリシーはPod内で宣言された唯一のコンテナの`securityContext.capabilities.drop`セクションを変更しました。

コンテナは、ポリシーのために`BPF`機能を失っています。

要約

変更ポリシーが実装しなければならない関数は次のとおりです:

waPC関数名 入力ペイロード 出力ペイロード

validate

\{ "request": \{ // AdmissionReview.request data \}, "settings": \{ // your policy configuration \}\}

\{ // mandatory "accepted": boolean, // optional, ignored if accepted // recommended for rejections "message": string, // optional, ignored if accepted "code": integer, // JSON Object to be created // Can be used only when the // request is accepted "mutated_object": object\}

validate_settings

\{ // your policy configuration\}

\{ // mandatory "validate": boolean, // optional, ignored if accepted // recommended for rejections "message": string,\}