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

这是尚未发布的文档。 Admission Controller 1.34-dev.

常用任务

这描述了在您 安装 SUSE Security Admission Controller 后在 Kubernetes 集群中常见的任务。

这些单独的任务是按逻辑顺序排列的。

测试策略

Admission Controller 使用两个工具来帮助您查找策略并在本地测试它们:

  • Artifact Hub,使用他们针对 Admission Controller 策略的软件包过滤器

  • kwctl,一个 CLI 工具

Artifact hub

Artifact hub 托管社区贡献的策略。例如,您可以找到由 Admission Controller 开发者创建的 已弃用的 Kubernetes Pod 安全策略 的替代品。

如下面的截图所示,一旦您找到感兴趣的策略,选择 Install 按钮并使用 kwctl 获取您集群的策略。

Artifact Hub

以前,Admission Controller 策略可以在 Admission Controller 策略中心 找到。这已经被 退役。 现在可以从 https://artifacthub.io 获取策略。

kwctl CLI 工具

kwctl 是 Admission Controller 的 CLI 工具,供策略作者和集群管理员在应用于 Kubernetes 集群之前测试策略。

该工具的界面与 docker CLI 工具类似。

使用案例

您可以使用 kwctl 来帮助处理这些场景:

作为策略作者

  • 对您的策略进行端到端测试:测试您的策略以应对精心设计的Kubernetes请求,并确保您的策略按预期行为运行。您甚至可以测试需要访问正在运行的集群的上下文感知策略。

  • 在您的Wasm模块中嵌入元数据:二进制文件包含其执行所需权限的注释。您可以使用`kwctl`检查和修改这些注释。

  • 将策略发布到OCI注册表:该二进制文件是完全合规的OCI对象,可以存储在OCI注册表中。

作为集群管理员

  • 检查远程策略:给定在OCI注册表或HTTP服务器中的策略,显示该策略的所有静态信息。

  • 在您的集群中进行策略的试运行:测试该策略以应对精心设计的Kubernetes请求,并确保该策略在您提供的输入数据下按预期行为运行。您还可以在试运行模式下测试需要访问正在运行的集群的上下文感知策略。

  • 为您的策略生成初始 ClusterAdmissionPolicy 脚手架: 生成一个 YAML 文件,包含所有必需的设置,可以使用 kubectl 应用到您的 Kubernetes 集群。

安装

kwctl 稳定版本的二进制文件可从 GitHub 储存库 获取。要从 GitHub kwctl 储存库 构建,您需要一个 Rust 开发环境。

用法

您可以通过运行以下命令列出所有的 kwctl 选项和子命令:

$ kwctl --help
kwctl 0.2.5
Admission Controller Developers <cncf-kubewarden-maintainers@lists.cncf.io>
Tool to manage Admission Controller policies

USAGE:
    kwctl [OPTIONS] <SUBCOMMAND>

OPTIONS:
    -h, --help       Print help information
    -v               Increase verbosity
    -V, --version    Print version information

SUBCOMMANDS:
    annotate       Add Admission Controller metadata to a WebAssembly module
    completions    Generate shell completions
    digest         Fetch the digest of its OCI manifest
    help           Print this message or the help of the given subcommand(s)
    inspect        Inspect Admission Controller policy
    policies       Lists all downloaded policies
    pull           Pulls a Admission Controller policy from a given URI
    push           Pushes a Admission Controller policy to an OCI registry
    rm             Removes a Admission Controller policy from the store
    run            Runs a Admission Controller policy from a given URI
    scaffold       Scaffold a Kubernetes resource or configuration file
    verify         Verify a Admission Controller policy from a given URI using Sigstore

以下是一些命令使用示例:

  • 列出策略:列出存储在本地 kwctl 注册表中的所有策略

    • 命令:kwctl policies

  • 获取策略:下载并将策略存储在本地 kwctl 存储中

    • 命令:kwctl pull <policy URI>

      $ kwctl pull registry://ghcr.io/kubewarden/policies/pod-privileged:v0.1.9
      
      $ kwctl policies
      +--------------------------------------------------------------+----------+---------------+--------------+----------+
      | Policy                                                       | Mutating | Context aware | SHA-256      | Size     |
      +--------------------------------------------------------------+----------+---------------+--------------+----------+
      | registry://ghcr.io/kubewarden/policies/pod-privileged:v0.1.9 | no       | no            | 59e34f482b40 | 21.86 kB |
      +--------------------------------------------------------------+----------+---------------+--------------+----------+
  • 了解策略的工作原理:检查策略元数据

    • 命令:kwctl inspect <policy URI>

        $ kwctl inspect registry://ghcr.io/kubewarden/policies/pod-privileged:v0.1.9
        Details
        title:              pod-privileged
        description:        Limit the ability to create privileged containers
        author:             Flavio Castelli
        url:                https://github.com/kubewarden/pod-privileged-policy
        source:             https://github.com/kubewarden/pod-privileged-policy
        license:            Apache-2.0
        mutating:           false
        context aware:      false
        execution mode:     kubewarden-wapc
        protocol version:   1
      
        Annotations
        io.kubewarden.kwctl 0.1.9
      
        Rules
        ────────────────────
        ---
        - apiGroups:
            - ""
          apiVersions:
            - v1
          resources:
            - pods
          operations:
            - CREATE
        ────────────────────
      
        Usage
        This policy doesn't have a configuration. Once enforced, it will reject
        the creation of Pods that have at least a privileged container defined.
  • 评估策略:评估策略,并在可用时找到匹配您要求的正确配置值。

    您需要对 Kubernetes REST APIs 有一定的了解。

    • 命令:kwctl run -r <"Kubernetes Admission request" file path> -s <"JSON document" file path> <policy URI>

    • 方案 1:

      • 请求评估:创建一个没有 'privileged' 容器的 pod

        $ kwctl run registry://ghcr.io/kubewarden/policies/pod-privileged:v0.1.9 -r unprivileged-pod-request.json
        {"uid":"C6E115F4-A789-49F8-B0C9-7F84C5961FDE","allowed":true,"status":{"message":""}}
      • 下载策略二进制文件的等效命令:

        `$ kwctl run file://$PWD/pod-privileged-policy.wasm -r unprivileged-pod-request.json
        {"uid":"C6E115F4-A789-49F8-B0C9-7F84C5961FDE","allowed":true,"status":{"message":""}}
      • 结果:该策略允许请求

    • 方案 2:

      • 请求评估:创建一个至少包含一个 'privileged' 容器的 pod

      • 命令:

        kwctl run registry://ghcr.io/kubewarden/policies/pod-privileged:v0.1.9 -r privileged-pod-request.json
      • 下载策略二进制文件的等效命令:kwctl run file://$PWD/pod-privileged-policy.wasm -r privileged-pod-request.json

      • 输出:

        {
          "uid": "8EE6AF8C-C8C8-45B0-9A86-CB52A70EC50D",
          "allowed": false,
          "status": { "message": "User 'kubernetes-admin' cannot schedule privileged containers" }
        }
      • 结果:该策略拒绝请求

    有关更复杂的示例,请参阅博客文章 向 Kubernetes 管理员介绍 kwctl

实施策略

您通过定义一个 ClusterAdmissionPolicy 来实施策略,然后使用 kubectl 将其部署到您的集群中。

kwctl 帮助从您想要实施的策略生成一个 ClusterAdmissionPolicy

在您生成了 ClusterAdmissionPolicy 并将其应用到您的集群后,您可以按照下面的 快速入门 中描述的步骤进行操作:

  • 从策略 ClusterAdmissionPolicy 生成 manifest 并将其保存到文件中

    • 命令:kwctl scaffold manifest -t ClusterAdmissionPolicy <policy URI> > <"policy name".yaml>

      $ kwctl scaffold manifest -t ClusterAdmissionPolicy registry://ghcr.io/kubewarden/policies/pod-privileged:v0.1.9
      ---
      apiVersion: policies.kubewarden.io/v1alpha2
      kind: ClusterAdmissionPolicy
      metadata:
        name: privileged-pods
      spec:
        module: "registry://ghcr.io/kubewarden/policies/pod-privileged:v0.1.9"
        settings: {}
        rules:
          - apiGroups:
              - ""
            apiVersions:
              - v1
            resources:
              - pods
            operations:
              - CREATE
        mutating: false

    默认情况下,name 的值设置为 generated-policy。 您可能希望在部署 ClusterAdmissionPolicy 之前编辑它。 前一个示例中的名称设置为 privileged-pods

  • ClusterAdmissionPolicy 部署到您的 Kubernetes 集群中

    • 命令:kubectl apply -f <"policy name".yaml>

      $ kubectl apply -f pod-privileged-policy.yaml
      clusteradmissionpolicy.policies.kubewarden.io/privileged-pods created

在部署 ClusterAdmissionPolicy 后,发送到您的集群的所有请求都会根据策略进行评估,前提是它们在策略范围内。

后续步骤

  • 编写策略 解释了如何用不同的语言编写策略并生成 WebAssembly 二进制文件,以便它们可以被 Admission Controller 使用。

  • 分发策略 解释了如何将策略发布到 OCI 注册表