网站内容更新机制(DCT配置DCT的实战例子及实战经验阐述(组图))
优采云 发布时间: 2021-11-15 01:13网站内容更新机制(DCT配置DCT的实战例子及实战经验阐述(组图))
在现代 IT 世界中,信任很重要,而且会变得越来越重要。幸运的是,Docker 通过一个叫做 Docker Content Trust (DCT) 的特性实现了一种信任机制。
一般情况下,Docker 镜像的发布者可以在将镜像推送到存储库时对其进行签名。用户可以在拉取镜像时进行验证,或者执行构建或运行等操作。长话短说,DCT 确保用户可以获得他们想要的镜像。
下图展示了它的整体架构。
DCT 实现了客户端的签名和验证,这意味着它们由 Docker 客户端执行。
显然,像这样的密码机制对于确保互联网上拉推的软件的可信度是非常重要的。它在整个技术堆栈的各个层面和软件交付管道的各个方面越来越多地发挥作用。重要角色。在不久的将来,这种加密信任机制有望在交付链的各个环节发挥作用。
下面是一个简单的 DCT 配置实例。我们需要一个 Docker 客户端和一个用于推送图像的库,就像 Docker Hub 上的图像库一样。
可以通过环境变量 DOCKER_CONTENT_TRUST 启用或禁用 DCT。将此环境变量的值设置为“1”将在当前会话中启用 DCT;将其设置为其他值将禁用 DCT。
以下命令用于在 Linux 主机上的 Docker 中启用 DCT。
$ 导出 DOCKER_CONTENT_TRUST
后续的 docker push 命令会在推送时自动对镜像进行签名。因此,所有拉取、构建和运行命令仅适用于签名图像。
接下来,使用新标签标记图像并将其推送到图像库。要推送的图像可以是任何图像。在这个例子中,使用了刚刚拉取的 alpine:latest 图像,所以它不是它自己的签名。
1) 标记镜像,以便可以将其推送到目标镜像库。在这个例子中,它将被推送到位于我的 Docker Hub 个人帐户命名空间中的图像存储库。
$ docker image tag alpine:latest nigelpoulton/dockerbook:v1
2) 登录Docker Hub(或其他镜像仓库)推送镜像。
$ docker 登录
使用您的 Docker ID 登录以从 Docker Hub 推送和拉取镜像。
用户名:奈杰尔波尔顿
密码:
登录成功
3) 推送新标记的图像。
$ docker image push nigelpoulton/dockerbook:v1
推送指的是一个存储库 [docker.io/nigelpoulton/dockerbook]
cd7100a72410:从库/高山挂载
v1:摘要:sha256:8c03...acbc 大小:528
签署和推送信任元数据
输入 ID 为 865e4ec 的新根密钥的密码:
对 ID 为 865e4ec 的新根密钥重复密码短语:
输入 ID 为 bd0d97d 的新存储库密钥的密码:
对 ID 为 bd0d97d 的新存储库密钥重复密码:
完成初始化“docker.io/nigelpoulton/sign”
成功签署“docker.io/nigelpoulton/sign”:v1
开启 DCT 后,图像会在推送时自动签名。签名时会创建两个密钥。
默认情况下,这两个密钥存储在主目录下的隐藏目录 .docker 中。在 Linux 系统中,它是 ~/.docker/trust。
根密钥是主密钥(在一定程度上)。它用于创建和签署新的库密钥,因此应妥善保存。这意味着用户需要使用强密码来保护它,并在不使用时离线保存。一旦掉以轻心,难免会有遗憾。一般情况下,每个用户应该只有一把钥匙,甚至一个团队或组织也只有一把钥匙。并且通常只使用它来创建新的库密钥。
库密钥也称为标签密钥,用于对需要推送到指定镜像库的标记镜像进行签名。因此,每个镜像库都配备了一个库密钥。如果密钥丢失,恢复起来相对容易,但仍应使用强密码进行保护并妥善保存。
每次将镜像推送到新的镜像库时,都会创建一个新的镜像库标签密钥,需要使用根密钥,所以需要输入根密钥的密码。以后推送到这个镜像库时,只需要镜像库标签key的密码即可。
另外,还有一个键叫做TimeStamp键。保存在远程镜像库中,用于一些更高级的使用场景,保证时效性。
下面我们来看看DCT开启时如何拉下后视镜。
在启用 DCT 的 Docker 主机上执行以下命令以拉取未标记的图像。
有时,新的错误消息是未签名的无信任数据。可以看出Docker会因为镜像没有签名而拒绝下载。同样,如果您尝试基于未签名的镜像构建新镜像或运行容器,您将收到类似的错误。让我们试试吧。
在拉取镜像时使用 --disable-content-trust 来覆盖 DCT 设置。
$ docker image pull --disable-content-trust nigelpoulton/dockerbook:unsigned
现在尝试基于未签名的镜像运行容器。
$ docker container run -d --rm nigelpoulton/dockerbook:unsigned
docker:没有未签名的信任数据。
可以看出Docker内容信任机制会作用于push、pull和run操作。接下来,尝试执行构建操作,看看机制是否有效。
Docker UCP 还支持 DCT,因此可以在 UCP 范围内设置签名策略。如果要为整个 UCP 启用 DCT,请展开 Admin 下拉菜单,然后单击 Admin Settings,选择 Docker Content Trust 选项,然后选中 Run Only Signed Images 复选框。这将对整个集群强制执行签名策略,并且只允许使用签名图像来部署服务。
在默认配置中,可以使用由有效 UCP 用户签名的任何图像。用户还可以选择将某些团队配置为有权对图像进行签名。