在私有自动化中心(automation hub)中管理容器
使用自动化中心容器 registry 管理容器镜像仓库
摘要
使开源包含更多
红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。我们从这四个术语开始:master、slave、黑名单和白名单。由于此项工作十分艰巨,这些更改将在即将推出的几个发行版本中逐步实施。有关更多详情,请参阅我们的首席技术官 Chris Wright 提供的消息。
对红帽文档提供反馈
我们非常感谢您对我们的技术内容提供反馈,并鼓励您告诉我们您的想法。如果您想添加评论,提供见解、纠正拼写错误甚至询问问题,您可以在文档中直接这样做。
您必须有一个红帽帐户并登录到客户门户网站。
要从客户门户网站提交文档反馈,请执行以下操作:
- 选择 Multi-page HTML 格式。
- 点文档右上角的 反馈 按钮。
- 突出显示您要提供反馈的文本部分。
- 点高亮文本旁的 添加反馈 对话框。
- 在页面右侧的文本框中输入您的反馈,然后单击 Submit。
每次提交反馈时,我们都会自动创建跟踪问题。打开在点 Submit 后显示的链接,并开始监视问题或添加更多注释。
第 1 章 管理私有自动化 hub 容器 registry
使用自动化 hub 容器 registry 管理 Ansible Automation Platform 基础架构中的容器镜像存储库。自动化中心提供相应的功能,监管谁可以访问各个容器存储库,更改镜像上的标签,查看活动和镜像层,并提供与每个容器存储库相关的附加信息。
1.1. 容器 registry
自动化 hub 容器 registry 用于存储和管理容器镜像。构建或提供容器镜像后,您可以将该容器镜像推送到私有自动化 hub 的 registry 部分,以创建容器存储库。
后续步骤
- 将容器镜像推送到自动化 hub 容器 registry。
- 创建可访问 registry 中的容器存储库的组。
- 将新组添加到容器存储库。
- 将 README 添加到容器存储库,以为用户提供信息和相关链接。
第 2 章 在私有自动化 hub 中配置容器仓库的用户访问权限
在私有自动化 hub 中配置容器存储库的用户访问权限,以提供决定谁可以访问和管理 Ansible Automation Platform 中的镜像的权限。
2.1. 先决条件
- 您可以在私有自动化 hub 中创建组并分配权限。
2.2. 容器 registry 组权限
用户访问提供了粒度控制功能,让用户可以如何与在私有自动化中心中管理的容器交互。使用以下权限列表,为容器注册表创建具有正确特权的组。
表 2.1. 用于在私有自动化中心中管理容器的组权限列表
| 权限名称 | 描述 |
|---|---|
| 创建新容器 | 用户可以创建新容器 |
| 更改容器命名空间权限 | 用户可以更改容器存储库的权限 |
| 更改容器 | 用户可以更改容器的信息 |
| 更改镜像标签 | 用户可以修改镜像标签 |
| 拉取私有容器 | 用户可以从私有容器中拉取镜像 |
| 推送到现有容器 | 用户可以将镜像推送到现有容器中 |
| 查看私有容器 | 用户可以查看标记为私有的容器 |
2.3. 创建新组
您可以创建并为自动化中心中的组分配权限,该组可让用户访问系统中指定的功能。默认情况下,Automation Hub 中有一个 admins 组,它分配了所有权限,并在使用安装 Automation Hub 时创建的凭证进行初始登录时可用。
先决条件
- 您有组权限,可以在 Automation Hub 中创建和管理组配置和访问权限。
流程
- 登录到您的本地自动化中心。
- 进入 User Access → Groups。
- 点 Create。
- 提供 Name 并点 Create。
现在,您可以分配权限并在组编辑页面中添加用户。
2.4. 为组分配权限
您可以为 Automation Hub 中的组分配权限,以便用户访问系统中的特定功能。默认情况下,新组没有任何分配的权限。您可以在初始组创建时添加权限,或编辑现有组以添加或删除权限
先决条件
- 您有 Change group 权限并可以在 Automation Hub 中编辑组权限。
流程
- 登录到您的本地自动化中心。
- 导航到 User Access → Roles。
- 点 Add roles。
- 单击 name 字段,再填写角色名称。
- 单击描述字段,再填写描述。
- 完成 Permissions 部分。
- 点每个权限类型的项,然后选择列表中显示的权限。
- 完成后点 Save 来分配权限。
- 进入 User Access → Groups。
- 点击组名称。
- 点 Access 选项卡。
- 点 Add roles。
- 选择在第 8 步中创建的角色。
- 点 Next 确认所选角色。
- 单击 Add 以完成添加角色。
组现在可以访问自动化 hub 中的功能,与其分配的权限相关联。
其他资源
- 请参阅 Container registry group permissions 来了解更多有关特定权限的信息。
2.5. 将用户添加到组中
您可以在创建组时将用户添加到组中,或者手动将用户添加到现有组中。本节论述了如何在现有组中添加用户。
先决条件
- 您有组权限,可以在 Automation Hub 中创建和管理组配置和访问权限。
流程
- 登录到自动化中心。
- 进入 User Access → Groups。
- 点一个组名称。
- 进入 Users 选项卡,然后单击 Add。
- 从列表中选择要添加的用户,然后点 Add。
您已添加了您选择的用户。这些用户现在有使用分配给组的自动化中心的权限。
第 3 章 填充私有自动化中(automation hub)容器 registry
默认情况下,私有自动化中心不包括容器镜像。要填充容器 registry,您需要将容器镜像推送到其中。本节中的步骤描述了如何从红帽生态系统目录 (registry.redhat.io) 拉取镜像,标记镜像并将其推送到您的私有自动化中心容器 registry。
镜像清单和文件系统 Blob 直接从 registry.redhat.io 和 registry.access.redhat.com 提供。但是,从 2023 年 5 月 1 日开始,文件系统 Blob 由 quay.io 提供。为了避免拉取容器镜像出现问题,您必须启用到以下主机名的出站连接:
-
cdn.quay.io -
cdn01.quay.io -
cdn02.quay.io -
cdn03.quay.io
此更改应针对用于启用到 registry.redhat.io 或 registry.access.redhat.com 的出站连接的任何防火墙配置进行修改。
在配置防火墙规则时使用主机名而不是 IP 地址。
完成此更改后,您可以继续从 registry.redhat.io 和 registry.access.redhat.com 拉取镜像。您不需要 quay.io 登录,或以任何方式直接与 quay.io registry 交互,以继续拉取红帽容器镜像。
3.1. 先决条件
- 有创建新容器并将容器推送到私有自动化中心的权限。
3.2. 获取用于自动化中心的镜像
在将容器镜像推送到私有自动化中心之前,您必须首先从现有 registry 中拉取容器镜像并标记它们以供使用。本例详细介绍了如何从红帽生态系统目录 (registry.redhat.io) 中拉取镜像。
先决条件
有从 registry.redhat.io 拉取镜像的权限
流程
使用 registry.redhat.io 凭证登录到 Podman:
$ podman login registry.redhat.io
- 在提示符处输入您的用户名和密码。
拉取容器镜像:
$ podman pull registry.redhat.io/<container_image_name>:<tag>
验证
列出本地存储中的镜像:
$ podman images
- 验证您最近拉取的镜像是否包含在列表中。
- 验证该标签是否正确。
其他资源
- 有关注册和获取镜像的信息,请参阅 Red Hat 生态系统目录帮助。
3.3. 用于自动化中心的标记镜像
从 registry 中拉取镜像后,标记它们以便在私有自动化中心容器 registry 中使用。
先决条件
- 您已从外部 registry 中提取容器镜像。
- 有自动化中心实例的 FQDN 或 IP 地址。
流程
使用自动化中心容器存储库标记本地镜像
$ podman tag registry.redhat.io/<container_image_name>:<tag> <automation_hub_URL>/<container_image_name>
验证
列出本地存储中的镜像:
$ podman images
- 验证您最近使用自动化中心信息标记的镜像是否包含在列表中。
3.4. 将容器镜像推送到私有自动化中心
您可以将标记的容器镜像推送到私有自动化中心,以创建新容器并填充容器 registry。
先决条件
- 有创建新容器的权限。
- 有自动化中心实例的 FQDN 或 IP 地址。
流程
使用您的自动化中心位置和凭证登录到 Podman:
$ podman login -u=<username> -p=<password> <automation_hub_url>
将容器镜像推送到自动化中心容器 registry:
$ podman push <automation_hub_url>/<container_image_name>
注意当 registry.redhat.io 的签名镜像被推送到自动化中心容器 registry 时,需要
--remove-signatures标志。push操作会在上传期间重新编译镜像层,无法保证可重复生成,依赖于客户端实施。这可能会导致镜像层摘要的变化,并导致推送操作失败,Error: Copying this image requires changing layer representation, which is not possible (image is signed or the destination specifies a digest)。
验证
- 登录到您的自动化中心。
- 进入 Container Registry。
- 在 container 存储库列表中找到容器。
第 4 章 设置容器存储库
您可以设置容器存储库来添加描述,包括 README,添加可以访问存储库的组,以及标记镜像。
4.1. 先决条件
- 您使用权限登录到私有 Automation Hub,以更改存储库。
4.2. 将 README 添加到容器存储库中
将 README 添加到容器存储库,以向用户提供如何使用容器的说明。自动化中心容器存储库支持 Markdown 创建 README。默认情况下,README 将为空。
先决条件
- 有更改容器的权限。
流程
- 进入 Execution Environments。
- 选择您的容器存储库。
- 在 Details 标签页中,点 Add。
- 在 Raw Markdown 文本字段中,使用 Markdown 格式输入您的 README 文本。
- 完成后点 Save。
添加 README 后,您可以随时通过点 Edit 并重复步骤 4 和 5 对其进行编辑。
4.3. 提供对容器存储库的访问
为需要使用镜像的用户提供容器存储库的访问权限。通过添加组,您可以修改组对容器存储库的权限。您可以使用这个选项根据组分配的内容来扩展或限制权限。
先决条件
- 您具有改变容器命名空间的权限。
流程
- 进入 Execution Environments。
- 选择您的容器存储库。
- 点击窗口右上角的 Edit。
在 Groups with access 中选择要分配访问权限的一个或多个组。
- 可选:使用该组名称下的下拉菜单为特定组添加或删除权限。
- 点击 Save。
4.4. 标记容器镜像
标记镜像,为存储在自动化中心容器存储库中的镜像添加额外名称。如果没有向镜像添加任何标签,则自动化中心名称默认为 latest。
先决条件
- 您有更改镜像标签的权限。
流程
- 进入 Execution Environments。
- 选择您的容器存储库。
- 点 Images 选项卡。
- 点 More Actions 图标 CLASS,然后点 Manage tags。
在文本字段中添加新标签,然后点 Add。
- 可选:通过点该镜像的任何标签上的 x 来删除当前标签。
- 点击 Save。
验证
- 点 Activity 选项卡,再检查最新的变化。
4.5. 在自动化控制器中创建凭证
在以前的版本中,您需要部署 registry 来存储执行环境镜像。在 Ansible Automation Platform 2.0 及更新的版本中,假设您已经启动并运行了容器 registry。因此,您只需要添加您选择的容器 registry 凭证来存储执行环境镜像。
要从密码或令牌保护的 registry 中拉取容器镜像,请在自动化控制器中创建凭证:
流程
- 进入自动化控制器。
- 在侧边栏中,点 Resources → Credentials。
- 点 Add 以创建新凭据。
- 输入授权 Name、Description 和 Organization。
- 选择凭据类型。
- 输入身份验证 URL。这是容器 registry 地址。
- 输入登录到容器 registry 所需的 Username 和 Password or Token。
- (可选)选择 Verify SSL 来启用 SSL 验证。
- 点击 Save。
第 5 章 从容器存储库中拉取镜像
从自动化中心容器 registry 中拉取镜像,以便将镜像复制到本地机器。自动化中心为容器存储库中的每个 latest 镜像提供 podman pull 命令。您可以将此命令复制并粘贴到终端中,或者使用 podman pull 根据镜像标签复制镜像。
5.1. 先决条件
您需要有从私有容器存储库查看和拉取的权限。
5.2. 拉取镜像
您可以从自动化中心容器 registry 中拉取镜像,以在本地机器中创建副本。自动化中心为容器存储库中的每个 latest 镜像提供 podman pull 命令。
如果需要从密码保护的 registry 中拉取容器镜像,您必须在拉取镜像前在自动化控制器中创建凭证。
流程
- 进入 Execution Environments。
- 选择您的容器存储库。
- 在 Pull this image 条目中,点 Copy to clipboard。
- 在终端中粘贴并运行命令。
验证
-
运行
podman images以查看本地机器上的镜像。
5.3. 从容器存储库同步镜像
您可以从自动化中心容器 registry 拉取镜像,将镜像同步到本地机器。
先决条件
您需要有从私有容器存储库查看和拉取的权限。
流程
要从远程容器注册表同步镜像,您需要配置远程 registry。
- 导航到 Execution Environments → Remote Registries。
- 将 https://registry.redhat.io 添加到 registry。
- 添加所需的任何凭证进行验证。
有些容器 registry 因速率限制而积极。建议您在 Advanced Options 下设置速率限制。
- 导航到 Execution Environments → Execution Environments。
- 在页面标头中点 Add execution environment。
- 选择您要从中拉取的 registry。"name"字段显示本地 registry 上显示的镜像的名称。
"Upstream name"字段是远程服务器上的镜像名称。例如,如果上游名称被设置为 "alpine",并且 "name" 字段设置为 "local/alpine",则 alpine 镜像将从远程下载,并重命名为 local/alpine。
建议设置要包含或排除的标签列表。将镜像与大量标签同步会非常耗时,并将使用大量磁盘空间。
其他资源
- 如需 registry 列表,请参阅 Red Hat Container Registry Authentication。
5.4. 其他资源
- 有关拉取镜像时要使用的选项,请参阅 Podman 是什么? 文档。
第 6 章 使用签名的容器
6.1. 为容器签名部署您的系统
执行环境是 Ansible 自动化控制器用于运行作业的容器镜像。此内容可以下载到私有自动化中心,并在您的机构中发布。
现在,自动化中心实施镜像签名,因此用户可以更好地为 EE 容器镜像安全。
作为 Ansible Automation Platform 用户,您现在可以确认 EE/Container 是否已签名,也可以使用适当的工具自行签名和验证。本节详细介绍了如何部署您的系统,使其准备好进行容器签名。
流程
部署系统,支持激活容器签名。
_automation_hub: automationhub_create_default_container_signing_service: true automationhub_container_signing_service_key: _path/to/gpg.key_ automationhub_container_signing_service_script: _path/to/executable_- 进入自动化中心。
- 在导航窗格中,选择 Signature Keys。
- 确保有一个名为 container-default 或 container-anyname 的密钥。
'container-default' 服务由 Ansible Automation Platform 安装程序创建的。
6.2. 在自动化中心远程添加容器
将容器添加到自动化中心的方法有两种:
- 创建远程
- 执行环境
流程
添加远程 registry:
- 在自动化中心中,点主菜单窗格中的 Execution Environments。有两个选择可用,Execution Environments, 和 Remote Registries。
- 点 Remote Registries。
在主窗口中点 Add Remote Registry。
- 在 Name 字段中输入容器所在的 registry 的名称。
- 在 URL 字段中输入容器所在的 registry 的 URL。
- 如果需要,在 Username 字段中输入用户名。
- 在 Password 字段中,根据需要输入密码。
- 点击 Save。
6.3. 添加执行环境
流程
- 进入 Execution Environments。
- 输入执行环境的名称。
- 可选:输入上游名称。
- 在 Registry 下,从下拉菜单中选择 registry 的名称。
- 在 Add tags to include 字段中输入 tags。如果字段留空,则将传递所有标签。因此,传递特定存储库的标签非常重要。
剩余的字段是可选的:
- 当前包括的标签
- 添加要排除的标签
- 当前排除的标签
- 描述
- 带有访问权限的组
- 点击 Save。
- 同步镜像。
6.4. 从本地推送容器镜像
流程
在终端中登录 podman,或登录到当前正在使用的任何容器客户端。
> podman pull <__container-name__>
拉取镜像后,添加标签:
> podman tag <container-name> _<server-address>_/<container-name>:<tag name>
进行更改后为镜像签名,并将它推送会:
> podman push _<server-address>_/<container-name>:<tag name> --tls-verify=false --sign-by<reference to the gpg key on your local>
如果镜像未签名,则只能使用嵌入的任何当前签名推送。
在不签名的情况下推送镜像:
> podman push _<server-address>_/<container-name>:<tag name> --tls-verify=false
- 进入自动化中心,并在该窗口没有打开时点 Execution Environments。
- 点 Refresh 图标刷新页面以显示新的执行环境。
- 点镜像的名称。
在镜像名称下方的详情页面中,将显示镜像是否已签名。在这种情况下,它会显示 "Unsigned"。
从自动化中心签名镜像:
- 点镜像名称打开详情页面。
点详细信息页面右上角的三个点。有三个选项可用:
- 在控制器中使用
- 删除
- Sign
- 从下拉菜单中选择 sign。
签名服务为镜像签名。签名镜像后,状态将变为"签名"。
6.5. 使用带有签名镜像的策略
podman 或其他镜像客户端可以使用策略来确保镜像的有效性,方法是将特定策略分配给该签名。
6.5.1. 使用 podman 确保镜像由特定的签名签名
当确保签名由特定的签名进行签名时,签名必须位于您的本地。
流程
- 在导航窗格中,选择 Signature Keys。
- 点您使用的签名右侧的三个点。
- 从下拉菜单中选择 Download key。此时会打开一个新窗口。
- 在 Name 字段中输入密钥的名称。
- 点击 Save。
6.6. 配置客户端以验证签名
先决条件
- 客户端必须配置 sudo 权限才能验证签名。
流程
在终端类型中:
> sudo <name of editor> __/etc/containers/policy.json__
该文件可能类似如下:
{
"default": [{"type": "reject"}],
"transports": {
"docker": {
"quay.io": [{"type": "insecureAcceptAnything}],
"docker.io": [{"type": "insecureAcceptAnything}],
"_<server-address>_": [
{
"type": "signedBy",
"keyType": "GPGKeys",
"keyPath": "/tmp/containersig.txt"
}
这不会显示 quay.io 或 docker.io 的验证,因为类型是 insecureAcceptAnything,它会覆盖拒绝的默认类型。但是,可以从 <server-address> 验证,因为参数 type 已设置为 "signedBy"`。
目前唯一支持的 keyType 是 GPG 密钥。
在
<server-address>条目下,修改keyPath<1> 以反映您的密钥文件的名称。{ "default": [{"type": "reject"}], "transports": { "docker": { "quay.io": [{"type": "insecureAcceptAnything}], "docker.io": [{"type": "insecureAcceptAnything}], "_<server-address>_1": [ { "type": "signedBy", "keyType": "GPGKeys", "keyPath": "/tmp/<key file name", 1 "signedIdentity": { "type": "remapIdentity", "prefix": "_<server-address>_", "signedPrefix": "0.0.0.0:8002" }- 保存并关闭该文件。
- 使用 podman 或您选择的客户端拉取文件:
> podman pull _<server-address>_/<container-name>:<tag name> --tls-verify=false
这会在没有错误的情况下验证签名。
第 7 章 删除容器仓库
从本地自动化中心删除容器存储库,以管理您的磁盘空间。您可以从 Container Repository 列表视图中的 Red Hat Ansible Automation Platform 接口删除存储库。
7.1. 删除容器仓库
先决条件
- 有管理存储库的权限。
流程
- 进入 Execution Environments。
- 在您要删除的容器存储库中,点 More Actions 图标 apicurio,然后点 Delete。
- 在显示确认消息时,点复选框,然后点 Delete。
验证
- 返回到 Execution Environments 列表视图。容器存储库应当从列表中删除。