在私有自动化中心(automation hub)中管理容器

Red Hat Ansible Automation Platform 2.4

使用自动化中心容器 registry 管理容器镜像仓库

Red Hat Customer Content Services

摘要

本指南为配置私有自动化中心容器 registry 和软件仓库提供了管理员工作流和流程。

使开源包含更多

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。我们从这四个术语开始:master、slave、黑名单和白名单。由于此项工作十分艰巨,这些更改将在即将推出的几个发行版本中逐步实施。有关更多详情,请参阅我们的首席技术官 Chris Wright 提供的消息

对红帽文档提供反馈

我们非常感谢您对我们的技术内容提供反馈,并鼓励您告诉我们您的想法。如果您想添加评论,提供见解、纠正拼写错误甚至询问问题,您可以在文档中直接这样做。

注意

您必须有一个红帽帐户并登录到客户门户网站。

要从客户门户网站提交文档反馈,请执行以下操作:

  1. 选择 Multi-page HTML 格式。
  2. 点文档右上角的 反馈 按钮。
  3. 突出显示您要提供反馈的文本部分。
  4. 点高亮文本旁的 添加反馈 对话框。
  5. 在页面右侧的文本框中输入您的反馈,然后单击 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 中创建和管理组配置和访问权限。

流程

  1. 登录到您的本地自动化中心。
  2. 进入 User AccessGroups
  3. Create
  4. 提供 Name 并点 Create

现在,您可以分配权限并在组编辑页面中添加用户。

2.4. 为组分配权限

您可以为 Automation Hub 中的组分配权限,以便用户访问系统中的特定功能。默认情况下,新组没有任何分配的权限。您可以在初始组创建时添加权限,或编辑现有组以添加或删除权限

先决条件

  • 您有 Change group 权限并可以在 Automation Hub 中编辑组权限。

流程

  1. 登录到您的本地自动化中心。
  2. 导航到 User AccessRoles
  3. Add roles
  4. 单击 name 字段,再填写角色名称。
  5. 单击描述字段,再填写描述。
  6. 完成 Permissions 部分。
  7. 点每个权限类型的项,然后选择列表中显示的权限。
  8. 完成后点 Save 来分配权限。
  9. 进入 User AccessGroups
  10. 点击组名称。
  11. Access 选项卡。
  12. Add roles
  13. 选择在第 8 步中创建的角色。
  14. Next 确认所选角色。
  15. 单击 Add 以完成添加角色。

组现在可以访问自动化 hub 中的功能,与其分配的权限相关联。

其他资源

2.5. 将用户添加到组中

您可以在创建组时将用户添加到组中,或者手动将用户添加到现有组中。本节论述了如何在现有组中添加用户。

先决条件

  • 您有权限,可以在 Automation Hub 中创建和管理组配置和访问权限。

流程

  1. 登录到自动化中心。
  2. 进入 User AccessGroups
  3. 点一个组名称。
  4. 进入 Users 选项卡,然后单击 Add
  5. 从列表中选择要添加的用户,然后点 Add

您已添加了您选择的用户。这些用户现在有使用分配给组的自动化中心的权限。

第 3 章 填充私有自动化中(automation hub)容器 registry

默认情况下,私有自动化中心不包括容器镜像。要填充容器 registry,您需要将容器镜像推送到其中。本节中的步骤描述了如何从红帽生态系统目录 (registry.redhat.io) 拉取镜像,标记镜像并将其推送到您的私有自动化中心容器 registry。

重要

镜像清单和文件系统 Blob 直接从 registry.redhat.ioregistry.access.redhat.com 提供。但是,从 2023 年 5 月 1 日开始,文件系统 Blob 由 quay.io 提供。为了避免拉取容器镜像出现问题,您必须启用到以下主机名的出站连接:

  • cdn.quay.io
  • cdn01.quay.io
  • cdn02.quay.io
  • cdn03.quay.io

此更改应针对用于启用到 registry.redhat.ioregistry.access.redhat.com 的出站连接的任何防火墙配置进行修改。

在配置防火墙规则时使用主机名而不是 IP 地址。

完成此更改后,您可以继续从 registry.redhat.ioregistry.access.redhat.com 拉取镜像。您不需要 quay.io 登录,或以任何方式直接与 quay.io registry 交互,以继续拉取红帽容器镜像。

3.1. 先决条件

  • 有创建新容器并将容器推送到私有自动化中心的权限。

3.2. 获取用于自动化中心的镜像

在将容器镜像推送到私有自动化中心之前,您必须首先从现有 registry 中拉取容器镜像并标记它们以供使用。本例详细介绍了如何从红帽生态系统目录 (registry.redhat.io) 中拉取镜像。

先决条件

有从 registry.redhat.io 拉取镜像的权限

流程

  1. 使用 registry.redhat.io 凭证登录到 Podman:

    $ podman login registry.redhat.io
  2. 在提示符处输入您的用户名和密码。
  3. 拉取容器镜像:

    $ podman pull registry.redhat.io/<container_image_name>:<tag>

验证

  1. 列出本地存储中的镜像:

    $ podman images
  2. 验证您最近拉取的镜像是否包含在列表中。
  3. 验证该标签是否正确。

其他资源

3.3. 用于自动化中心的标记镜像

从 registry 中拉取镜像后,标记它们以便在私有自动化中心容器 registry 中使用。

先决条件

  • 您已从外部 registry 中提取容器镜像。
  • 有自动化中心实例的 FQDN 或 IP 地址。

流程

  • 使用自动化中心容器存储库标记本地镜像

    $ podman tag registry.redhat.io/<container_image_name>:<tag> <automation_hub_URL>/<container_image_name>

验证

  1. 列出本地存储中的镜像:

    $ podman images
  2. 验证您最近使用自动化中心信息标记的镜像是否包含在列表中。

3.4. 将容器镜像推送到私有自动化中心

您可以将标记的容器镜像推送到私有自动化中心,以创建新容器并填充容器 registry。

先决条件

  • 有创建新容器的权限。
  • 有自动化中心实例的 FQDN 或 IP 地址。

流程

  1. 使用您的自动化中心位置和凭证登录到 Podman:

    $ podman login -u=<username> -p=<password> <automation_hub_url>
  2. 将容器镜像推送到自动化中心容器 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)

验证

  1. 登录到您的自动化中心。
  2. 进入 Container Registry
  3. 在 container 存储库列表中找到容器。

第 4 章 设置容器存储库

您可以设置容器存储库来添加描述,包括 README,添加可以访问存储库的组,以及标记镜像。

4.1. 先决条件

  • 您使用权限登录到私有 Automation Hub,以更改存储库。

4.2. 将 README 添加到容器存储库中

将 README 添加到容器存储库,以向用户提供如何使用容器的说明。自动化中心容器存储库支持 Markdown 创建 README。默认情况下,README 将为空。

先决条件

  • 有更改容器的权限。

流程

  1. 进入 Execution Environments
  2. 选择您的容器存储库。
  3. Details 标签页中,点 Add
  4. Raw Markdown 文本字段中,使用 Markdown 格式输入您的 README 文本。
  5. 完成后点 Save

添加 README 后,您可以随时通过点 Edit 并重复步骤 4 和 5 对其进行编辑。

4.3. 提供对容器存储库的访问

为需要使用镜像的用户提供容器存储库的访问权限。通过添加组,您可以修改组对容器存储库的权限。您可以使用这个选项根据组分配的内容来扩展或限制权限。

先决条件

  • 您具有改变容器命名空间的权限。

流程

  1. 进入 Execution Environments
  2. 选择您的容器存储库。
  3. 点击窗口右上角的 Edit
  4. Groups with access 中选择要分配访问权限的一个或多个组。

    • 可选:使用该组名称下的下拉菜单为特定组添加或删除权限。
  5. 点击 Save

4.4. 标记容器镜像

标记镜像,为存储在自动化中心容器存储库中的镜像添加额外名称。如果没有向镜像添加任何标签,则自动化中心名称默认为 latest

先决条件

  • 您有更改镜像标签的权限。

流程

  1. 进入 Execution Environments
  2. 选择您的容器存储库。
  3. Images 选项卡。
  4. More Actions 图标 CLASS,然后点 Manage tags
  5. 在文本字段中添加新标签,然后点 Add

    • 可选:通过点该镜像的任何标签上的 x 来删除当前标签
  6. 点击 Save

验证

  • Activity 选项卡,再检查最新的变化。

4.5. 在自动化控制器中创建凭证

在以前的版本中,您需要部署 registry 来存储执行环境镜像。在 Ansible Automation Platform 2.0 及更新的版本中,假设您已经启动并运行了容器 registry。因此,您只需要添加您选择的容器 registry 凭证来存储执行环境镜像。

要从密码或令牌保护的 registry 中拉取容器镜像,请在自动化控制器中创建凭证:

流程

  1. 进入自动化控制器。
  2. 在侧边栏中,点 ResourcesCredentials
  3. Add 以创建新凭据。
  4. 输入授权 NameDescriptionOrganization
  5. 选择凭据类型
  6. 输入身份验证 URL。这是容器 registry 地址。
  7. 输入登录到容器 registry 所需的 UsernamePassword or Token
  8. (可选)选择 Verify SSL 来启用 SSL 验证。
  9. 点击 Save

第 5 章 从容器存储库中拉取镜像

从自动化中心容器 registry 中拉取镜像,以便将镜像复制到本地机器。自动化中心为容器存储库中的每个 latest 镜像提供 podman pull 命令。您可以将此命令复制并粘贴到终端中,或者使用 podman pull 根据镜像标签复制镜像。

5.1. 先决条件

您需要有从私有容器存储库查看和拉取的权限。

5.2. 拉取镜像

您可以从自动化中心容器 registry 中拉取镜像,以在本地机器中创建副本。自动化中心为容器存储库中的每个 latest 镜像提供 podman pull 命令。

注意

如果需要从密码保护的 registry 中拉取容器镜像,您必须在拉取镜像前在自动化控制器中创建凭证

流程

  1. 进入 Execution Environments
  2. 选择您的容器存储库。
  3. Pull this image 条目中,点 Copy to clipboard
  4. 在终端中粘贴并运行命令。

验证

  • 运行 podman images 以查看本地机器上的镜像。

5.3. 从容器存储库同步镜像

您可以从自动化中心容器 registry 拉取镜像,将镜像同步到本地机器。

先决条件

您需要有从私有容器存储库查看和拉取的权限。

流程

要从远程容器注册表同步镜像,您需要配置远程 registry。

  1. 导航到 Execution EnvironmentsRemote Registries
  2. https://registry.redhat.io 添加到 registry。
  3. 添加所需的任何凭证进行验证。
注意

有些容器 registry 因速率限制而积极。建议您在 Advanced Options 下设置速率限制。

  1. 导航到 Execution EnvironmentsExecution Environments
  2. 在页面标头中点 Add execution environment
  3. 选择您要从中拉取的 registry。"name"字段显示本地 registry 上显示的镜像的名称。
注意

"Upstream name"字段是远程服务器上的镜像名称。例如,如果上游名称被设置为 "alpine",并且 "name" 字段设置为 "local/alpine",则 alpine 镜像将从远程下载,并重命名为 local/alpine。

建议设置要包含或排除的标签列表。将镜像与大量标签同步会非常耗时,并将使用大量磁盘空间。

其他资源

5.4. 其他资源

第 6 章 使用签名的容器

6.1. 为容器签名部署您的系统

执行环境是 Ansible 自动化控制器用于运行作业的容器镜像。此内容可以下载到私有自动化中心,并在您的机构中发布。

现在,自动化中心实施镜像签名,因此用户可以更好地为 EE 容器镜像安全。

作为 Ansible Automation Platform 用户,您现在可以确认 EE/Container 是否已签名,也可以使用适当的工具自行签名和验证。本节详细介绍了如何部署您的系统,使其准备好进行容器签名。

流程

  1. 部署系统,支持激活容器签名。

    _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_
  2. 进入自动化中心。
  3. 在导航窗格中,选择 Signature Keys
  4. 确保有一个名为 container-defaultcontainer-anyname 的密钥。
注意

'container-default' 服务由 Ansible Automation Platform 安装程序创建的。

6.2. 在自动化中心远程添加容器

将容器添加到自动化中心的方法有两种:

  • 创建远程
  • 执行环境

流程

添加远程 registry:

  1. 在自动化中心中,点主菜单窗格中的 Execution Environments。有两个选择可用,Execution Environments, 和 Remote Registries
  2. Remote Registries
  3. 在主窗口中点 Add Remote Registry

    • Name 字段中输入容器所在的 registry 的名称。
    • URL 字段中输入容器所在的 registry 的 URL。
    • 如果需要,在 Username 字段中输入用户名。
    • Password 字段中,根据需要输入密码。
    • 点击 Save

6.3. 添加执行环境

流程

  1. 进入 Execution Environments
  2. 输入执行环境的名称。
  3. 可选:输入上游名称。
  4. Registry 下,从下拉菜单中选择 registry 的名称。
  5. Add tags to include 字段中输入 tags。如果字段留空,则将传递所有标签。因此,传递特定存储库的标签非常重要。
  6. 剩余的字段是可选的:

    • 当前包括的标签
    • 添加要排除的标签
    • 当前排除的标签
    • 描述
    • 带有访问权限的组
  7. 点击 Save
  8. 同步镜像。

6.4. 从本地推送容器镜像

流程

  1. 在终端中登录 podman,或登录到当前正在使用的任何容器客户端。

    > podman pull <__container-name__>
  2. 拉取镜像后,添加标签:

    > podman tag <container-name> _<server-address>_/<container-name>:<tag name>
  3. 进行更改后为镜像签名,并将它推送会:

    > podman push _<server-address>_/<container-name>:<tag name>
    --tls-verify=false --sign-by<reference to the gpg key on your local>

    如果镜像未签名,则只能使用嵌入的任何当前签名推送。

  4. 在不签名的情况下推送镜像:

    > podman push _<server-address>_/<container-name>:<tag name>
    --tls-verify=false
  5. 进入自动化中心,并在该窗口没有打开时点 Execution Environments
  6. Refresh 图标刷新页面以显示新的执行环境。
  7. 点镜像的名称。

在镜像名称下方的详情页面中,将显示镜像是否已签名。在这种情况下,它会显示 "Unsigned"。

从自动化中心签名镜像:

  1. 点镜像名称打开详情页面。
  2. 点详细信息页面右上角的三个点。有三个选项可用:

    • 在控制器中使用
    • 删除
    • Sign
  3. 从下拉菜单中选择 sign

签名服务为镜像签名。签名镜像后,状态将变为"签名"。

6.5. 使用带有签名镜像的策略

podman 或其他镜像客户端可以使用策略来确保镜像的有效性,方法是将特定策略分配给该签名。

6.5.1. 使用 podman 确保镜像由特定的签名签名

当确保签名由特定的签名进行签名时,签名必须位于您的本地。

流程

  1. 在导航窗格中,选择 Signature Keys
  2. 点您使用的签名右侧的三个点。
  3. 从下拉菜单中选择 Download key。此时会打开一个新窗口。
  4. Name 字段中输入密钥的名称。
  5. 点击 Save

6.6. 配置客户端以验证签名

先决条件

  • 客户端必须配置 sudo 权限才能验证签名。

流程

  1. 在终端类型中:

    > 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.iodocker.io 的验证,因为类型是 insecureAcceptAnything,它会覆盖拒绝的默认类型。但是,可以从 <server-address> 验证,因为参数 type 已设置为 "signedBy"`

注意

目前唯一支持的 keyType 是 GPG 密钥。

  1. <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"
        }
  2. 保存并关闭该文件。
  3. 使用 podman 或您选择的客户端拉取文件:
> podman pull _<server-address>_/<container-name>:<tag name>
--tls-verify=false

这会在没有错误的情况下验证签名。

第 7 章 删除容器仓库

从本地自动化中心删除容器存储库,以管理您的磁盘空间。您可以从 Container Repository 列表视图中的 Red Hat Ansible Automation Platform 接口删除存储库。

7.1. 删除容器仓库

先决条件

  • 有管理存储库的权限。

流程

  1. 进入 Execution Environments
  2. 在您要删除的容器存储库中,点 More Actions 图标 apicurio,然后点 Delete
  3. 在显示确认消息时,点复选框,然后点 Delete

验证

  • 返回到 Execution Environments 列表视图。容器存储库应当从列表中删除。

法律通告

Copyright © 2023 Red Hat, Inc.
The text of and illustrations in this document are licensed by Red Hat under a Creative Commons Attribution–Share Alike 3.0 Unported license ("CC-BY-SA"). An explanation of CC-BY-SA is available at http://creativecommons.org/licenses/by-sa/3.0/. In accordance with CC-BY-SA, if you distribute this document or an adaptation of it, you must provide the URL for the original version.
Red Hat, as the licensor of this document, waives the right to enforce, and agrees not to assert, Section 4d of CC-BY-SA to the fullest extent permitted by applicable law.
Red Hat, Red Hat Enterprise Linux, the Shadowman logo, the Red Hat logo, JBoss, OpenShift, Fedora, the Infinity logo, and RHCE are trademarks of Red Hat, Inc., registered in the United States and other countries.
Linux® is the registered trademark of Linus Torvalds in the United States and other countries.
Java® is a registered trademark of Oracle and/or its affiliates.
XFS® is a trademark of Silicon Graphics International Corp. or its subsidiaries in the United States and/or other countries.
MySQL® is a registered trademark of MySQL AB in the United States, the European Union and other countries.
Node.js® is an official trademark of Joyent. Red Hat is not formally related to or endorsed by the official Joyent Node.js open source or commercial project.
The OpenStack® Word Mark and OpenStack logo are either registered trademarks/service marks or trademarks/service marks of the OpenStack Foundation, in the United States and other countries and are used with the OpenStack Foundation's permission. We are not affiliated with, endorsed or sponsored by the OpenStack Foundation, or the OpenStack community.
All other trademarks are the property of their respective owners.