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)密钥、自带公钥基础架构(BYOPKI)证书或提供 Cosign 公钥和私钥对,用于签名操作。
- 您有一个签名过程来为您的镜像签名。
- 如果使用 Cosign 签名,您可以访问支持 Cosign 签名的 registry。
如果您使用 BYOPKI 证书作为信任的根目录,您可以通过编辑名为
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
- 指定定义信任根的策略类型,可以是公钥、BYOPKI 证书或 Fulcio 证书。在这里,使用 Rekor 验证的公钥。
- 7
- 对于公钥策略,以 PEM 格式指定 base64 编码的公钥。最大长度为 8192 个字符。
- 8
- 可选:以 PEM 格式指定 base64 编码的 Rekor 公钥。最大长度为 8192 个字符。
- 9
- 可选:指定以下进程之一来验证签名中的身份和实际镜像身份:
-
MatchRepoDigestOrExact
. -
MatchRepository
. -
ExactRepository
.必须指定exactRepository
参数。 -
RemapIdentity
。必须指定prefix
和signedPrefix
参数。
-
BYOPKI 策略和
MatchRepository
匹配策略的镜像策略对象示例Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 创建
ImagePolicy
对象。 - 2
- 指定应用镜像策略的命名空间。
- 3
- 定义分配给此策略的存储库或镜像列表。
- 4
- 指定定义如何验证镜像的参数。
- 5
- 定义策略的信任根。
- 6
- 指定定义信任根的策略类型,可以是公钥、BYOPKI 证书或 Fulcio 证书。在这里,BYOPKI 证书。
- 7
- 对于 BYOPKI 证书,指定
caRootsData
。这个参数以 PEM 格式指定 base64 编码的 CA root 证书。最大长度为 8192 个字符。(可选)使用caIntermediatesData
,以 PEM 格式指定 base64 编码的中间 CA root 证书。最大长度为 8192 个字符。 - 8
- 指定主题备用名称(SAN),来使用主机名和电子邮件地址验证用户身份:
-
电子邮件
.指定在生成证书时指定的电子邮件地址。 -
主机名
.指定生成证书时指定的主机名。
-
- 9
- 对于 BYOPKI 证书,指定
MatchRepository
来验证签名和实际镜像身份中的身份。默认签名身份为matchRepoDigestOrExact
,它需要摘要规格。本例中没有为摘要镜像创建签名。
带有 Fulcio 证书策略和
ExactRepository
匹配策略的镜像策略对象示例Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 创建
ImagePolicy
对象。 - 2
- 指定应用镜像策略的命名空间。
- 3
- 定义分配给此策略的存储库或镜像列表。
- 4
- 指定定义如何验证镜像的参数。
- 5
- 定义策略的信任根。
- 6
- 指定定义信任根的策略类型,可以是公钥、BYOPKI 证书或 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 BYOPKI 证书的镜像策略对象的输出示例,显示新镜像策略
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