验证已签名容器镜像
特性状态: Kubernetes v1.24 [alpha]
准备开始
这些说明适用于 Kubernetes 1.27。 如果你想要检查其他版本的 Kubernetes 组件的完整性,请查看对应 Kubernetes 版本的文档。
你需要安装以下工具:
cosign
(安装指南)curl
(通常由你的操作系统提供)
验证二进制签名
Kubernetes 发布过程使用 cosign 的无密钥签名对所有二进制工件(压缩包、SPDX 文件、 独立的二进制文件)签名。 要验证一个特定的二进制文件,获取组件时要包含其签名和证书:
URL=https://dl.k8s.io/release/v1.27.0/bin/linux/amd64
BINARY=kubectl
FILES=(
"$BINARY"
"$BINARY.sig"
"$BINARY.cert"
)
for FILE in "${FILES[@]}"; do
curl -sSfL --retry 3 --retry-delay 3 "$URL/$FILE" -o "$FILE"
done
然后使用 cosign
验证二进制文件:
cosign verify-blob "$BINARY" --signature "$BINARY".sig --certificate "$BINARY".cert
cosign 自 v1.9.0 版本开始才能使用 --certificate
标志,旧版本的 cosign 请使用 --cert
。
说明:
想要进一步了解无密钥签名,请参考 Keyless Signatures。
验证镜像签名
完整的镜像签名列表请参见发行版本。
从这个列表中选择一个镜像,并使用 cosign verify
命令来验证它的签名:
COSIGN_EXPERIMENTAL=1 cosign verify registry.k8s.io/kube-apiserver-amd64:v1.24.0
说明:
COSIGN_EXPERIMENTAL=1
用于对以 KEYLESS
模式签名的镜像进行验证。想要进一步了解 KEYLESS
,请参考 Keyless Signatures。
验证所有控制平面组件镜像
验证所有已签名的控制平面组件镜像,请运行以下命令:
curl -Ls https://sbom.k8s.io/$(curl -Ls https://dl.k8s.io/release/latest.txt)/release | grep 'PackageName: registry.k8s.io/' | awk '{print $2}' > images.txt
input=images.txt
while IFS= read -r image
do
COSIGN_EXPERIMENTAL=1 cosign verify "$image"
done < "$input"
当你完成某个镜像的验证时,可以在你的 Pod 清单通过摘要值来指定该镜像,例如: registry-url/image-name@sha256:45b23dee08af5e43a7fea6c4cf9c25ccf269ee113168c19722f87876677c5cb2
。
要了解更多信息,请参考镜像拉取策略章节。
使用准入控制器验证镜像签名
有一些非控制平面镜像 (例如 conformance 镜像), 也可以在部署时使用 sigstore policy-controller 控制器验证其签名。如要使用 policy-controller
,下面是一些有帮助的资源: