本文档采用自动化机器翻译技术翻译。 尽管我们力求提供准确的译文,但不对翻译内容的完整性、准确性或可靠性作出任何保证。 若出现任何内容不一致情况,请以原始 英文 版本为准,且原始英文版本为权威文本。

这是尚未发布的文档。 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 策略,因此必须指定它期望的执行模式,opagatekeeper。 该策略采用`opa`风格编写,返回一个完整的`AdmissionReview`对象。

  • 注解:元数据存储在策略本身中。

请继续注解您的策略:

$ 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

您的 Rego 策略,针对 OPA 框架,具备在生产环境中部署所需的一切,通过创建一个 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。