12.4. 创建镜像策略 CR
ImagePolicy
自定义资源(CR) 可让集群管理员或应用程序开发人员为特定命名空间配置 sigstore 签名验证策略。MCO 监视不同命名空间中的 ImagePolicy
实例,并更新集群中所有节点上的 /etc/crio/policies/<namespace>.json
和 /etc/containers/registries.d/sigstore-registries.yaml
文件。
如果镜像策略中有范围的镜像或存储库嵌套在集群镜像策略中的范围镜像或存储库下,则仅应用来自集群镜像策略的策略。但是,镜像策略对象被创建并显示错误消息。例如,如果镜像策略指定了 example.com/global/image
,并且集群镜像策略指定了 example.com/global
,命名空间会集成集群镜像策略中的策略。
以下示例显示了如何配置 ImagePolicy
对象的一般准则。有关参数的详情,请参阅"关于集群和镜像策略参数"。
先决条件
- 您有一个 sigstore 支持的公钥基础架构(PKI)或 Cosign 公钥和私钥对用于签名操作。
- 您有一个签名过程来为您的镜像签名。
- 如果使用 Cosign 签名,您可以访问支持 Cosign 签名的 registry。
如果为 OpenShift Container Platform 发行版本镜像存储库配置了 registry 镜像,则
quay.io/openshift-release-dev/ocp-release
和quay.io/openshift-release-dev/ocp-v4.0-art-dev
,在启用技术预览功能集前,您必须将 OpenShift Container Platform 发行镜像的 sigstore 签名镜像(mirror)到镜像 registry 中。否则,为发行版本存储库强制执行签名验证的默认openshift
集群镜像策略将阻止 Cluster Version Operator 将 CVO Pod 移到新节点,这可防止节点从功能集更改更新结果。您可以使用
oc image mirror
命令来镜像签名。例如:oc image mirror quay.io/openshift-release-dev/ocp-release:sha256-1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef.sig \ mirror.com/image/repo:sha256-1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef.sig
$ oc image mirror quay.io/openshift-release-dev/ocp-release:sha256-1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef.sig \ mirror.com/image/repo:sha256-1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef.sig
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 您可以通过编辑名为
cluster
的FeatureGate
CR 为集群启用所需的技术预览功能:oc edit featuregate cluster
$ oc edit featuregate cluster
Copy to Clipboard Copied! Toggle word wrap Toggle overflow FeatureGate
CR 示例Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 启用所需的
SigstoreImageVerification
功能。
警告在集群中启用
TechPreviewNoUpgrade
功能集无法撤消,并会阻止次版本更新。此功能集允许您在测试集群中启用这些技术预览功能,您可以在测试集群中完全测试它们。不要在生产环境集群中启用此功能。保存更改后,会创建新的机器配置,然后更新机器配置池,并在应用更改时在每个节点上调度。
流程
创建类似以下示例的镜像策略对象。有关这些参数的具体详情,请参阅"关于集群和镜像策略参数"。
带有公钥策略和
MatchRepository
匹配策略的镜像策略对象示例Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 创建
ImagePolicy
对象。 - 2
- 指定应用镜像策略的命名空间。
- 3
- 定义分配给此策略的存储库或镜像列表。
- 4
- 指定定义如何验证镜像的参数。
- 5
- 定义策略的信任根。
- 6
- 指定定义信任根的策略类型,可以是公钥或 Fulcio 证书。在这里,使用 Rekor 验证的公钥。
- 7
- 对于公钥策略,以 PEM 格式指定 base64 编码的公钥。最大长度为 8192 个字符。
- 8
- 可选:以 PEM 格式指定 base64 编码的 Rekor 公钥。最大长度为 8192 个字符。
- 9
- 可选:指定以下进程之一来验证签名中的身份和实际镜像身份:
-
MatchRepoDigestOrExact
. -
MatchRepository
. -
ExactRepository
.必须指定exactRepository
参数。 -
RemapIdentity
。必须指定prefix
和signedPrefix
参数。
-
带有 Fulcio 证书策略和
ExactRepository
匹配策略的镜像策略对象示例Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 创建
ImagePolicy
对象。 - 2
- 指定应用镜像策略的命名空间。
- 3
- 定义分配给此策略的存储库或镜像列表。
- 4
- 指定定义如何验证镜像的参数。
- 5
- 定义策略的信任根。
- 6
- 指定定义信任根的策略类型,可以是公钥或 Fulcio 证书。在这里,一个带有所需 Rekor 验证的 Fulcio 证书。
- 7
- 对于 Fulcio 证书策略,需要以下参数:
-
fulcioCAData
: 指定 PEM 格式的 base64 编码的 Fulcio 证书。最大长度为 8192 个字符。 -
fulcioSubject
:指定 OIDC 签发者和 Fulcio 身份验证配置的电子邮件。
-
- 8
- 以 PEM 格式指定一个 base64 编码的 Rekor 公钥。当
policyType
是FulcioCAWithRekor
时,需要此参数。最大长度为 8192 个字符。 - 9
- 可选:指定以下进程之一来验证签名中的身份和实际镜像身份:
-
MatchRepoDigestOrExact
. -
MatchRepository
. -
ExactRepository
.必须指定exactRepository
参数。 -
RemapIdentity
。必须指定prefix
和signedPrefix
参数。
-
- 10
- 对于
exactRepository
匹配策略,请指定包含镜像身份和签名的存储库。
创建镜像策略对象:
oc create -f <file_name>.yaml
$ oc create -f <file_name>.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Machine Config Operator (MCO) 更新集群中的机器配置池 (MCP)。
验证
更新集群中的节点后,您可以验证是否已配置了镜像策略:
运行以下命令,为节点启动 debug pod:
oc debug node/<node_name>
$ oc debug node/<node_name>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令,将
/host
设置为 debug shell 中的根目录:chroot /host/
sh-5.1# chroot /host/
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令检查
<namespace>.json
文件:cat /etc/crio/policies/<namespace>.json
sh-5.1# cat /etc/crio/policies/<namespace>.json
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 带有一个公钥的镜像策略对象的示例输出,显示新的镜像策略。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 带有一个 Fulcio 证书的镜像策略对象的示例输出,显示新的镜像策略。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令检查
sigstore-registries.yaml
文件:cat /etc/containers/registries.d/sigstore-registries.yaml
sh-5.1# cat /etc/containers/registries.d/sigstore-registries.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 显示添加了范围 registry 的输出示例
docker: example.io/crio/signed: use-sigstore-attachments: true quay.io/openshift-release-dev/ocp-release: use-sigstore-attachments: true
docker: example.io/crio/signed: use-sigstore-attachments: true
1 quay.io/openshift-release-dev/ocp-release: use-sigstore-attachments: true
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 为
true
时,指定 sigstore 签名将与镜像一起读取。
运行以下命令,检查 sigstore 签名验证的 crio 日志:
journalctl -u crio | grep -A 100 "Pulling image: example.io/crio"
sh-5.1# journalctl -u crio | grep -A 100 "Pulling image: example.io/crio"
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 删除时间戳的输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow