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

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

ValidatingAdmissionPolicyの再利用

Kubernetesの標準https://kubernetes.io/docs/reference/access-authn-authz/validating-admission-policy[Validatingポリシー]は、以下のリソースで構成されています:

  • ValidatingAdmissionPolicy:CELのロジックを説明します。オプションで、`spec.paramKind`内のパラメータも受け入れます。

  • ValidatingAdmissionPolicyBinding:ポリシーのスコープを設定します。

具体的な例を見てみましょう。これらおよび他のものは、SUSE Security Admission Controllerの`cel-policy`とともに、少ない労力で再利用できます。

ValidatingAdmissionPolicy

以下のValidatingAdmissionPolicyは、https://kubernetes.io/docs/reference/access-authn-authz/validating-admission-policy/#creating-a-validatingadmissionpolicy[Kubernetesのドキュメント]をもとに作られています。

このポリシーは、デプロイメントのReplicasの数がデフォルト値`maxreplicas`で5以下かどうかをチェックします。ユーザーは、ネームスペースまたはデプロイメントごとにこのデフォルトを上書きし、パラメータを使用してより小さい数を選択できます。

これは`ValidatingAdmissionPolicyBinding`にバインドされています。したがって、`environment`が`test`に設定されているラベルを持つネームスペースにのみ影響します。

./vap-policy-example.yaml
apiVersion: admissionregistration.k8s.io/v1
kind: ValidatingAdmissionPolicy
metadata:
  name: "replicalimit-policy.example.com"
spec:
  failurePolicy: Fail # (1)
  matchConstraints: # (2)
    resourceRules:
      - apiGroups: ["apps"]
        apiVersions: ["v1"]
        operations: ["CREATE", "UPDATE"]
        resources: ["deployments"]
  variables: # (3)
    - name: maxReplicas # hardcoded global default
      expression: int(5)
  paramKind: # (4)
    apiVersion: v1
    kind: ConfigMap # user-provided override
  validations: # (5)
    - expression: |
        object.spec.replicas <= (
          has(params.data.overrideReplicas) && int(params.data.overrideReplicas) < variables.maxReplicas
          ? int(params.data.overrideReplicas)
          : variables.maxReplicas
        )
      messageExpression: |
        'The number of replicas must be less than or equal to ' +
        string( has(params.data.overrideReplicas) && int(params.data.overrideReplicas) < variables.maxReplicas
          ? int(params.data.overrideReplicas)
          : variables.maxReplicas)
---
apiVersion: admissionregistration.k8s.io/v1
kind: ValidatingAdmissionPolicyBinding
metadata:
  name: "replicalimit-binding-test.example.com"
spec:
  policyName: "replicalimit-policy.example.com"
  validationActions: [Deny] # (7)
  matchResources: # (8)
    namespaceSelector:
      matchLabels:
        environment: test
  paramRef: # (4)
    name: "replica-limit-override"
    namespace: "test"
    parameterNotFoundAction: Deny
---
apiVersion: v1
kind: ConfigMap
metadata:
  name: replica-limit-override
  namespace: test
data:
  overrideReplicas: "3"

ここでは、同等のAdmission Controllerポリシーがあります:

Admission Controllerの`cel-policy`

./cel-policy-example.yaml
apiVersion: policies.kubewarden.io/v1
kind: ClusterAdmissionPolicy
metadata:
  annotations:
    io.kubewarden.policy.category: Resource validation # (9)
    io.kubewarden.policy.severity: low # (9)
  name: "cel-policy-replica-example"
spec:
  module: registry://ghcr.io/kubewarden/policies/cel-policy:v1.4.0
  failurePolicy: Fail # (6). Webhook behavior. Defaults to "Fail"
  mode: protect # (7). Defaults to "protect"
  rules: # (2)
    - apiGroups: ["apps"]
      apiVersions: ["v1"]
      operations: ["CREATE", "UPDATE"]
      resources: ["deployments"]
  contextAwareResources: # (10). Fine-grained perms for accessing resources
    - apiVersion: v1
      kind: ConfigMap
  settings:
    failurePolicy: Fail # (1). CEL behavior. Defaults to "Fail"
    variables: # (3)
      - name: "replicas"
        expression: "object.spec.replicas"
      - name: maxReplicas
        expression: int(5)
    paramKind: # (4)
      apiVersion: v1
      kind: ConfigMap # user-provided override
    paramRef: # (4)
      name: "replica-limit-override"
      namespace: "test"
      parameterNotFoundAction: Deny
    validations: # (5)
      - expression: |
          object.spec.replicas <= (
            has(params.data.overrideReplicas) && int(params.data.overrideReplicas) < variables.maxReplicas
            ? int(params.data.overrideReplicas)
            : variables.maxReplicas
          )
        messageExpression: |
          'The number of replicas must be less than or equal to ' +
          string( has(params.data.overrideReplicas) && int(params.data.overrideReplicas) < variables.maxReplicas
            ? int(params.data.overrideReplicas)
            : variables.maxReplicas)
  backgroundAudit: true # (9). Defaults to "true"
  namespaceSelector: # (8)
    matchLabels:
      environment: test
---
apiVersion: v1
kind: ConfigMap
metadata:
  name: replica-limit-override
  namespace: test
data:
  overrideReplicas: "3"

YAMLマニフェストの両方にコメントされた番号に注意してください。それらを詳しく説明しましょう:

# VAPフィールド `cel-policy`フィールド 説明

1

failurePolicy

settings.failurePolicy

CELの動作、CEL式が偽に評価される場合、CELランタイムエラーが発生する場合、または無効または誤って構成されたCELがある場合。例えば、偽を返すCEL式、パラメータの欠如、または変数の欠如です。(6)と混同しないでください。

2

matchConstraints

rules

両方は、ポリシーが適用されるリソースの種類を通知する同じhttps://kubernetes.io/docs/reference/generated/kubernetes-api/v1.28/#rulewithoperations-v1-admissionregistration[RuleWithOperations]を受け入れます。

3

variables

settings.variables

Admission Controllerの`cel-policy`では、変数を定義する式は`settings.variables`にあります。それを除けば、同等です。

4

paramKind,paramRef

settings.paramKind,settings.paramRef

Admission Controllerの`cel-policy`では、パラメータ定義は`settings.paramKind`、`settings.paramRef`にあります。それを除けば、同等です。

5

validations

settings.validations

Admission Controllerの`cel-policy`では、検証を定義する式は`settings.validations`にあります。それを除けば、同等です。

6

---

failurePolicy

Webhookの動作、Kubernetes API Webhookエラーまたはタイムアウト、またはmatchConditionsの評価について。(1)と混同しないでください。

7

validationActions

mode

`mode`には`protect`と`monitor`のオプションがあります。監査はAdmission Controllerでより多機能です、(9)を参照してください。

8

matchResources

namespaceSelectorobjectSelector

セレクターを使用して制約を定義する方法。Admission Controllerのポリシーは、それらを`namespaceSelector`や`objectSelector`として持っています。

9

auditAnnotations(画像なし)

backgroundAudit、注釈

Admission Controller フィールドを使用して、Audit Scanner のポリシー使用を設定し、そのカテゴリと重大度を OpenReports に設定します。

10

---

`contextAwareResources`権限

Admission Controllerのポリシーは、クラスターリソースの読み取りに対して細かい権限を持っています。ここでは、パラメータを読み取るために使用されます。

matchConditions

matchConditions

Admission Controllerのポリシーには matchConditions (この例には表示されていません) があります。

---

Admission Controller のみの機能

他の機能については、チュートリアル CEL の残りの例を参照してください。

`kwctl`ツールを使用して、VAP ポリシーを Admission Controller に移行できます。

この VAP 移行ハウツー では、どのように行うかを説明しています。

まだ実装されていない同等物

まだ実装されていない VAP 機能があります。それを楽しみにしている場合は、お問い合わせください。以下の要素で構成されています。

ポリシーの適用

通常通り、マニフェストをインスタンス化することでポリシーをデプロイできます:

$ kubectl apply -f ./cel-policy-example.yaml

そして、デプロイメントをインスタンス化することでテストします:

$ kubectl apply -f - <<EOF
apiVersion: v1
kind: Namespace
metadata:
  name: test
  labels:
    environment: test
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
  namespace: test
spec:
  replicas: 6
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.14.2
EOF

namespace/test created
Error from server: error when creating "STDIN":
  admission webhook "clusterwide-cel-policy-replica-example.kubewarden.admission" denied the request:
  The number of replicas must be less than or equal to 5