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

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

でOPAポリシーを配布するSUSE Security Admission Controller

あなたはRegoポリシーを作成し、ビルドし、実行しました。 今、ポリシーを配布する時です。

ポリシーには注釈を付ける必要があるため、で実行できるようになります`policy-server`。 `policy-server`は、Kubernetesクラスターで実行されるときにポリシーを実行する部分です。

ポリシーの注釈付け

ポリシーに注釈を付けることは、関連情報でポリシーメタデータを豊かにするプロセスです。 作者情報、ライセンス、ソースコードの場所、ルールなど、ポリシーが理解し、評価するリソースの種類を説明します。

ポリシーに注釈を付けるには、`metadata.yaml`ファイルを作成する必要があります:

rules:
- apiGroups: [""]
  apiVersions: ["*"]
  resources: ["*"]
  operations: ["CREATE"]
mutating: false
contextAware: false
executionMode: opa
annotations:
  io.kubewarden.policy.title: no-default-namespace
  io.kubewarden.policy.version: 0.1.0 # should match the OCI tag
  io.kubewarden.policy.description: This policy will reject any resource created inside the default namespace
  io.kubewarden.policy.author: The SUSE Security Admission Controller Authors
  io.kubewarden.policy.url: https://github.com/kubewarden/some-policy
  io.kubewarden.policy.source: https://github.com/kubewarden/some-policy
  io.kubewarden.policy.license: Apache-2.0
  io.kubewarden.policy.usage: |
      This policy is just an example.

      You can write interesting descriptions about the policy here.

いくつかの詳細を見ることができます:

  • ルール: このポリシーが対象としているリソース。

  • 変更型: このポリシーがリクエストに対して変更操作を行うかどうか。 この場合、単に検証しています。

  • コンテキスト対応: このポリシーがリクエストを評価するためにクラスターからのコンテキストを必要とするかどうか。

  • 実行モード: これはRegoポリシーであるため、`opa`または`gatekeeper`のいずれかの実行モードを指定することが必須です。 このポリシーは`opa`スタイルで書かれており、全体の`AdmissionReview`オブジェクトを返します。

  • Annotations:メタデータはポリシー自体に保存されています。

ポリシーに注釈を付けてください:

$ kwctl annotate policy.wasm --metadata-path metadata.yaml --output-path annotated-policy.wasm

今、を実行することでポリシーを検査できます`kwctl inspect annotated-policy.wasm`。

ポリシーをプッシュする

ポリシーに注釈が付けられたので、OCIレジストリにプッシュできます。

$ kwctl push annotated-policy.wasm registry.my-company.com/kubewarden/no-default-namespace:v0.0.1
Policy successfully pushed

OPAフレームワークをターゲットにしたRegoポリシーは、プロダクション環境へデプロイするために必要なすべてが揃っており、`ClusterAdmissionPolicy`を作成することでデプロイできます。 それを準備することもできます。 まず、ポリシーを`kwctl`ローカルストアにプルする必要があります:

$ kwctl pull registry://registry.my-company.com/kubewarden/no-default-namespace:v0.0.1
pulling policy...

それから`ClusterAdmissionPolicy`を作成してください。 この操作は、ポリシーに関するメタデータを考慮に入れます:

$ kwctl manifest registry://registry.my-company.com/kubewarden/no-default-namespace:v0.0.1 --type ClusterAdmissionPolicy
---
apiVersion: policies.kubewarden.io/v1alpha2
kind: ClusterAdmissionPolicy
metadata:
  name: generated-policy
spec:
  module: "registry://registry.my-company.com/kubewarden/no-default-namespace:v0.0.1"
  settings: {}
  rules:
    - apiGroups:
        - ""
      apiVersions:
        - "*"
      resources:
        - "*"
      operations:
        - CREATE
  mutating: false

今、この`ClusterAdmissionPolicy`を基にして、ターゲットとするリソースを指定するか、そのままKubernetesにデプロイすることもできます。