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

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

ValidatingAdmissionPolicyマイグレーション

Kubernetes v1.26以降、https://kubernetes.io/docs/reference/access-authn-authz/validating-admission-policy/[ValidatingAdmissionPolicy]は、KubernetesでカスタムAdmissionポリシーを記述する方法を提供します。ポリシーは、https://cel.dev/[Common Expression Language (CEL)]を使用して記述され、いくつかのhttps://kubernetes.io/docs/reference/using-api/cel/[Kubernetes特有の拡張]が追加されています。 ValidatingAdmissionPolicyはKubernetes v1.30で安定版となりました。

SUSE Security Admission Controllerは、変更なしでKubernetes VAPポリシーを実行できるCELポリシーを提供します。 CELポリシーに関する詳細は、Admission Controllerのドキュメント内のこのセクションでご覧いただけます。 この段落は、Admission Controllerを使用してVAPポリシーを実行する利点を説明します。

このガイドでは、`kwctl`ツールを使用してVAPポリシーをAdmission Controllerに移行する方法を説明します。

移行手順

このガイドに従うには、`kwctl`のバージョン1.14.0以上を使用する必要があります。

次のYAML定義を含むファイルが与えられた場合、ValidatingAdmissionPolicy:

`ValidatingAdmissionPolicy`定義
apiVersion: admissionregistration.k8s.io/v1
kind: ValidatingAdmissionPolicy
metadata:
  name: "force-liveness-probe"
spec:
  failurePolicy: Fail
  variables:
    - name: containers_without_liveness_probe
      expression: |
        object.spec.template.spec.containers.filter(c, !has(c.livenessProbe)).map(c, c.name)
  matchConstraints:
    resourceRules:
      - apiGroups: ["apps"]
        apiVersions: ["v1"]
        operations: ["CREATE", "UPDATE"]
        resources: ["deployments"]
  validations:
    - expression: |
        size(variables.containers_without_liveness_probe) == 0
      messageExpression: |
        'These containers are missing a liveness probe: ' + variables.containers_without_liveness_probe.join(' ')
      reason: Invalid

および`ValidatingAdmissionPolicyBinding`リソースを含むファイルがある場合:

`ValidatingAdmissionPolicyBinding`定義
apiVersion: admissionregistration.k8s.io/v1
kind: ValidatingAdmissionPolicyBinding
metadata:
  name: "kw-scaffold-demo"
spec:
  policyName: "force-liveness-probe"
  validationActions: [Deny]
  matchResources:
    namespaceSelector:
      matchLabels:
        docs.kubewarden.io/vap-migration: enabled

次の手順に従って、ポリシーをAdmission Controllerに移行できます:

ポリシー移行のための`kwctl`コマンド
$ kwctl scaffold vap \
    -p vap.yml \
    -b vap-binding.yml

コマンドは、次のような出力を生成します:

マイグレーションからの出力
apiVersion: policies.kubewarden.io/v1
kind: ClusterAdmissionPolicy
metadata:
  name: kw-scaffold-demo
spec:
  module: ghcr.io/kubewarden/policies/cel-policy:latest
  settings:
    failurePolicy: Fail
    variables:
      - expression: |
          object.spec.template.spec.containers.filter(c, !has(c.livenessProbe)).map(c, c.name)
        name: containers_without_liveness_probe
    validations:
      - expression: |
          size(variables.containers_without_liveness_probe) == 0
        messageExpression: |
          'These containers are missing a liveness probe: ' + variables.containers_without_liveness_probe.join(' ')
        reason: Invalid
  rules:
    - apiGroups:
        - apps
      apiVersions:
        - v1
      resources:
        - deployments
      operations:
        - CREATE
        - UPDATE
  mutating: false
  namespaceSelector:
    matchLabels:
      docs.kubewarden.io/vap-migration: enabled

このコマンドは、CELポリシーの`latest`バージョンの使用についてユーザーに警告します。

024-06-24T16:00:16.516062Z  WARN kwctl::scaffold:
  Using the 'latest' version of the CEL policy could lead to unexpected behavior.
  It is recommended to use a specific version to avoid breaking changes.

破壊的な変更を避けるために、特定のバージョンを使用することをお勧めします。

このように`--cel-policy`フラグを使用してこれを行うことができます。

$ kwctl scaffold vap \
    --cel-policy ghcr.io/kubewarden/policies/cel-policy:v1.0.1 \
    -p vap.yml \
    -b vap-binding.yml