12.3. 创建集群镜像策略 CR


ClusterImagePolicy 自定义资源(CR)可让集群管理员为整个集群配置 sigstore 签名验证策略。启用后,Machine Config Operator (MCO)会监控 ClusterImagePolicy 对象,并更新集群中所有节点上的 /etc/containers/policy.json/etc/containers/registries.d/sigstore-registries.yaml 文件。

以下示例显示了如何配置 ClusterImagePolicy 对象的一般准则。有关参数的详情,请参阅"关于集群和镜像策略参数"。

先决条件

  • 您有一个 sigstore 支持的公钥基础架构(PKI)或 Cosign 公钥和私钥对用于签名操作。
  • 您有一个签名过程来为您的镜像签名。
  • 如果使用 Cosign 签名,您可以访问支持 Cosign 签名的 registry。
  • 您可以通过编辑名为 clusterFeatureGate CR 为集群启用所需的技术预览功能:

    $ oc edit featuregate cluster
    Copy to Clipboard Toggle word wrap

    FeatureGate CR 示例

    apiVersion: config.openshift.io/v1
    kind: FeatureGate
    metadata:
      name: cluster
    spec:
      featureSet: TechPreviewNoUpgrade 
    1
    Copy to Clipboard Toggle word wrap

    1
    启用所需的 SigstoreImageVerification 功能。
    警告

    在集群中启用 TechPreviewNoUpgrade 功能集无法撤消,并会阻止次版本更新。此功能集允许您在测试集群中启用这些技术预览功能,您可以在测试集群中完全测试它们。不要在生产环境集群中启用此功能。

    保存更改后,会创建新的机器配置,然后更新机器配置池,并在应用更改时在每个节点上调度。

流程

  1. 创建类似以下示例的集群镜像策略对象。有关这些参数的具体详情,请参阅"关于镜像策略参数"。

    带有公钥策略和 MatchRepoDigestOrExact 匹配策略的集群镜像策略对象示例

    apiVersion: config.openshift.io/v1alpha1
    kind: ClusterImagePolicy 
    1
    
    metadata:
      name: p1
    spec:
      scopes: 
    2
    
        - example.com
      policy: 
    3
    
        rootOfTrust: 
    4
    
          policyType: PublicKey 
    5
    
          publicKey:
            keyData: a2V5RGF0YQ== 
    6
    
            rekorKeyData: cmVrb3JLZXlEYXRh 
    7
    
        signedIdentity: 
    8
    
          matchPolicy: MatchRepoDigestOrExact
    Copy to Clipboard Toggle word wrap

    1
    创建 ClusterImagePolicy 对象。
    2
    定义分配给此策略的存储库或镜像列表。在集群镜像策略中,确保策略不会阻止在 quay.io/openshift-release-dev/ocp-releasequay.io/openshift-release-dev/ocp-v4.0-dev/ocp-v4.0-art-dev 仓库中部署 OpenShift Container Platform 镜像。集群操作需要这些软件仓库中的镜像。
    3
    指定定义如何验证镜像的参数。
    4
    定义策略的信任根。
    5
    指定定义信任根的策略类型,可以是公钥或 Fulcio 证书。在这里,使用 Rekor 验证的公钥。
    6
    对于公钥策略,以 PEM 格式指定 base64 编码的公钥。最大长度为 8192 个字符。
    7
    可选:以 PEM 格式指定 base64 编码的 Rekor 公钥。最大长度为 8192 个字符。
    8
    可选:指定以下进程之一来验证签名中的身份和实际镜像身份:
    • MatchRepoDigestOrExact.
    • MatchRepository.
    • ExactRepository.必须指定 exactRepository 参数。
    • RemapIdentity。必须指定 prefixsignedPrefix 参数。

    带有 Fulcio 证书策略和 remapIdentity 匹配策略的集群镜像策略对象示例

    apiVersion: config.openshift.io/v1alpha1
    kind: ClusterImagePolicy 
    1
    
    metadata:
      name: p1
    spec:
      scopes: 
    2
    
        - example.com
      policy: 
    3
    
        rootOfTrust: 
    4
    
          policyType: FulcioCAWithRekor 
    5
    
          fulcioCAWithRekor: 
    6
    
            fulcioCAData: a2V5RGF0YQ==
            fulcioSubject:
              oidcIssuer: "https://expected.OIDC.issuer/"
              signedEmail: "expected-signing-user@example.com"
            rekorKeyData: cmVrb3JLZXlEYXRh 
    7
    
        signedIdentity:
          matchPolicy: RemapIdentity 
    8
    
          remapIdentity:
            prefix: example.com 
    9
    
            signedPrefix: mirror-example.com 
    10
    Copy to Clipboard Toggle word wrap

    1
    创建 ClusterImagePolicy 对象。
    2
    定义分配给此策略的存储库或镜像列表。在集群镜像策略中,确保策略不会阻止在 quay.io/openshift-release-dev/ocp-releasequay.io/openshift-release-dev/ocp-v4.0-dev/ocp-v4.0-art-dev 仓库中部署 OpenShift Container Platform 镜像。集群操作需要这些软件仓库中的镜像。
    3
    指定定义如何验证镜像的参数。
    4
    定义策略的信任根。
    5
    指定定义信任根的策略类型,可以是公钥或 Fulcio 证书。在这里,一个带有所需 Rekor 验证的 Fulcio 证书。
    6
    对于 Fulcio 证书策略,需要以下参数:
    • fulcioCAData: 指定 PEM 格式的 base64 编码的 Fulcio 证书。最大长度为 8192 个字符。
    • fulcioSubject :指定 OIDC 签发者和 Fulcio 身份验证配置的电子邮件。
    7
    以 PEM 格式指定一个 base64 编码的 Rekor 公钥。当 policyTypeFulcioCAWithRekor 时,需要此参数。最大长度为 8192 个字符。
    8
    可选:指定以下进程之一来验证签名中的身份和实际镜像身份。
    • MatchRepoDigestOrExact.
    • MatchRepository.
    • ExactRepository.必须指定 exactRepository 参数。
    • RemapIdentity。必须指定 prefixsignedPrefix 参数。
    9
    对于 remapIdentity 匹配策略,请指定应与范围镜像前缀匹配的前缀。如果两个匹配项,则将有范围的镜像前缀替换为 signedPrefix 的值。最大长度为 512 个字符。
    10
    对于 remapIdentity 匹配策略,请根据需要指定要重新映射的镜像前缀。最大长度为 512 个字符。
  2. 创建集群镜像策略对象:

    $ oc create -f <file_name>.yaml
    Copy to Clipboard Toggle word wrap

    Machine Config Operator (MCO) 更新集群中的机器配置池 (MCP)。

验证

  • 更新集群中的节点后,您可以验证是否已配置了集群镜像策略:

    1. 运行以下命令,为节点启动 debug pod:

      $ oc debug node/<node_name>
      Copy to Clipboard Toggle word wrap
    2. 运行以下命令,将 /host 设置为 debug shell 中的根目录:

      sh-5.1# chroot /host/
      Copy to Clipboard Toggle word wrap
    3. 运行以下命令检查 policy.json 文件:

      sh-5.1# cat /etc/containers/policy.json
      Copy to Clipboard Toggle word wrap

      带有显示新集群镜像策略的公钥的集群镜像策略对象的输出示例

      # ...
        "transports": {
      # ...
          "docker": {
            "example.com": [
              {
                "type": "sigstoreSigned",
                "keyData": "a2V5RGF0YQ==",
                "rekorPublicKeyData": "cmVrb3JLZXlEYXRh",
                "signedIdentity": {
                  "type": "matchRepoDigestOrExact"
                }
              }
            ],
      # ...
      Copy to Clipboard Toggle word wrap

      带有显示新集群镜像策略的 Fulcio 证书的集群镜像策略对象的输出示例

      # ...
        "transports": {
      # ...
          "docker": {
            "example.com": [
              {
                "type": "sigstoreSigned",
                "fulcio": {
                  "caData": "a2V5RGF0YQ==",
                  "oidcIssuer": "https://expected.OIDC.issuer/",
                  "subjectEmail": "expected-signing-user@example.com"
                },
                "rekorPublicKeyData": "cmVrb3JLZXlEYXRh",
                "signedIdentity": {
                  "type": "remapIdentity",
                  "prefix": "example.com",
                  "signedPrefix": "mirror-example.com"
                }
              }
            ],
      # ...
      Copy to Clipboard Toggle word wrap

    4. 运行以下命令检查 sigstore-registries.yaml 文件:

      sh-5.1# cat /etc/containers/registries.d/sigstore-registries.yaml
      Copy to Clipboard Toggle word wrap

      显示添加了范围 registry 的输出示例

      docker:
        example.com:
          use-sigstore-attachments: true 
      1
      
        quay.io/openshift-release-dev/ocp-release:
          use-sigstore-attachments: true
      Copy to Clipboard Toggle word wrap

      1
      true 时,指定 sigstore 签名将与镜像一起读取。
返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2025 Red Hat