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

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

使用 Hauler 进行隔离安装

本指南展示了如何使用 Hauler 在隔离的环境中安装 SUSE Security Admission Controller。Hauler 是一个帮助用户在隔离的环境中运行工作负载的工具。它将 APP 所需的资源移动到这些隔离环境中。

Admission Controller 提供一个清单文件,包含在私有环境中运行 Admission Controller 所需的所有资源。本文档描述了您如何使用它。请参考 Hauler 文档以了解更多信息。

使用 Hauler 清单的基本工作流程是:

  1. 从 Admission Controller 发布页面获取它

  2. 将运行 Admission Controller 所需的所有资源加载到本地存储中

  3. 将它们导出到一个文件中

  4. 将文件移动到私有环境中

  5. 将资源加载到在私有环境中运行的 Hauler 中

  6. 将所有内容复制到注册表中,以便在您的隔离环境中的安装过程中使用

从 Helm 图表发布页面下载 Hauler 清单

hauler_manifest.yml 的 Admission Controller 下载 发布页面

将清单中定义的资源同步到您的 Hauler 存储中:

hauler store sync --filename hauler_manifest.yaml

Hauler 从清单中下载所有资源到本地存储。此过程需要几分钟。完成后,您可以使用 hauler store info 命令查看同步的资源。

生成包含所有 Admission Controller 资源的 tarball 文件。

运行 Hauler 命令将之前加载到存储中的所有资源导出到文件:

hauler store save --filename kubewarden-resources.tar.zst

Admission Controller 容器镜像支持 x86_64 和 Arm 架构。因此,当您将资源保存到文件中时,您可能会看到类似这样的警告信息:

2025-08-12 18:55:54 WRN specify an export platform to prevent potential platform mismatch on import of index [ghcr.io/kyverno/policy-reporter:3.3.3]
2025-08-12 18:55:54 WRN specify an export platform to prevent potential platform mismatch on import of index [ghcr.io/kyverno/policy-reporter-ui:2.4.1]
2025-08-12 18:55:54 WRN specify an export platform to prevent potential platform mismatch on import of index [ghcr.io/kubewarden/policy-server:v1.27.0]
2025-08-12 18:55:54 WRN specify an export platform to prevent potential platform mismatch on import of index [ghcr.io/kubewarden/audit-scanner:v1.27.0]
2025-08-12 18:55:54 WRN specify an export platform to prevent potential platform mismatch on import of index [ghcr.io/rancher/kuberlr-kubectl:v5.0.0]
2025-08-12 18:55:54 WRN specify an export platform to prevent potential platform mismatch on import of index [ghcr.io/kubewarden/kubewarden-controller:v1.27.0]

为了避免此警告信息,您可以设置 --platform CLI 标志以定义要保存到文件中的平台架构。

将 tarball 转移到您的隔离环境中。

现在您在 Admission Controller 中拥有所有 kubewarden-resources.tar.zst 资源,将其复制到您的隔离环境中并加载到 Hauler 存储中:

hauler store load --filename kubewarden-resources.tar.zst
# Check if the resources are loaded
hauler store info

现在安装 Admission Controller 所需的所有资源都在您隔离环境中的 Hauler 存储中。

填充私有注册表。

要使用 Hauler 存储中的资源,必须将它们提供在内部注册表中。您可以使用 Hauler 命令将它们复制到您的私有注册表中。

hauler store copy registry://localhost:5000

您还可以运行 Hauler 来启动一个包含 Hauler 存储中所有资源的注册表。此储存库不安全,您需要调整集群配置:

# Find IP address of your host
# hostname -I

# Update registries.yaml for k3s based cluster to allow insecure access
# mirrors:
#   "<HOST_IP>:5000":
#     endpoint:
#       - "http://<HOST_IP>:5000"
# configs:
#   "<HOST_IP>:5000":
#     tls:
#       insecure_skip_verify: true

# Configure policy-server to allow pulling policies from insecure sources
# helm install .. kubewarden-defaults .. --set policyServer.insecureSources[0]=<HOST_IP:5000>

hauler store serve registry

这将在 localhost:5000 地址启动一个储存库。从此时起,您可以使用其他命令,如 Skopeo,将 Admission Controller 使用的所有容器镜像、策略模块和 Helm 图表复制到您的私有储存库中。

安装 Admission Controller

现在您的私有储存库拥有所需的一切,您可以安装 Admission Controller。与标准 Admission Controller 安装的不同之处在于,您需要将容器镜像和策略中的注册表更改为私有注册表。此外,您需要从 OCI 工件安装 Helm 图表。

安装 Admission Controller 堆栈:

helm install --wait -n kubewarden kubewarden-crds --create-namespace \
    oci://<REGISTRY.YOURDOMAIN.COM:PORT>/hauler/kubewarden-crds
helm install --wait -n kubewarden kubewarden-controller \
    --set "global.cattle.systemDefaultRegistry=<REGISTRY.YOURDOMAIN.COM:PORT>" \
    oci://<REGISTRY.YOURDOMAIN.COM:PORT>/hauler/kubewarden-controller

要使用 kubewarden-controller 图表中可用的 PolicyReporter 子图表,您需要在隔离的环境中定义其他特定于子图表的值。请参见下面的示例:

helm install --wait -n kubewarden kubewarden-controller oci://<REGISTRY.YOURDOMAIN.COM:PORT>/hauler/kubewarden-controller \
    --set global.cattle.systemDefaultRegistry=<REGISTRY.YOURDOMAIN.COM:PORT> \
    --set auditScanner.policyReporter=true \
    --set policy-reporter.image.registry=<REGISTRY.YOURDOMAIN.COM:PORT> \
    --set policy-reporter.image.repository=kyverno/policy-reporter \
    --set policy-reporter.ui.image.registry=<REGISTRY.YOURDOMAIN.COM:PORT> \
    --set policy-reporter.ui.image.repository=kyverno/policy-reporter-ui

必须定义 auditScanner.policyReporter 和其他四个值,以启用子图表并配置注册表和储存库,以便指定 Policy Reporter 镜像存储的位置。有关策略报告子图表值的更多信息,请参阅链接:https://kyverno.github.io/policy-reporter-docs/getting-started/helm.html[Policy Reporter 文档]。

helm install --wait -n kubewarden \
  kubewarden-defaults oci://<REGISTRY.YOURDOMAIN.COM:PORT>/hauler/kubewarden-defaults \
  --set global.cattle.systemDefaultRegistry=<REGISTRY.YOURDOMAIN.COM:PORT>

最后,配置每个策略服务器以从您的私有储存库中获取策略。请参见文档的 使用私有储存库 部分。

现在在您的集群中创建 Admission Controller 策略。策略必须在您的私有储存库中可用。

kubectl apply -f - <<EOF
apiVersion: policies.kubewarden.io/v1
kind: ClusterAdmissionPolicy
metadata:
  name: privileged-pods
spec:
  module: registry://<REGISTRY.YOURDOMAIN.COM:PORT>/kubewarden/policies/pod-privileged:v0.2.2
  rules:
  - apiGroups: [""]
    apiVersions: ["v1"]
    resources: ["pods"]
    operations:
    - CREATE
  mutating: false
EOF

PolicyServer 资源必须使用您私有储存库中可用的镜像。 例如:

apiVersion: policies.kubewarden.io/v1
kind: PolicyServer
metadata:
  name: reserved-instance-for-tenant-a
spec:
  image: <REGISTRY.YOURDOMAIN.COM:PORT>/kubewarden/policy-server:v1.3.0
  replicas: