使用 Red Hat Quay
前言 复制链接链接已复制到粘贴板!
Red Hat Quay 容器镜像 registry 可让您将容器镜像存储在中央位置。作为 Red Hat Quay registry 的普通用户,您可以创建存储库来组织镜像,并选择性地添加对您控制的存储库的读取(pull)和写入(push)访问权限。具有管理特权的用户可以执行更广泛的任务,如添加用户和控制默认设置的能力。
本指南假定您部署了 Red Hat Quay,并已准备好开始使用它。
第 1 章 Red Hat Quay 中的用户和机构 复制链接链接已复制到粘贴板!
在开始创建软件仓库以在 Red Hat Quay 中保存容器镜像之前,您应该考虑如何组织这些存储库。Red Hat Quay 实例中的每个软件仓库都必须与一个机构或用户关联。
1.1. Red Hat Quay tenancy 模型 复制链接链接已复制到粘贴板!
- 组织 在通用命名空间内提供共享存储库的方式,该命名空间不属于一个用户,而是属于共享设置中的许多用户(如公司)。
- 团队 为机构提供了一种将权限(包括全局和特定存储库)的权限(特定存储库)设置或用户组的方法。
-
用户可以通过 Red Hat Quay Web UI 或客户端(如
podman login)登录到 registry。每个用户自动获得用户命名空间,如quay-server.example.com/user/<username>。 - 超级用户 通过位于用户界面中的超级用户管理员面板通过 Super User API 调用来增强访问权限和特权,以及对普通用户可见或可访问的 Super 用户 API 调用。
- 机器人帐户 提供对非human 用户的存储库的自动访问,如管道工具,并且与 OpenShift 服务帐户类似。通过像任何其他用户或团队一样添加该帐户,可以为存储库中的机器人帐户授予权限。
1.2. 创建用户帐户 复制链接链接已复制到粘贴板!
为您的 Red Hat Quay 实例创建新用户:
- 以超级用户(默认情况下为quay)登录到 Red Hat Quay。
- 从主页右上角选择您的帐户名称,然后选择 Super User Admin Panel.
- 从左列中选择用户图标。
- 选择创建用户按钮。
- 输入新用户的用户名和电子邮件地址,然后选择创建用户按钮。
返回到 Users 页面,选择新 Username 右侧的 Options 图标。此时会出现一个下拉菜单,如下图所示:
- 从菜单中选择 Change Password。
- 添加新密码并确认密码,然后选择"更改密码"按钮。
新用户现在可以使用该用户名和密码通过 web ui 或一些容器客户端登录。
1.3. 创建机构帐户 复制链接链接已复制到粘贴板!
任何用户都可以创建自己的组织,以共享容器镜像的存储库。要创建新机构,请执行以下操作:
- 以任何用户身份登录时,从主页右上角选择加号(+),然后选择 New Organization。
- 键入机构的名称。名称必须是字母数字,所有小写,以及 2 到 255 个字符的长度
选择 Create Organization。新组织会出现,可以从左列中的图标开始添加存储库、团队、机器人帐户和其他功能。下图显示了使用选择设置选项卡的新组织的页面示例。
第 2 章 创建软件仓库 复制链接链接已复制到粘贴板!
存储库提供存储相关容器镜像集的中央位置。在 Red Hat Quay 中创建存储库的方法有两种:通过 push(从 docker 或 podman)和 Red Hat Quay UI。它们基本上是相同的,无论您使用的是 Quay.io,还是您自己的 Red Hat Quay 实例。
2.1. 通过 UI 创建镜像存储库 复制链接链接已复制到粘贴板!
在 Red Hat Quay UI 中创建用户在用户帐户下存储库:通过 Web UI 登录用户帐户。点击主页(或者与用户关联的其他页面)右上角的 + 图标,然后选择 New Repository,如下图所示:
+
在出现的 Create New Repository 页面上
- 在您的用户名中添加新存储库名称
- 单击 Repository Description 并键入存储库的描述
- 在 Repository Visibility 中,选择您是否要是公共仓库还是私有
- 单击创建存储库按钮。
创建新的存储库,从空开始。您可以使用 docker pull 命令从这个仓库中拉取镜像(减去镜像名称)。
要在 Red Hat Quay UI 中创建在机构下的软件仓库:
- 以具有组织的 Admin 或 Write 权限的用户身份登录。
- 在 Repositories 视图中,从 Users 和 Organizations 下的右列中选择机构名称。这个机构页面会出现,类似于图 2.x 中显示的页面:
- 单击页面右上角的 +Create New Repository。
在出现的 Create New Repository 页面中:
- 将新存储库名称添加到机构名称
- 单击 Repository Description 并键入存储库的描述
- 在 Repository Visibility 中,选择您是否要是公共仓库还是私有
- 单击创建存储库按钮。
创建新的存储库,从空开始。您可以使用 docker pull 命令从这个仓库中拉取镜像(减去镜像名称)。
2.2. 通过 docker 或 podman 创建镜像存储库 复制链接链接已复制到粘贴板!
假设您有正确的凭证,将镜像推送到 Red Hat Quay 实例中不存在的软件仓库中,会在将镜像推送到该存储库时创建该存储库。docker 或 podman 命令适用于这些示例。
标记镜像:在本地系统中提供了
docker或podman的镜像,使用新存储库名称和镜像名称标记该镜像。以下是将镜像推送到 Quay.io 或您自己的 Red Hat Quay 设置的示例(如 reg.example.com)。例如,将 namespace 替换为您的 Red Hat Quay 用户名或机构,将 repo_name 替换为您要创建的存储库的名称:sudo podman tag myubi-minimal quay.io/namespace/repo_name sudo podman tag myubi-standard reg.example.com/namespace/repo_name
# sudo podman tag myubi-minimal quay.io/namespace/repo_name # sudo podman tag myubi-standard reg.example.com/namespace/repo_nameCopy to Clipboard Copied! Toggle word wrap Toggle overflow 推送到适当的 registry。例如:
sudo podman push quay.io/namespace/repo_name sudo podman push reg.example.com/namespace/repo_name
# sudo podman push quay.io/namespace/repo_name # sudo podman push reg.example.com/namespace/repo_nameCopy to Clipboard Copied! Toggle word wrap Toggle overflow
要创建应用程序存储库,请按照您执行创建容器镜像存储库的步骤操作。
第 3 章 管理对软件仓库的访问 复制链接链接已复制到粘贴板!
作为 Red Hat Quay 用户,您可以创建自己的软件仓库,并使其可以被 Red Hat Quay 实例上的其他用户访问。另外,您可以创建机构来允许基于团队访问存储库。在用户和组织存储库中,您可以通过创建与机器人帐户关联的凭据来允许访问这些存储库。机器人帐户使得各种容器客户端(如 docker 或 podman)可以轻松访问您的仓库,而无需客户端具有 Red Hat Quay 用户帐户。
3.1. 允许访问用户仓库 复制链接链接已复制到粘贴板!
在用户命名空间中创建存储库时,您可以将对此存储库的访问权限添加到用户帐户或通过机器人帐户添加访问权限。
3.1.1. 允许用户访问用户存储库 复制链接链接已复制到粘贴板!
要访问与用户帐户关联的仓库,请执行以下操作:
- 登录到您的 Red Hat Quay 用户帐户。
- 选择要共享访问权限的用户命名空间下的仓库。
- 从左列中选择 Settings 图标。
键入您要授予您存储库访问权限的用户名称。用户名应显示为您类型,如下图所示:
在权限框中选择以下其中之一:
- read - 允许用户查看存储库并从中拉取存储库。
- write - 允许用户查看存储库,以及从镜像拉取(pull)到存储库的镜像。
- admin - 允许存储库的所有管理设置,以及所有 Read 和 Write 权限。
- 选择 Add Permission 按钮。用户现在有分配的权限。
要删除存储库的用户权限,请选择用户条目右侧的 Options 图标,然后选择 Delete Permission。
3.2. 允许访问用户存储库的机器机器 复制链接链接已复制到粘贴板!
机器人帐户用于设置对 Red Hat Quay registry 中存储库的自动访问。它们与 OpenShift 服务帐户类似。设置机器人帐户时,您:
- 生成与机器人帐户关联的凭证
- 识别机器可以将镜像推送到或拉取镜像的存储库和镜像
- 复制并粘贴生成的凭证,以用于不同的容器客户端(如 Docker、podman、Kubernetes、Metesos 等)访问每个定义的存储库
请记住,每个机器人帐户都限制为一个用户命名空间或机构。例如,机器人可以提供对用户 jsmith 访问的所有存储库的访问权限,但不能提供给不在用户存储库列表中的任何存储库。
以下流程通过设置机器人帐户来允许访问您的存储库。
- 选择 Robot 图标:在 Repositories 视图中,从左列中选择 Robot 图标。
- 创建 Robot 帐户:选择 Create Robot Account 按钮。
- 设置 Robot 名:输入名称和描述,然后选择 Create robot account 按钮。机器人名称成为您的用户名的组合,以及您设置的机器人名称(如 jsmith+myrobot)
向机器人帐户添加权限:在机器人帐户的 Add permissions 屏幕中,定义您要机器人可访问的存储库,如下所示:
- 在机器人可以访问的每个存储库旁边放置一个复选标记
对于每个存储库,选择以下之一并点 Add permissions:
- None - Robot 对存储库没有权限
- Read - Robot 可以从存储库查看和拉取
- write - Robot 可从中读取(拉取)并写入(push)到存储库
- admin - 完全从存储库拉取(pull)和推送到存储库的功能,以及执行与存储库关联的管理任务
- 选择添加权限按钮来应用设置
- 获取凭证以通过机器人访问存储库: Back on the Robot Accounts 页面,选择 Robot account name 来查看该机器的凭据信息。
获取令牌:选择 Robot Token,如下图所示,查看为机器人生成的令牌。如果要重置令牌,请选择 Regenerate Token。
注意务必要清楚,重新生成令牌使这个人的前一个令牌都无效。
get credentials:在对生成的令牌满意后,使用以下命令获取生成的凭证:
- Kubernetes Secret:选择它以 Kubernetes pull secret yaml 文件的形式下载凭证。
- rkt Configuration:选择这个来为 rkt 容器运行时下载凭证,格式为 json 文件。
-
docker Login:选择它复制包含凭据的完整
docker login命令行。 - Docker 配置:选择此文件以下载要用作 Docker config.json 文件的文件,以永久存储您的客户端系统中的凭据。
- Mesos Credentials:选择它下载 tarball,提供可在 Mesos 配置文件的 uris 字段中标识的凭据。
3.3. 允许访问机构仓库 复制链接链接已复制到粘贴板!
创建机构后,您可以将一组存储库直接关联到该组织。要为该机构中的存储库添加访问权限,您可以添加团队(具有相同权限的用户集)和单独的用户。基本上,组织具有与用户相同的创建存储库和机器人帐户的功能,但组织旨在通过一组用户(团队或单独)设置共享存储库。
有关机构的其他知识:
- 您不能在另一个机构中有一个机构。为了整理组织,请使用团队。
- 机构无法直接包含用户。您必须首先添加一个团队,然后为每个团队添加一个或多个用户。
- 可以将团队作为使用存储库和关联镜像的成员设置,也可以作为管理员设置,以管理该机构具有特殊特权
3.3.1. 将团队添加到机构 复制链接链接已复制到粘贴板!
当您为您的机构创建团队时,可以选择团队名称,选择哪些软件仓库可供团队使用,并决定团队的访问权限级别。
- 在 Organization 视图中,从左列中选择 Teams 和 Membership 图标。您将看到所有者团队存在,其具有创建该组织的用户的 Admin 权限。
- 选择 Create New Team。系统会提示您输入要与机构关联的新团队名称。输入团队名称,该名称必须以小写字母开头,且团队名称的其余部分是小写字母和数字的任意组合(不允许大写字母或特殊字符)。
- 选择 Create team 按钮。此时会出现 Add permissions 窗口,显示机构中的存储库列表。
检查每个您希望团队能够访问的存储库。然后为每个方法选择一个权限:
- 读取 - 团队成员可以查看和拉取镜像
- write - 团队成员可以查看、拉取和推送镜像
- admin - 团队成员具有完全的读/写权限,以及执行与存储库相关的管理任务
- 选择 Add permissions 为团队保存存储库权限。
3.3.2. 设置团队角色 复制链接链接已复制到粘贴板!
在添加了团队后,您可以在机构内设置该团队的角色。从组织内的 Teams 和 Membership 屏幕中,选择 TEAM ROLE 下拉菜单,如下图所示:
对于所选团队,选择以下角色之一:
- 成员 - 为团队设置的所有权限
- 创建者 - 所有成员权限,以及创建新存储库的能力
- admin - 完全管理对组织的访问权限,包括创建团队、添加成员和设置权限。
3.3.3. 将用户添加到团队 复制链接链接已复制到粘贴板!
作为拥有组织的 Admin 权限的用户,您可以向团队添加用户和机器人。添加用户时,它会向该用户发送电子邮件。用户会一直处于等待状态,直到该用户接受邀请。
要将用户或机器添加到团队,请从机构屏幕开始并执行以下操作:
- 选择您要添加用户或机器人的团队。
在 Team Members 框中,键入以下之一:
- 来自 Red Hat Quay registry 账户的用户名
- registry 中用户帐户的电子邮件地址
- 机器人帐户的名称。名称必须采用 orgname+robotname 的形式
- 如果是机器人帐户,它会立即添加到团队中。对于用户帐户,需要加入的邀请被发送给用户。在用户接受该邀请前,用户仍然处于 INVITED TO JOIN 状态。
接下来,用户接受加入团队的电子邮件邀请。用户下一次登录 Red Hat Quay 实例时,用户将从 INVITED TO JOIN 列表中移到该机构的 MEMBERS 列表中。
第 4 章 使用标签 复制链接链接已复制到粘贴板!
标签提供了一种方式来识别镜像的版本,以及以不同方式提供命名同一镜像的方法。除了镜像的版本外,镜像标签还可识别其用途(如 devel、test 或 prod)或事实(最新)。
在镜像存储库 的标签 选项卡中,您可以查看、修改、添加、移动、删除和查看标签历史记录。您还可以使用不同的命令获取特定镜像(基于其名称和标签)下载(拉取)特定镜像的命令行。
4.1. 查看和修改标签 复制链接链接已复制到粘贴板!
存储库的标签可以在存储库页面的 tags 面板中查看和修改,方法是单击 Tags 选项卡。
4.1.1. 添加新标签到带标记的镜像 复制链接链接已复制到粘贴板!
单击标签旁边的 gear 图标并选择 Add New Tag,即可将新标签添加到标签。Red Hat Quay 将确认向镜像添加新标签。
4.1.2. 移动标签 复制链接链接已复制到粘贴板!
将标签移到不同的镜像可以通过执行与添加新标签相同的操作,但提供现有的标签名称来实现。Red Hat Quay 将确认您希望标签移动,而不是添加。
4.1.3. 删除标签 复制链接链接已复制到粘贴板!
特定标签及其所有镜像可以通过单击标签的 gear 图标并选择 Delete Tag 来删除。这将删除该标签以及其唯一的任何镜像。除非没有标签直接通过父子关系或间接引用镜像,否则不会删除镜像。
4.1.4. 查看标签历史记录并返回到时间 复制链接链接已复制到粘贴板!
4.1.4.1. 查看标签历史记录 复制链接链接已复制到粘贴板!
要查看标签的镜像历史记录,请单击 Actions 菜单下的 View Tags History 菜单项。显示页面将显示过去和指向该镜像时标记所指向的每个镜像。
4.1.4.2. 返回时间 复制链接链接已复制到粘贴板!
要将标签恢复到以前的镜像,请找到覆盖所需镜像的历史记录行,并点击 Restore 链接。
4.1.5. 通过标签或摘要获取镜像 复制链接链接已复制到粘贴板!
在 Tags 选项卡中,您可以查看从准备好使用这些镜像的客户端中拉取镜像的不同方法。
- 选择特定的存储库/镜像
- 在左侧列中选择标签
- 选择特定镜像/标签组合的 Fetch Tag 图标
- 当显示 Fetch Tag 弹出时,选择 Image format 复选框,以查看显示可用于拉取镜像的不同方法的下拉菜单。选择提供将特定容器镜像拉取到本地系统的完整命令行:
您可以通过标签名称或使用 docker 命令摘要名称来拉取镜像的常规名称。选择您想要的拉取类型,然后选择 Copy Command。完整的命令行复制到您的剪贴板中。这两个命令显示标签和摘要的 docker pull:
docker pull quay.io/cnegus/whatever:latest docker pull quay.io/cnegus/whatever@sha256:e02231a6aa8ba7f5da3859a359f99d77e371cb47e643ce78e101958782581fb9
docker pull quay.io/cnegus/whatever:latest
docker pull quay.io/cnegus/whatever@sha256:e02231a6aa8ba7f5da3859a359f99d77e371cb47e643ce78e101958782581fb9
将命令粘贴到系统中可用的 docker 命令和服务可用的命令行 shell 中,然后按 Enter 键。此时,容器镜像已准备好在您的本地系统上运行。
在 RHEL 和 Fedora 系统中,您可以替换 docker 的 podman 来拉取和运行所选镜像。
4.2. 标签过期 复制链接链接已复制到粘贴板!
可以使用名为 标签过期 的功能,设置为从所选日期和时间的 Red Hat Quay 存储库过期 镜像。有关标签过期的信息包括:
- 当标签过期时,标签将从存储库中删除。如果是特定镜像的上标签,则镜像将被设为已删除。
- 过期以每个标签为基础设置,而不是针对整个仓库设置。
- 当标签过期或删除时,不会立即从 registry 中删除。Time Machine(在用户设置中)的值定义了删除的标签实际被删除和收集的垃圾回收的时间。默认情况下,这个值为 14 天。直到此时间为止,标签可以被回复到过期或删除的镜像。
- Red Hat Quay 超级用户没有与从用户存储库中删除过期镜像相关的特殊权限。超级用户没有中央机制来收集信息并针对用户存储库执行操作。各个存储库的所有者是管理过期和最终删除其镜像的存储库。
可使用不同方法设置标签过期:
-
在创建镜像时,通过在 Dockerfile 中设置
quay.expires-after=LABEL。这会将一个时间设置为在构建镜像时过期。 - 从存储库标签选择 EXPIRES 栏中的过期日期,然后选择要过期的特定日期和时间。
下图显示了在标签过期时更改标签过期的 Options 条目和标签过期的 EXPIRES 字段。将鼠标悬停在 EXPIRES 字段上,以查看当前设定的过期日期和时间。
4.2.1. 从 Dockerfile 设置标签过期 复制链接链接已复制到粘贴板!
通过 Dockerfile LABEL 命令添加标签,如 quay.expires-after=20h 会导致标签在指定的时间后自动过期。时间值可以类似 1h, 2d, 3w,分别代表小时、天和星期(自镜像构建的时间)。
4.2.2. 从仓库设置标签过期 复制链接链接已复制到粘贴板!
Repository Tag 页面中有一个标题为 EXPIRES 的 UI 列,表示标签何时到期。用户可以单击其过期的时间,或者单击右侧的 Settings 按钮(gear 图标),然后选择 Change Expiration。
选择提示时的日期和时间,然后选择" 更改过期 "。当达到过期时间时,标签将设置为从存储库中删除。
4.3. 安全扫描 复制链接链接已复制到粘贴板!
点击标签页旁边的漏洞或可修复计数,您可以跳到该标签的安全扫描信息。您可以发现您的镜像容易受到影响,以及您可能可用的补救选项。
请记住,镜像扫描只列出 Clair 镜像扫描程序发现的漏洞。每个用户都对未发现的漏洞的作用完全取决于该用户。Red Hat Quay 超级用户不操作这些发现的漏洞。
第 5 章 查看和导出日志 复制链接链接已复制到粘贴板!
为 Red Hat Quay 中的所有仓库和命名空间(用户和机构)收集活动日志。访问日志文件的方法有多种,包括:
- 通过 Web UI 查看日志
- 导出日志以便可以在外部保存它们。
- 通过 API 访问日志条目
要访问日志,必须具有所选存储库或命名空间的 Admin 权限。
通过 API 一次提供最多 100 个日志记录结果。要收集更多结果,您必须使用本章中介绍的日志导出器功能。
5.1. 查看日志 复制链接链接已复制到粘贴板!
要从 Web UI 查看存储库或命名空间的日志条目,请执行以下操作:
- 选择具有 Admin 权限的存储库或命名空间(机构或用户)。
从左列中选择 Usage Logs 图标。此时会出现一个 Usage Logs 屏幕,如下例所示:
在 Usage Logs 页面中,您可以:
- 通过将日期添加到 From 和 to box,设置用于查看日志条目的日期范围。默认情况下会显示日志条目的最新一周。
- 在 Filter Logs 框中键入字符串,以显示给定字符串的容器的日志条目。
- 将箭头切换到任何日志条目左侧的箭头,以查看与该日志条目关联的一个或多个文本。
5.2. 导出存储库日志 复制链接链接已复制到粘贴板!
为了获取大量日志文件并在 Red Hat Quay 数据库之外保存它们,您可以使用 Export Logs 功能。以下是您应该有关使用导出日志的一些问题:
- 您可以为要从仓库收集的日志选择一系列日期。
- 您可以请求通过电子邮件附件发送到您的日志或定向到回调 URL。
- 您需要具有对存储库或命名空间的 Admin 权限才能导出日志
- 一次最多可以导出 30 天日志数据
- 导出日志仅收集之前生成的日志数据。它不会流传输日志数据。
- 必须为此功能配置您的 Red Hat Quay 实例(本地存储将无法工作)。
- 收集日志并可用后,如果您想要保存数据,应立即复制这些数据。默认情况下,数据会在一小时内过期。
使用导出日志功能:
- 选择具有 Admin 权限的存储库。
- 从左列中选择 Usage Logs 图标。此时会出现 Usage Logs 屏幕。
- 选择您要收集的日志条目的 From 和 date 范围。
选择"导出日志"按钮。此时会出现一个出口使用日志弹出,如下所示
- 输入您要接收导出的日志的电子邮件地址或回调 URL。对于回调 URL,您可以使用 URL 作为位置,如 webhook.site。
- 选择 Start Logs Export。这会导致 Red Hat Quay 开始收集所选日志条目。根据收集的日志数据量,这可能需要一分钟到一小时才能完成。
日志导出完成后,您将:
- 收到一封电子邮件,提醒您请求的导出日志条目的可用性。
- 从 webhook URL 查看日志导出请求成功状态。系统将为您选择下载日志的链接。
请记住,URL 指向 Red Hat Quay 外部存储中的位置,并将其设置为一小时内过期。因此,如果您打算保留它们,请确保在过期时间之前复制导出的日志。
第 6 章 使用构建 worker 自动构建 Dockerfile 复制链接链接已复制到粘贴板!
Red Hat Quay 支持在 OpenShift 或 Kubernetes 上使用一组 worker 节点构建 Dockerfile。构建触发器(如 GitHub Webhook)可以配置为在提交新代码时自动构建新版存储库。本文档将指导您使用 Red Hat Quay 安装启用构建,并设置一个或多个 OpenShift/K8s 集群来接受来自 Red Hat Quay 的构建。使用 Red Hat Quay 3.4 时,底层构建管理器已作为 Red Hat Quay 2 从 Python 2 迁移到 Python 3 的一部分进行了彻底重写。因此,构建器节点现在作为 Kubernetes 作业与构建节点动态创建,这些节点在 Red Hat Quay 3.3 及更早版本中持续运行。这大大简化了 Red Hat Quay 管理构建的方式,并提供在每天处理数千个容器镜像构建时所用的相同机制 quay.io。当前在 Red Hat Quay 3.3 下运行静态("企业"构建程序)的客户将需要迁移到基于 Kubernetes 的构建机制。
6.1. 架构概述 复制链接链接已复制到粘贴板!
Red Hat Quay Build 系统专为可扩展性而设计(因为它用来托管 quay.io 的所有构建)。Red Hat Quay 的 Build Manager 组件提供了一个编配层,用于跟踪构建请求并确保构建执行程序(OpenShift/K8s 集群)将执行每个请求。每个构建都由一个 Kubernetes 作业处理,它会启动一个小型虚拟机来完全隔离并包含镜像构建过程。这样可确保容器构建不会影响相互影响或底层构建系统。可以配置多个可执行文件,以确保即使在基础架构出现故障时也会执行构建。Red Hat Quay 会自动将构建发送到不同的 Executor,如果它检测到有困难。
Red Hat Quay 的上游版本提供了如何配置基于 AWS/EC2 的 Executor 的说明。Red Hat Quay 客户不支持此配置。
6.1.1. 构建管理器 复制链接链接已复制到粘贴板!
构建管理器负责调度构建的生命周期。需要更新构建队列、构建阶段和运行作业状态的操作由构建管理器处理。
6.1.2. 构建 worker 的 control plane 复制链接链接已复制到粘贴板!
构建作业在单独的 worker 节点上运行,并调度到单独的 control planes(执行器)。目前,Red Hat Quay 支持在 AWS 和 Kubernetes 上运行作业。构建通过 quay.io/quay/quay-builder 执行。在 AWS 上,构建调度到 EC2 实例。在 k8s 上,构建被调度为作业资源。
6.1.3. 编配器 复制链接链接已复制到粘贴板!
编配器用于存储当前运行的构建作业的状态,并为构建管理器发布事件以消耗。例如,到期事件。目前,支持的编配器后端是 Redis。
6.2. OpenShift 要求 复制链接链接已复制到粘贴板!
Red Hat Quay 构建支持 Kubernetes 和 OpenShift 4.5 或更高版本。需要裸机(非虚拟化)worker 节点,因为构建 pod 需要能够运行 kvm 虚拟化。每个构建都在临时虚拟机中执行,以确保在构建运行时完整的隔离和安全性。另外,您的 OpenShift 集群应该允许与 Red Hat Quay 构建关联的 ServiceAccount 使用所需的 SecurityContextConstraint 运行,以支持特权容器。
6.3. 编配要求 复制链接链接已复制到粘贴板!
Red Hat Quay 构建需要访问 Redis 实例来跟踪构建状态信息。可以使用已部署到 Red Hat Quay 安装中的同一 Redis 实例。所有构建队列都在 Red Hat Quay 数据库中管理,因此不需要高可用性 Redis 实例。
6.4. 使用 OpenShift 设置 Red Hat Quay Builder 复制链接链接已复制到粘贴板!
6.4.1. OpenShift TLS 组件 复制链接链接已复制到粘贴板!
tls 组件允许您控制 TLS 配置。
当 Operator 管理 TLS 组件时,Red Hat Quay 3.7 不支持构建程序。
如果将 tls 设置为非受管状态,您可以提供自己的 ssl.cert 和 ssl.key 文件。在本实例中,如果您希望集群支持构建器,您必须将 Quay 路由和构建器路由名称添加到证书中的 SAN 列表中,或者使用通配符。要添加构建器路由,请使用以下格式:
[quayregistry-cr-name]-quay-builder-[ocp-namespace].[ocp-domain-name]
[quayregistry-cr-name]-quay-builder-[ocp-namespace].[ocp-domain-name]
6.4.2. 准备 OpenShift 进行 Red Hat Quay 构建 复制链接链接已复制到粘贴板!
在 OpenShift 集群中需要几个操作,然后才能接受来自 Red Hat Quay 的构建。
创建一个将运行构建的项目(如 'builder')
oc new-project builder
$ oc new-project builderCopy to Clipboard Copied! Toggle word wrap Toggle overflow 在此
项目中创建一个ServiceAccount,它将用于运行构建。确保有足够的权限来创建作业和Pod。复制ServiceAccount的令牌,以便稍后使用。oc create sa -n builder quay-builder oc policy add-role-to-user -n builder edit system:serviceaccount:builder:quay-builder oc sa get-token -n builder quay-builder
$ oc create sa -n builder quay-builder $ oc policy add-role-to-user -n builder edit system:serviceaccount:builder:quay-builder $ oc sa get-token -n builder quay-builderCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 识别 OpenShift 集群 API 服务器的 URL。这可以从 OpenShift 控制台找到。
-
识别调度构建作业时使用的 worker
节点标签。因为构建 pod 需要在裸机 worker 节点上运行,因此通常这些 pod 使用特定的标签标识。检查您的集群管理员,以确定应使用哪个节点标签。 如果集群使用自签名证书,获取 kube apiserver 的 CA 以添加到 Red Hat Quay 的额外证书。
获取包含 CA 的 secret 的名称:
oc get sa openshift-apiserver-sa --namespace=openshift-apiserver -o json | jq '.secrets[] | select(.name | contains("openshift-apiserver-sa-token"))'.name$ oc get sa openshift-apiserver-sa --namespace=openshift-apiserver -o json | jq '.secrets[] | select(.name | contains("openshift-apiserver-sa-token"))'.nameCopy to Clipboard Copied! Toggle word wrap Toggle overflow -
从 Openshift 控制台中的 secret 获取
ca.crt的键值。该值应该以"-----BEGIN CERTIFICATE-----"开始。 -
使用 ConfigTool,在 Red Hat Quay 中导入 CA。确保此文件的名称与
K8S_API_TLS_CA匹配。
-
为
ServiceAccount创建所需的安全上下文/角色绑定:
6.4.3. 启用构建器,并将构建配置添加到 Red Hat Quay Configuration Bundle 复制链接链接已复制到粘贴板!
- 确保已在 Red Hat Quay 配置中启用了 Builds。
FEATURE_BUILD_SUPPORT: True
FEATURE_BUILD_SUPPORT: True
- 在 Red Hat Quay 配置捆绑包中添加以下内容,使用特定于您的安装的值替换每个值。
目前,只能通过 Red Hat Quay Config 工具启用构建功能。在 config.yaml 文件中必须手动完成 Build Manager 和 Executors 的实际配置。
以下介绍了每个配置字段。
- ALLOWED_WORKER_COUNT
- 定义每个 Red Hat Quay Pod 实例化多少个 Build Worker。这通常是 '1'。
- ORCHESTRATOR_PREFIX
- 定义添加到所有 Redis 键的唯一前缀(可用于将 Orchestrator 值与其他 Redis 密钥隔离)。
- REDIS_HOST
- Redis 服务的主机名。
- REDIS_PASSWORD
- 用于向 Redis 服务进行身份验证的密码。
- REDIS_SSL
- 定义您的 Redis 连接是否使用 SSL。
- REDIS_SKIP_KEYSPACE_EVENT_SETUP
-
默认情况下,Red Hat Quay 不会在运行时设置关键事件所需的密钥空间事件。为此,请将 REDIS_SKIP_KEYSPACE_EVENT_SETUP 设置为
false。 - EXECUTOR
- 启动此类型的 Executor 的定义。有效值为 'kubernetes' 和 'ec2'
- BUILDER_NAMESPACE
- Red Hat Quay 构建所需的 Kubernetes 命名空间
- K8S_API_SERVER
- OpenShift 集群的 API 服务器的主机名,进行构建需要
- K8S_API_TLS_CA
-
构建集群的 CA 证书的
Quay容器中的 filepath,以便在发出 API 调用时信任 Quay 应用。 - KUBERNETES_DISTRIBUTION
- 指明正在使用的 Kubernetes 类型。有效值为 'openshift' 和 'k8s'。
- CONTAINER_*
- 定义每个构建 Pod 的资源请求和限值。
- NODE_SELECTOR_*
- 定义应调度构建 Pod 的节点选择器标签名称/值对。
- CONTAINER_RUNTIME
-
指定构建器是否应该运行
docker还是podman。使用红帽quay-builder镜像的客户应将其设置为podman。 - SERVICE_ACCOUNT_NAME/SERVICE_ACCOUNT_TOKEN
- 定义构建 Pod 将要使用的服务帐户名称/令牌。
- QUAY_USERNAME/QUAY_PASSWORD
- 定义拉取在 WORKER_IMAGE 字段中指定的 Red Hat Quay 构建 worker 镜像所需的 registry 凭证。客户应提供一个 Red Hat Service Account 凭证,如 https://access.redhat.com/RegistryAuthentication 文章中的针对 registry.redhat.io 的"创建 Registry 服务账户"部分。
- WORKER_IMAGE
- Red Hat Quay 构建器镜像的镜像引用。registry.redhat.io/quay/quay-builder
- WORKER_TAG
- 所需构建器镜像的标签。最新版本为 v3.4.0。
- BUILDER_VM_CONTAINER_IMAGE
-
对包含每个 Red Hat Quay 构建(
registry.redhat.io/quay-builder-qemu-rhcos:v3.4.0)所需的内部虚拟机的完整引用。 - SETUP_TIME
- 如果构建还没有在 Build Manager 中注册,则指定超时的秒数(默认为 500 秒)。超时的构建尝试重启三次。如果构建在三个尝试失败后没有注册,它会被视为失败。
- MINIMUM_RETRY_THRESHOLD
-
此设置与多个可执行文件一起使用;它指示在选择不同的执行器前尝试启动构建的次数。设置为 0 意味着构建作业需要没有多少限制。这个值应该被有意保留小(三个或更少),确保在基础架构出现故障时迅速发生故障转移。例如,Kubernetes 设置为第一个 executor 和 EC2 作为第二个执行者。如果我们希望最后一次尝试在 EC2 上始终执行作业,而不是 Kubernetes,我们将 Kubernetes 执行程序的
MINIMUM_RETRY_THRESHOLD设置为 1 和 EC2 的MINIMUM_RETRY_THRESHOLD为 0(如果不设置 0)。在这种情况下,kubernetes'MINIMUM_RETRY_THRESHOLD> retries_remaining(1)将评估为 False,因此回退到配置的第二个 executor - SSH_AUTHORIZED_KEYS
- ignition 配置中 bootstrap 的 ssh 密钥列表。这允许使用其他密钥 ssh 到 EC2 实例或 QEMU 虚拟机
6.5. OpenShift 路由限制 复制链接链接已复制到粘贴板!
本节只适用于您在带有受管 路由 组件的 OpenShift 上使用 Quay Operator。
由于 OpenShift 路由 只能向单个端口提供流量,因此设置构建需要额外的步骤。确保将 kubectl 或 oc CLI 工具配置为处理安装 Quay Operator 的集群,并且您的 QuayRegistry 存在(不一定与构建程序运行的裸机集群相同)。
- 按照以下步骤,确保 OpenShift 集群上启用了 HTTP/2 入口。
Quay Operator 将创建一个
Route,用于将 gRPC 流量定向到现有 Quay pod 内运行的构建管理器服务器。如果要使用自定义主机名(如builder.registry.example.com的子域),请确保创建一个带有 DNS 供应商的 CNAME 记录,该记录指向所创建的Route的status.ingress[0].host。kubectl get -n <namespace> route <quayregistry-name>-quay-builder -o jsonpath={.status.ingress[0].host}$ kubectl get -n <namespace> route <quayregistry-name>-quay-builder -o jsonpath={.status.ingress[0].host}Copy to Clipboard Copied! Toggle word wrap Toggle overflow 通过 OpenShift UI 或 CLI,使用构建集群 CA 证书(密钥
extra_ca_cert_build_cluster.cert)更新QuayRegistry的spec.configBundleSecret引用的Secret, 使用上面的构建程序配置(取决于您的构建 executor))中引用的正确的值以及BUILDMAN_HOSTNAME字段更新config.yaml条目:Copy to Clipboard Copied! Toggle word wrap Toggle overflow
额外配置字段解释如下:
- BUILDMAN_HOSTNAME
-
外部可访问的服务器主机名,用于向构建管理器进行通信。默认值与
SERVER_HOSTNAME相同。对于 OpenShiftRoute,如果使用自定义主机名,可以是status.ingress[0].host或 CNAME 条目。BUILDMAN_HOSTNAME需要包含 端口号,例如,对于 Openshift Route 的somehost:443,因为用于与构建管理器通信的 gRPC 客户端在忽略时不会推断任何端口。
6.6. 构建故障排除 复制链接链接已复制到粘贴板!
由构建管理器启动的构建器实例是临时的。这意味着,他们可以在超时/失败或 control plane(EC2/K8s)收集的垃圾回收时被 Red Hat Quay} 关闭。这意味着,若要获取构建器日志,构建 运行时 需要执行此操作。
6.6.1. DEBUG 配置标志 复制链接链接已复制到粘贴板!
可以设置 DEBUG 标志,以防止在完成/失败后清理构建器实例。为此,在所需的 executor 配置中将 DEBUG 设置为 true。例如:
当设置为 true 时,DEBUG 将阻止构建节点在 quay-builder 服务完成或失败后关闭,并阻止构建管理器清理实例(终止 EC2 实例或删除 k8s 作业)。这将允许调试构建器节点问题,不应 在生产环境中设置。生命周期服务仍然存在。例如,实例仍然会在约 2 小时后关闭(EC2 实例将终止,k8s 作业将完成),设置 DEBUG 也会影响 ALLOWED_WORKER_COUNT,因为未终止的实例/作业仍将计入运行 worker 的总数。这意味着,如果 ALLOWED_WORKER_COUNT 能够调度新构建,则需要手动删除现有的构建器 worker。
使用以下步骤:
客户机虚拟机将其 SSH 端口(22)转发到其主机的端口 2222。端口将构建器 Pod 的端口 2222 转发到 localhost 上的端口。例如
kubectl port-forward <builder pod> 9999:2222
$ kubectl port-forward <builder pod> 9999:2222Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用从 SSH_AUTHORIZED_KEYS 中的密钥集,通过 SSH_AUTHORIZED_KEYS 连接到容器中运行的虚拟机:
ssh -i /path/to/ssh/key/set/in/ssh_authorized_keys -p 9999 core@localhost
$ ssh -i /path/to/ssh/key/set/in/ssh_authorized_keys -p 9999 core@localhostCopy to Clipboard Copied! Toggle word wrap Toggle overflow 获取 quay-builder 服务日志:
systemctl status quay-builder journalctl -f -u quay-builder
$ systemctl status quay-builder $ journalctl -f -u quay-builderCopy to Clipboard Copied! Toggle word wrap Toggle overflow 也可以使用单个 SSH 命令执行第 2-3 步:
ssh -i /path/to/ssh/key/set/in/ssh_authorized_keys -p 9999 core@localhost ‘systemctl status quay-builder’ ssh -i /path/to/ssh/key/set/in/ssh_authorized_keys -p 9999 core@localhost ‘journalctl -f -u quay-builder’
$ ssh -i /path/to/ssh/key/set/in/ssh_authorized_keys -p 9999 core@localhost ‘systemctl status quay-builder’ $ ssh -i /path/to/ssh/key/set/in/ssh_authorized_keys -p 9999 core@localhost ‘journalctl -f -u quay-builder’Copy to Clipboard Copied! Toggle word wrap Toggle overflow
6.7. 设置 GitHub 构建(可选) 复制链接链接已复制到粘贴板!
如果您的组织计划通过推送到 GitHub(或 GitHub Enterprise)进行构建,继续在 GitHub 中创建 OAuth 应用程序。
第 7 章 构建 Dockerfile 复制链接链接已复制到粘贴板!
Red Hat Quay 支持在我们的构建 fleet 上构建 Dockerfile,并将生成的镜像推送到存储库。
7.1. 查看和管理构建 复制链接链接已复制到粘贴板!
单击存储库视图中的 Builds 选项卡,可以查看和管理 存储库 构建。
7.2. 手动启动构建 复制链接链接已复制到粘贴板!
要手动启动存储库构建,请单击任何存储库页面上标题右侧的 + 图标,然后选择 New Dockerfile Build。上传的 Dockerfile .tar.gz 或 HTTP URL 可用于构建。
在手动启动构建时,您将无法指定 Docker 构建上下文。
7.3. 构建触发器 复制链接链接已复制到粘贴板!
存储库构建也可由事件自动触发,如推送到 SCM(GitHub、BitBucket 或 GitLab)或 调用 Webhook。
7.3.1. 创建新构建触发器 复制链接链接已复制到粘贴板!
要设置构建触发器,点 Builds 视图页面上的 Create Build Trigger 按钮,并按照对话框的说明进行操作。您需要向您的存储库授予 Red Hat Quay 访问权限,以设置触发器,并且您的帐户 需要 SCM 存储库 的 admin 访问权限。
7.3.2. 手动触发构建触发器 复制链接链接已复制到粘贴板!
要手动触发构建触发器,请单击构建触发器旁边的图标,然后选择 Run Now。
7.3.3. 构建上下文 复制链接链接已复制到粘贴板!
使用 Docker 构建镜像时,指定目录使其成为构建上下文。对于手动构建和构建触发器,这包括 true,因为 Red Hat Quay 执行的构建与您自己的机器上运行 docker 构建 没有不同。
如果未指定,Red Hat Quay 构建上下文始终是来自构建设置所指定的子目录,并将回退到构建源的根目录。触发构建时,Red Hat Quay 构建 worker 会将 git 存储库克隆到 worker 机器,并在执行构建前输入构建上下文。
对于基于 tar 归档的构建,构建工作程序提取存档并输入构建上下文。例如:
想象上面的例子是 GitHub 存储库的目录结构,名为"example"。如果在构建触发器设置中或手动启动构建时没有指定子目录,则构建将在示例目录中操作。
如果将 subdir 指定为构建触发器设置中的子目录,则只有其中的 Dockerfile 才可以出现在构建中。这意味着您无法在 Dockerfile 中使用 ADD 命令来添加 文件,因为它不在构建上下文之外。
与 Docker Hub 不同,Dockerfile 是 Red Hat Quay 上的构建上下文的一部分。因此,它不能出现在 .dockerignore 文件中。
第 8 章 设置自定义 Git Trigger 复制链接链接已复制到粘贴板!
Custom Git Trigger 是任何 git 服务器的通用方法,充当构建触发器。它完全依赖于 SSH 密钥和 Webhook 端点;其他一切都留给用户实施。
8.1. 创建触发器 复制链接链接已复制到粘贴板!
创建自定义 Git Trigger 与创建带有几个细微差别的任何其他触发器类似:
- Red Hat Quay 无法自动检测与触发器搭配使用的适当机器人帐户。这必须在创建过程中手动完成。
- 创建触发器后必须执行额外的步骤才能使用触发器。这些步骤的详情如下。
8.2. 触发器(trigger-creation)设置 复制链接链接已复制到粘贴板!
创建触发器后,在使用触发器 前需要 2 个额外的步骤 :
- 提供对创建触发器时生成的 SSH 公钥 的读取访问权限。
- 设置 POST 到 Red Hat Quay 端点的 webhook,以触发构建。
key 和 URL 可随时通过从位于触发器列表中的 gear 选择 View Credentials 即可。
8.2.1. SSH 公钥访问 复制链接链接已复制到粘贴板!
根据 Git 服务器设置,可以通过各种方式安装 Red Hat Quay 为自定义 git 触发器生成的 SSH 公钥。例如,Git 文档 描述了一个小型服务器设置,只需将密钥添加到 $HOME/.ssh/authorize_keys,即可提供对构建器的访问来克隆存储库。对于未正式支持的任何 git 存储库管理软件,通常有一个位置输入通常标记为 Deploy Keys 的键。
8.2.2. Webhook 复制链接链接已复制到粘贴板!
要自动触发构建,必须使用以下格式将 JSON 有效负载 POST 到 webhook URL:
此请求需要一个包含 application/json 的 Content-Type 标头才能有效。
再一次,这可以通过不同的方法完成,具体取决于服务器设置,但对于大多数情况,可以通过 post-receive git hook 进行。
第 9 章 跳过源控制触发的构建 复制链接链接已复制到粘贴板!
要指定 Red Hat Quay 构建系统应忽略提交,请在提交消息中的任何位置添加文本 [skip build] 或 [build skip]。
第 10 章 设置 GitHub 构建触发器标签 复制链接链接已复制到粘贴板!
Red Hat Quay 支持使用 GitHub 或 GitHub Enterprise 作为构建镜像的触发器。如果您尚未这样做,请继续并在 Red Hat Quay 中启用构建支持。
10.1. 了解构建触发器的标签命名 复制链接链接已复制到粘贴板!
在 Red Hat Quay 3.3 之前,从构建触发器创建的镜像已限制。由构建触发器构建的镜像的名称为:
- 调用触发器的分支或标签
-
带有使用默认分支的镜像的
latest标签
从 Red Hat Quay 3.3 及更高版本开始,在设置镜像标签方面具有更大的灵活性。第一种操作是输入自定义标签,使任何字符串指定为每个构建的镜像标签。但是,作为替代方案,您可以使用以下标签模板使用每个提交中的信息标记镜像:
- ${commit_info.short_sha}: 提交的短 SHA
- ${commit_info.date} :提交的时间戳
- ${commit_info.author} :提交中的作者
- ${commit_info.committer}: 提交的提交者
- ${parsed_ref.branch}: 分支名称
以下流程描述了如何为构建触发器设置标记。
10.2. 为构建触发器设置标签名称 复制链接链接已复制到粘贴板!
按照以下步骤为构建触发器配置自定义标签:
- 在存储库视图中,从左侧导航中选择 Builds 图标。
选择 Create Build Trigger 菜单,然后选择您想要的存储库推送类型(GitHub、Bitbucket、GitLab 或 Custom Git 存储库 push)。本例中选择了 GitHub Repository Push,如下图所示。
- 当显示 Setup Build Trigger 页面时,请选择您要设置的仓库和命名空间。
在 Configure Trigger 下,为所有分支和标签 选择 Trigger,或者仅在分支和标签匹配正则表达式 中选择 Trigger。然后选择 Continue。此时会出现 Configure Tagging 部分,如下图所示:
向下滚动 以配置标记,并从以下选项中选择:
- 使用分支或标签名称标记清单 :选中此框,以使用作为镜像上使用的标签所发生的分支或标签的名称。默认启用。
-
如果默认分支为 : 选中,则使用镜像的最新标签(如果位于存储库的默认分支上),则添加
latest标签。默认启用。 - 添加自定义标记模板 :在 Enter a tag template 框中输入自定义标签或模板。在这里可以输入多个标签模板,如本节前面所述。它们包括使用短 SHA、时间戳、作者名称、提交者和分支名称的方法,作为标签。
- 选择 Continue。系统会提示您输入 Docker 构建的目录构建上下文。构建上下文目录标识包含 Dockerfile 的目录的位置,以及触发构建时所需的其他文件。如果 Dockerfile 位于 git 存储库的根目录中,则输入 "/"。
- 选择 Continue。此时会提示您输入一个可选的 Robot 帐户。如果要在构建过程中拉取私有基础镜像,请执行以下操作。机器人帐户需要访问构建。
- 选择 Continue 以完成构建触发器的设置。
如果您要返回到存储库的 Repository Builds 页面,您设置的构建触发器将在 Build Triggers 标题下列出。
第 11 章 在 GitHub 中创建 OAuth 应用程序 复制链接链接已复制到粘贴板!
您可以通过将 registry 注册为 GitHub OAuth 应用来授权 registry 访问 GitHub 帐户及其存储库。
11.1. 创建新的 GitHub 应用程序 复制链接链接已复制到粘贴板!
- 登录 GitHub(企业)
- 访问您机构设置下的应用程序页面。
-
点 Register New Application。此时会显示
Register a new OAuth 应用程序配置屏幕:
设置主页 URL:输入 Quay Enterprise URL 作为
主页 URL注意如果使用公共 GitHub,则输入的主页 URL 必须可以被您的用户访问。它也可以是内部 URL。
- 设置授权回调 URL:输入 https://{$RED_HAT_QUAY_URL}/oauth2/github/callback 作为 Authorization 回调 URL。
- 点 Register application 按钮保存您的设置。此时会显示新的应用程序概述:
- 记录为新应用显示的客户端 ID 和客户端 Secret。
第 12 章 存储库通知 复制链接链接已复制到粘贴板!
Quay 支持在存储库中为在存储库的生命周期中发生的各种事件添加通知。要添加通知,请在查看存储库时单击 Settings 选项卡,然后选择 Create Notification。在 when this event occurs 字段中,选择要接收通知的项目:
选择某个事件后,通过添加您如何通知该事件来进一步配置它。
添加通知需要 存储库管理权限。
以下是存储库事件的示例。
12.1. 仓库事件 复制链接链接已复制到粘贴板!
12.1.1. repository Push 复制链接链接已复制到粘贴板!
成功将一个或多个镜像推送(push)到存储库:
12.1.2. Dockerfile 构建队列 复制链接链接已复制到粘贴板!
以下是 Dockerfile 构建的示例响应已放入构建系统中。响应可能会根据使用可选属性的不同。
12.1.3. Dockerfile 构建已启动 复制链接链接已复制到粘贴板!
下面是构建系统启动的 Dockerfile 构建示例。根据某些属性是可选的,响应可能会有所不同。
12.1.4. Dockerfile 构建成功完成 复制链接链接已复制到粘贴板!
以下是已由构建系统成功完成的 Dockerfile 构建示例。
构建的镜像的 Repository Push 事件将会 同时进行 此事件。
12.1.5. Dockerfile 构建失败 复制链接链接已复制到粘贴板!
Dockerfile 构建失败
12.1.6. Dockerfile 构建取消 复制链接链接已复制到粘贴板!
已取消 Dockerfile 构建
12.1.7. 安全漏洞被检测到 复制链接链接已复制到粘贴板!
程序库中检测到了一个漏洞
12.2. 通知操作 复制链接链接已复制到粘贴板!
12.2.1. Quay 通知 复制链接链接已复制到粘贴板!
将向 Quay.io 通知区域添加通知。单击任何 Quay.io 页面右上角的 bell 图标,即可找到通知区域。
Quay.io 通知可以设置为作为一个整体发送 User, Team, 或 organization。
12.2.2. 电子邮件 复制链接链接已复制到粘贴板!
电子邮件地址将发送到指定地址,描述发生的事件。
必须基于每个 软件仓库验证所有 电子邮件地址
12.2.3. Webhook POST 复制链接链接已复制到粘贴板!
将向指定的 URL 发出 HTTP POST 调用,其中包含事件的数据(请参阅上述各个事件的数据格式)。
当 URL 是 HTTPS 时,调用将从 Quay.io 设置 SSL 客户端证书。此证书的验证将证明该调用源自 Quay.io。带有 2xx 范围内的状态代码的响应被视为成功。带有任何其他状态代码的响应将被视为失败,并导致重试 Webhook 通知。
12.2.4. Flowdock 通知 复制链接链接已复制到粘贴板!
向 Flowdock 发送消息。
12.2.5. HipChat 通知 复制链接链接已复制到粘贴板!
向 HipChat 发送消息。
12.2.6. Slack 通知 复制链接链接已复制到粘贴板!
向 Slack 发送消息。
第 13 章 OCI 支持和 Red Hat Quay 复制链接链接已复制到粘贴板!
Red Hat Quay 等容器注册表最初设计为支持 Docker 镜像格式的容器镜像。为了促进在 Docker 外使用额外的运行时,创建了开放容器项目(OCI)以提供与容器运行时和镜像格式相关的标准化。大多数容器 registry 支持 OCI 标准化,因为它基于 Docker 镜像清单 V2、Schema 2 格式。
除了容器镜像外,还出现各种工件,它的支持不仅限于独立应用程序,而是整个 Kubernetes 平台。这些范围包括 Open Policy Agent(OPA)策略,用于安全并监管到 Helm chart 和 Operator,以帮助应用程序部署。
Red Hat Quay 是一个私有容器 registry,它不仅存储容器镜像,而且支持整个工具生态系统,以帮助管理容器。对 Red Hat Quay 3.6 中基于 OCI 的工件的支持已从仅 Helm 扩展,默认包括 cosign 和 ztsd 压缩方案。因此,F EATURE_HELM_OCI_SUPPORT 已被弃用。
当使用 OpenShift Operator 部署 Red Hat Quay 3.6 时,在 FEATURE_GENERAL_OCI_SUPPORT 配置下默认启用对 Helm 和 OCI 工件的支持。如果您需要显式启用该功能,例如之前禁用了该功能,或者已经从未启用的版本升级时,请参考"启用 OCI 和 Helm 支持 "部分。
13.1. Helm 和 OCI 的先决条件 复制链接链接已复制到粘贴板!
可信证书: Helm 客户端和 Quay 间的通信可以通过 HTTPS 和 Helm 3.5 进行沟通,因此仅支持通过 HTTPS 与可信证书通信的 registry。另外,操作系统必须信任 registry 公开的证书。在以后的 Helm 版本中的支持将允许与远程 registry 进行安全通信。因此,请确保将您的操作系统配置为信任 Quay 使用的证书,例如:
sudo cp rootCA.pem /etc/pki/ca-trust/source/anchors/ sudo update-ca-trust extract
$ sudo cp rootCA.pem /etc/pki/ca-trust/source/anchors/ $ sudo update-ca-trust extractCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 正式发布: 从 Helm 3.8 开始,现在推出对 chart 的 OCI registry 支持。
安装 Helm 客户端: 从 Helm releases 页面下载您所需的版本。解包它并将 helm 二进制文件移到所需的目的地:
tar -zxvf helm-v3.8.2-linux-amd64.tar.gz mv linux-amd64/helm /usr/local/bin/helm
$ tar -zxvf helm-v3.8.2-linux-amd64.tar.gz $ mv linux-amd64/helm /usr/local/bin/helmCopy to Clipboard Copied! Toggle word wrap Toggle overflow -
在 Quay 中创建机构: 使用 Quay registry UI 创建一个用于存储 Helm chart 的新组织。例如,创建名为
helm的组织。
13.2. 使用 Red Hat Quay 的 Helm chart 复制链接链接已复制到粘贴板!
作为 Cloud Native Computing Foundation(CNCF)的研究项目,Helm 已成为 Kubernetes 的事实软件包管理器,因为它简化了应用被打包和部署的方式。Helm 使用名为 Charts 的打包格式,其中包含代表应用程序的 Kubernetes 资源。可以为存储库中的常规分发和使用提供 chart。Helm 仓库是提供 index.yaml 元数据文件的 HTTP 服务器,以及一组可选的打包 chart。从 Helm 版本 3 开始,支持以替代传统仓库的方式在 OCI registry 中分发 chart。
13.2.1. 在 Red Hat Quay 中使用 Helm chart 复制链接链接已复制到粘贴板!
使用以下示例,从红帽实践(CoP)仓库中下载和推送 etherpad chart。
流程
添加 chart 存储库:
helm repo add redhat-cop https://redhat-cop.github.io/helm-charts
$ helm repo add redhat-cop https://redhat-cop.github.io/helm-chartsCopy to Clipboard Copied! Toggle word wrap Toggle overflow 从 chart 仓库本地更新可用 chart 的信息:
helm repo update
$ helm repo updateCopy to Clipboard Copied! Toggle word wrap Toggle overflow 从仓库下载 chart:
helm pull redhat-cop/etherpad --version=0.0.4 --untar
$ helm pull redhat-cop/etherpad --version=0.0.4 --untarCopy to Clipboard Copied! Toggle word wrap Toggle overflow 将 chart 打包到 chart 归档中:
helm package ./etherpad
$ helm package ./etherpadCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Successfully packaged chart and saved it to: /home/user/linux-amd64/etherpad-0.0.4.tgz
Successfully packaged chart and saved it to: /home/user/linux-amd64/etherpad-0.0.4.tgzCopy to Clipboard Copied! Toggle word wrap Toggle overflow 使用
helm registry 登录您的 Quay 存储库:helm registry login quay370.apps.quayperf370.perfscale.devcluster.openshift.com
$ helm registry login quay370.apps.quayperf370.perfscale.devcluster.openshift.comCopy to Clipboard Copied! Toggle word wrap Toggle overflow 使用
helm push命令将 chart 推送到您的 Quay 存储库:helm push etherpad-0.0.4.tgz oci://quay370.apps.quayperf370.perfscale.devcluster.openshift.com
$ helm push etherpad-0.0.4.tgz oci://quay370.apps.quayperf370.perfscale.devcluster.openshift.comCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例:
Pushed: quay370.apps.quayperf370.perfscale.devcluster.openshift.com/etherpad:0.0.4 Digest: sha256:a6667ff2a0e2bd7aa4813db9ac854b5124ff1c458d170b70c2d2375325f2451b
Pushed: quay370.apps.quayperf370.perfscale.devcluster.openshift.com/etherpad:0.0.4 Digest: sha256:a6667ff2a0e2bd7aa4813db9ac854b5124ff1c458d170b70c2d2375325f2451bCopy to Clipboard Copied! Toggle word wrap Toggle overflow 通过删除本地副本来确保推送是否正常工作,然后从存储库拉取 chart:
rm -rf etherpad-0.0.4.tgz
$ rm -rf etherpad-0.0.4.tgzCopy to Clipboard Copied! Toggle word wrap Toggle overflow helm pull oci://quay370.apps.quayperf370.perfscale.devcluster.openshift.com/etherpad --version 0.0.4
$ helm pull oci://quay370.apps.quayperf370.perfscale.devcluster.openshift.com/etherpad --version 0.0.4Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例:
Pulled: quay370.apps.quayperf370.perfscale.devcluster.openshift.com/etherpad:0.0.4 Digest: sha256:4f627399685880daf30cf77b6026dc129034d68c7676c7e07020b70cf7130902
Pulled: quay370.apps.quayperf370.perfscale.devcluster.openshift.com/etherpad:0.0.4 Digest: sha256:4f627399685880daf30cf77b6026dc129034d68c7676c7e07020b70cf7130902Copy to Clipboard Copied! Toggle word wrap Toggle overflow
13.3. OCI 和 Helm 配置字段 复制链接链接已复制到粘贴板!
现在,在 FEATURE_GENERAL_OCI_SUPPORT 属性中支持 Helm 的支持。如果需要显式启用该功能,例如之前禁用了该功能,或者已经从未默认启用的版本升级,则需要在 Quay 配置中添加两个属性来启用 OCI 工件的使用:
FEATURE_GENERAL_OCI_SUPPORT: true FEATURE_HELM_OCI_SUPPORT: true
FEATURE_GENERAL_OCI_SUPPORT: true
FEATURE_HELM_OCI_SUPPORT: true
| 字段 | 类型 | 描述 |
|---|---|---|
| FEATURE_GENERAL_OCI_SUPPORT | 布尔值 |
启用对 OCI 工件的支持 |
| FEATURE_HELM_OCI_SUPPORT | 布尔值 |
启用对 Helm 工件的支持 |
从 Red Hat Quay 3.6 开始,FEATURE_HELM_OCI_SUPPORT 已被弃用,并将在以后的 Red Hat Quay 版本中删除。在 Red Hat Quay 3.6 中,默认支持 Helm 工件,并包括在 FEATURE_GENERAL_OCI_SUPPORT 属性中。用户不再需要更新其 config.yaml 文件来启用支持。
13.4. Cosign OCI 支持 Red Hat Quay 复制链接链接已复制到粘贴板!
Cosign 是一个工具,可用于签名和验证容器镜像。它使用 ECDSA-P256 签名算法和红帽的简单签名有效负载格式来创建存储在 PKIX 文件中的公钥。私钥作为加密的 PEM 文件存储。
Cosign 目前支持以下内容:
- 硬件和 KMS 签名
- 自带 PKI
- OIDC PKI
- 内置二进制透明度和时间戳服务
13.5. 使用带有 quay 的 cosign 复制链接链接已复制到粘贴板!
如果您有 Go 1.16+,您可以使用以下命令直接安装 cosign:
go install github.com/sigstore/cosign/cmd/cosign@v1.0.0
$ go install github.com/sigstore/cosign/cmd/cosign@v1.0.0
go: downloading github.com/sigstore/cosign v1.0.0
go: downloading github.com/peterbourgon/ff/v3 v3.1.0
...
接下来,生成密钥对:
cosign generate-key-pair
$ cosign generate-key-pair
Enter password for private key:
Enter again:
Private key written to cosign.key
Public key written to cosign.pub
使用以下命令为密钥对签名:
cosign sign -key cosign.key quay-server.example.com/user1/busybox:test
$ cosign sign -key cosign.key quay-server.example.com/user1/busybox:test
Enter password for private key:
Pushing signature to: quay-server.example.com/user1/busybox:sha256-ff13b8f6f289b92ec2913fa57c5dd0a874c3a7f8f149aabee50e3d01546473e3.sig
有些用户可能会遇到以下错误:
error: signing quay-server.example.com/user1/busybox:test: getting remote image: GET https://quay-server.example.com/v2/user1/busybox/manifests/test: UNAUTHORIZED: access to the requested resource is not authorized; map[]
error: signing quay-server.example.com/user1/busybox:test: getting remote image: GET https://quay-server.example.com/v2/user1/busybox/manifests/test: UNAUTHORIZED: access to the requested resource is not authorized; map[]
由于 cosign 依赖于 ~/.docker/config.json 进行授权,因此您可能需要执行以下命令:
podman login --authfile ~/.docker/config.json quay-server.example.com
$ podman login --authfile ~/.docker/config.json quay-server.example.com
Username:
Password:
Login Succeeded!
您可以使用以下命令查看更新的授权配置:
13.6. 向 Quay 添加其他 OCI 介质类型 复制链接链接已复制到粘贴板!
Helm、cosign 和 ztsd 压缩方案工件默认内置在 Red Hat Quay 3.6 中。对于默认情况下不支持的任何其他 OCI 介质类型,您可以使用以下格式将它们添加到 Quay config.yaml 中的 ALLOWED_OCI_ARTIFACT_TYPES 配置中:
例如,您可以通过在 config.yaml 中添加以下内容来添加 Singularity(SIF)支持:
当添加默认配置的 OCI 介质类型时,用户需要手动添加对 cosign 和 Helm 的支持。在默认情况下,支持 ztsd 压缩方案,因此用户不需要将 OCI 介质类型添加到其 config.yaml 中以启用支持。
13.7. 在 Quay 中禁用 OCI 工件 复制链接链接已复制到粘贴板!
如果要禁用 OCI 工件支持,您可以在 config.yaml 中将 FEATURE_GENERAL_OCI_SUPPORT 设置为 False :
... FEATURE_GENERAL_OCI_SUPPORT = False ...
...
FEATURE_GENERAL_OCI_SUPPORT = False
...
第 14 章 Red Hat Quay 配额管理和强制 复制链接链接已复制到粘贴板!
使用 Red Hat Quay 3.7,用户可以通过建立配置的存储配额限制来报告存储消耗以及包含 registry 增长的能力。内部 Quay 用户现在可以通过以下功能来管理其环境的容量限制:
- 配额报告: 借助此功能,超级用户可以跟踪其所有组织的存储消耗。此外,用户可以跟踪其分配组织的存储消耗。
- 配额管理: 利用此功能,超级用户可以为 Red Hat Quay 用户定义软和硬检查。软检查告知用户是否存储消耗达到其配置阈值。硬检查可防止用户在存储消耗达到配置的限制时推送到 registry。
这些功能一起允许 Quay registry 的 service owners 定义服务级别协议并支持健康的资源预算。
14.1. 配额管理架构 复制链接链接已复制到粘贴板!
RepositorySize 数据库表保存机构中 Red Hat Quay 存储库的存储消耗,以字节为单位。组织的所有存储库大小和定义 Red Hat Quay 组织的当前存储大小的总和。在初始化镜像推送时,系统会验证用户的机构存储,以检查它是否超过配置的配额限制。如果镜像推送超过定义的配额限制,则会发生软或硬检查:
- 对于软检查,用户会被通知。
- 对于硬检查,推送会被停止。
如果存储消耗在配置的配额限制内,则允许推送。
镜像清单删除遵循类似的流程,其中关联的镜像标签和清单之间的链接会被删除。另外,在镜像清单被删除后,存储库大小会在 RepositorySize 表中重新计算和更新。
14.2. 配额管理限制 复制链接链接已复制到粘贴板!
配额管理可帮助组织维护资源消耗。配额管理的一个限制是,在推送时计算资源消耗会导致计算推送的关键路径的一部分。如果没有这种情况,使用量数据可能会偏移。
最大存储配额大小取决于所选数据库:
| 变量 | 描述 |
|---|---|
| Postgres | 8388608 TB |
| MySQL | 8388608 TB |
| SQL Server | 16777216 TB |
14.3. 配额管理配置 复制链接链接已复制到粘贴板!
现在,配额管理在 FEATURE_QUOTA_MANAGEMENT 属性下被支持,并默认关闭。要启用配额管理,请将 config.yaml 中的功能标记设置为 true :
FEATURE_QUOTA_MANAGEMENT: true
FEATURE_QUOTA_MANAGEMENT: true
在 Red Hat Quay 3.7 中,创建、更新和删除配额需要超级用户权限。虽然可以为用户和机构设置配额,但您不能使用 Red Hat Quay UI 重新配置 用户配额,而您必须使用 API。
14.3.1. 默认配额 复制链接链接已复制到粘贴板!
要指定应用于每个机构和用户的系统范围默认存储配额,请使用 DEFAULT_SYSTEM_REJECT_QUOTA_BYTES 配置标记。
| 字段 | 类型 | 描述 |
|---|---|---|
| DEFAULT_SYSTEM_REJECT_QUOTA_BYTES | 字符串 |
适用于所有机构和用户的配额大小。 |
如果您为机构或用户配置特定的配额,然后删除该配额,则应用系统范围的默认配额(如果已设置了系统)。同样,如果您为机构或用户配置了特定配额,然后修改系统范围的默认配额,则更新的系统范围默认值将覆盖任何特定的设置。
14.4. 使用 Red Hat Quay API 建立配额 复制链接链接已复制到粘贴板!
首次创建机构时,它不会应用配额。使用 /api/v1/organization/{organization}/quota 端点:
示例命令
curl -k -X GET -H "Authorization: Bearer <token>" -H 'Content-Type: application/json' https://example-registry-quay-quay-enterprise.apps.docs.gcp.quaydev.org/api/v1/organization/testorg/quota | jq
$ curl -k -X GET -H "Authorization: Bearer <token>" -H 'Content-Type: application/json' https://example-registry-quay-quay-enterprise.apps.docs.gcp.quaydev.org/api/v1/organization/testorg/quota | jq
输出示例
[]
[]
14.4.1. 设置配额 复制链接链接已复制到粘贴板!
要为机构设置配额,将 POST 数据发送到 /api/v1/organization/{orgname}/quota endpoint: .Sample 命令
curl -k -X POST -H "Authorization: Bearer <token>" -H 'Content-Type: application/json' -d '{"limit_bytes": 10485760}' https://example-registry-quay-quay-enterprise.apps.docs.quayteam.org/api/v1/organization/testorg/quota | jq
$ curl -k -X POST -H "Authorization: Bearer <token>" -H 'Content-Type: application/json' -d '{"limit_bytes": 10485760}' https://example-registry-quay-quay-enterprise.apps.docs.quayteam.org/api/v1/organization/testorg/quota | jq
输出示例
"Created"
"Created"
14.4.2. 查看配额 复制链接链接已复制到粘贴板!
要查看应用的配额,请从 /api/v1/organization/{orgname}/quota 端点中获得 GET 数据:
示例命令
curl -k -X GET -H "Authorization: Bearer <token>" -H 'Content-Type: application/json' https://example-registry-quay-quay-enterprise.apps.docs.gcp.quaydev.org/api/v1/organization/testorg/quota | jq
$ curl -k -X GET -H "Authorization: Bearer <token>" -H 'Content-Type: application/json' https://example-registry-quay-quay-enterprise.apps.docs.gcp.quaydev.org/api/v1/organization/testorg/quota | jq
输出示例
14.4.3. 修改配额 复制链接链接已复制到粘贴板!
要修改现有的配额(在这个实例中从 10 MB 改为 100 MB),使用到 /api/v1/organization/{orgname}/quota/{quota_id} 端点的 PUT 数据:
示例命令
curl -k -X PUT -H "Authorization: Bearer <token>" -H 'Content-Type: application/json' -d '{"limit_bytes": 104857600}' https://example-registry-quay-quay-enterprise.apps.docs.gcp.quaydev.org/api/v1/organization/testorg/quota/1 | jq
$ curl -k -X PUT -H "Authorization: Bearer <token>" -H 'Content-Type: application/json' -d '{"limit_bytes": 104857600}' https://example-registry-quay-quay-enterprise.apps.docs.gcp.quaydev.org/api/v1/organization/testorg/quota/1 | jq
输出示例
14.4.4. 推送镜像 复制链接链接已复制到粘贴板!
要查看消耗的存储,请将各种镜像推送到机构。
14.4.4.1. 推送 ubuntu:18.04 复制链接链接已复制到粘贴板!
从命令行将 ubuntu:18.04 推送到机构:
示例命令
podman pull ubuntu:18.04 podman tag docker.io/library/ubuntu:18.04 example-registry-quay-quay-enterprise.apps.docs.gcp.quaydev.org/testorg/ubuntu:18.04 podman push --tls-verify=false example-registry-quay-quay-enterprise.apps.docs.gcp.quaydev.org/testorg/ubuntu:18.04
$ podman pull ubuntu:18.04
$ podman tag docker.io/library/ubuntu:18.04 example-registry-quay-quay-enterprise.apps.docs.gcp.quaydev.org/testorg/ubuntu:18.04
$ podman push --tls-verify=false example-registry-quay-quay-enterprise.apps.docs.gcp.quaydev.org/testorg/ubuntu:18.04
14.4.4.2. 使用 API 查看配额使用量 复制链接链接已复制到粘贴板!
要查看消耗的存储,来自 /api/v1/repository 端点的 GET 数据:
示例命令
curl -k -X GET -H "Authorization: Bearer <token>" -H 'Content-Type: application/json' 'https://example-registry-quay-quay-enterprise.apps.docs.gcp.quaydev.org/api/v1/repository?last_modified=true&namespace=testorg&popularity=true&public=true"a=true' | jq
$ curl -k -X GET -H "Authorization: Bearer <token>" -H 'Content-Type: application/json' 'https://example-registry-quay-quay-enterprise.apps.docs.gcp.quaydev.org/api/v1/repository?last_modified=true&namespace=testorg&popularity=true&public=true"a=true' | jq
输出示例
14.4.4.3. 推送另一个镜像 复制链接链接已复制到粘贴板!
拉取、标记和推送第二个镜像,如
nginx:示例命令
podman pull nginx podman tag docker.io/library/nginx example-registry-quay-quay-enterprise.apps.docs.gcp.quaydev.org/testorg/nginx podman push --tls-verify=false example-registry-quay-quay-enterprise.apps.docs.gcp.quaydev.org/testorg/nginx
$ podman pull nginx $ podman tag docker.io/library/nginx example-registry-quay-quay-enterprise.apps.docs.gcp.quaydev.org/testorg/nginx $ podman push --tls-verify=false example-registry-quay-quay-enterprise.apps.docs.gcp.quaydev.org/testorg/nginxCopy to Clipboard Copied! Toggle word wrap Toggle overflow 要查看机构中存储库的配额报告,请使用 /api/v1/repository 端点:
示例命令
curl -k -X GET -H "Authorization: Bearer <token>" -H 'Content-Type: application/json' 'https://example-registry-quay-quay-enterprise.apps.docs.gcp.quaydev.org/api/v1/repository?last_modified=true&namespace=testorg&popularity=true&public=true"a=true'
$ curl -k -X GET -H "Authorization: Bearer <token>" -H 'Content-Type: application/json' 'https://example-registry-quay-quay-enterprise.apps.docs.gcp.quaydev.org/api/v1/repository?last_modified=true&namespace=testorg&popularity=true&public=true"a=true'Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 要查看机构详情中的配额信息,请使用 /api/v1/organization/{orgname} 端点:
示例命令
curl -k -X GET -H "Authorization: Bearer <token>" -H 'Content-Type: application/json' 'https://example-registry-quay-quay-enterprise.apps.docs.gcp.quaydev.org/api/v1/organization/testorg' | jq
$ curl -k -X GET -H "Authorization: Bearer <token>" -H 'Content-Type: application/json' 'https://example-registry-quay-quay-enterprise.apps.docs.gcp.quaydev.org/api/v1/organization/testorg' | jqCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
14.4.5. 使用配额限制拒绝推送 复制链接链接已复制到粘贴板!
如果镜像推送超过定义的配额限制,则会发生软或硬检查:
- 对于软检查,或警告,用户会收到通知。
- 对于硬检查 或拒绝,该推送将被终止。
14.4.5.1. 设置 reject 和 warning 限制 复制链接链接已复制到粘贴板!
要设置 reject 和 warning 限制,请将 POST 数据发送到 /api/v1/organization/{orgname}/quota/{quota_id}/limit 端点:
拒绝限制命令示例
curl -k -X POST -H "Authorization: Bearer <token>" -H 'Content-Type: application/json' -d '{"type":"Reject","threshold_percent":80}' https://example-registry-quay-quay-enterprise.apps.docs.gcp.quaydev.org/api/v1/organization/testorg/quota/1/limit
$ curl -k -X POST -H "Authorization: Bearer <token>" -H 'Content-Type: application/json' -d '{"type":"Reject","threshold_percent":80}' https://example-registry-quay-quay-enterprise.apps.docs.gcp.quaydev.org/api/v1/organization/testorg/quota/1/limit
警告限制命令示例
curl -k -X POST -H "Authorization: Bearer <token>" -H 'Content-Type: application/json' -d '{"type":"Warning","threshold_percent":50}' https://example-registry-quay-quay-enterprise.apps.docs.gcp.quaydev.org/api/v1/organization/testorg/quota/1/limit
$ curl -k -X POST -H "Authorization: Bearer <token>" -H 'Content-Type: application/json' -d '{"type":"Warning","threshold_percent":50}' https://example-registry-quay-quay-enterprise.apps.docs.gcp.quaydev.org/api/v1/organization/testorg/quota/1/limit
14.4.5.2. 查看拒绝和警告限制 复制链接链接已复制到粘贴板!
要查看 reject 和 warning 限制,请使用 /api/v1/organization/{orgname}/quota 端点:
查看配额限制
curl -k -X GET -H "Authorization: Bearer <token>" -H 'Content-Type: application/json' https://example-registry-quay-quay-enterprise.apps.docs.gcp.quaydev.org/api/v1/organization/testorg/quota | jq
$ curl -k -X GET -H "Authorization: Bearer <token>" -H 'Content-Type: application/json' https://example-registry-quay-quay-enterprise.apps.docs.gcp.quaydev.org/api/v1/organization/testorg/quota | jq
配额限制的输出示例
14.4.5.3. 超过 reject 限值时推送镜像 复制链接链接已复制到粘贴板!
在本例中,拒绝限制(80%)已设置为当前存储库大小(~83%)的下方,因此下一推送应自动拒绝。
从命令行将示例镜像推送到机构:
镜像推送示例
podman pull ubuntu:20.04 podman tag docker.io/library/ubuntu:20.04 example-registry-quay-quay-enterprise.apps.docs.gcp.quaydev.org/testorg/ubuntu:20.04 podman push --tls-verify=false example-registry-quay-quay-enterprise.apps.docs.gcp.quaydev.org/testorg/ubuntu:20.04
$ podman pull ubuntu:20.04
$ podman tag docker.io/library/ubuntu:20.04 example-registry-quay-quay-enterprise.apps.docs.gcp.quaydev.org/testorg/ubuntu:20.04
$ podman push --tls-verify=false example-registry-quay-quay-enterprise.apps.docs.gcp.quaydev.org/testorg/ubuntu:20.04
超过配额时的输出示例
14.4.5.4. 超过限制的通知 复制链接链接已复制到粘贴板!
超过限制时,会出现一个通知:
配额通知
第 15 章 Red Hat Quay 作为上游 registry 的代理缓存 复制链接链接已复制到粘贴板!
随着容器开发日益普及,客户逐渐依赖 Docker 或 Google Cloud Platform 等上游 registry 中的容器镜像来启动和运行服务。现在,对于用户可以从这些 registry 中拉取的次数,registry 存在速率限制和节流。
通过此功能,Red Hat Quay 将充当代理缓存,以绕过上游 registry 的限制。添加缓存功能也会加快拉取性能,因为镜像是从缓存中拉取的,而不是从上游依赖项中提取。只有在上游镜像摘要与缓存的镜像不同时,才会更新缓存的镜像,从而减少速率限制和潜在的节流。
在 Red Hat Quay 缓存代理技术预览中,可以使用以下功能:
- 特定机构可以定义为上游 registry 的缓存。
配置 Quay 组织,充当特定上游 registry 的缓存。此软件仓库可以通过 Quay UI 定义,并提供以下配置:
- 私有存储库的上游 registry 凭证或提高速率限制。
过期计时器以避免超过缓存机构大小。
注意因为缓存代理仍标记为
技术预览,所以还没有支持存储配额。当此功能在以后的 Red Hat Quay 版本中成为正式发行(GA)时,过期计时器将由其他计时器补充,以防出现重复的上游 registry 问题。
- 通过配置应用程序全局配置/关闭。
-
整个上游 registry 的缓存或只有一个命名空间,例如:所有
\docker.io或只\docker.io/library。 - 会拉取所有缓存的日志记录。
- Clair 的缓存镜像扫描功能。
15.1. 代理缓存架构 复制链接链接已复制到粘贴板!
下图显示了代理缓存功能的预期设计流和架构。
当用户从 Red Hat Quay 上的上游存储库拉取(如 postgres:14 )时,程序库会检查是否存在镜像。如果镜像不存在,则启动新的拉取。拉取后,镜像层将保存到同时缓存和服务器到用户。下图描述了这种情况的架构概述:
如果缓存中存在镜像,用户便可依赖 Quay 的缓存与上游源保持最新状态,以便自动拉取来自缓存的较新的镜像。当上游 registry 中已覆盖了原始镜像的标签时,会出现这种情况。下图描述了当上游镜像和缓存镜像版本不同的版本时会发生什么情况的架构概述:
如果上游镜像和缓存的版本相同,则不会拉取任何层,并将缓存的镜像提供给用户。
在某些情况下,用户在上游 registry 关闭时启动拉取。如果这种情况与配置的陈旧期发生,则存储在缓存中的镜像。如果在配置的过时期限后发生拉取,则错误会传播到用户。下图显示了在配置的过时期限后拉取(pull)时的架构概述:
Image: cache-proxy-staleness-pull.png[Staleness pull overview]
Quay 管理员可以利用组织的可配置大小限制来限制缓存大小,以便后端存储消耗可以预测。实现方法是根据镜像使用的频率从缓存中丢弃镜像。下图描述了这种情况的架构概述:
15.2. 代理缓存限制 复制链接链接已复制到粘贴板!
与 Red Hat Quay 进行代理缓存有以下限制:
- 您的代理缓存的大小限制必须大于或等于您要缓存的镜像。例如,如果您的代理缓存机构的最大大小为 500 MB,而用户想拉取的镜像为 700 MB,则镜像将被缓存,并在配置的限制之外溢出。
- 缓存的镜像必须具有与 Quay 存储库中的镜像相同的属性。
15.3. 使用 Red Hat Quay 代理远程 registry 复制链接链接已复制到粘贴板!
以下流程描述了如何使用 Red Hat Quay 代理远程 registry。此流程设置为 proxy quay.io,它允许用户使用 podman 从 quay.io 上的任何命名空间拉取任何公共镜像。
先决条件
-
config.yaml 中的
FEATURE_PROXY_CACHE设置为true。 - 分配 Member 团队角色。如需有关团队角色的更多信息,请参阅 Red Hat Quay 中的用户和组织。
流程
-
在 UI 上的 Quay 机构中,例如
cache-quayio,单击左侧窗格的 Organization Settings。 可选:点 Add Storage Quota 为您的机构配置配额管理。有关配额管理的更多信息,请参阅配额管理。
注意在某些情况下,当拉取过程中达到配额限制时,使用 Podman 拉取镜像可能会返回以下错误:
无法拉取 image: Error parsing image configuration: Error fetching blob: invalid status code from registry 403(Forbidden)。错误403is inaccurate,且发生时,Podman 隐藏了正确的 API 错误:Quota been exceeded on namespace。已知的问题将在以后的 Podman 更新中修复。在 Remote Registry 中,输入要缓存的远程 registry 的名称,如
quay.io,然后单击 Save。注意通过在 远程 Registry 中添加命名空间,例如
quay.io/<namespace>,您的机构中的用户只能从该命名空间中代理。可选:添加 远程 Registry 用户名和 远程 Registry 密码。
注意如果您没有设置 Remote Registry Username 和 Remote Registry Password,则无法在不删除代理缓存的情况下添加一个,并创建新的 registry。
可选:在 过期 项中设置时间。
注意- 代理机构中缓存镜像的默认 tag Expiration 字段设置为 86400 秒。在代理机构中,每当拉取标签时,标签过期都会刷新到 UI 的 过期 项中设置的值。此功能与 Quay 的默认 单独标签过期 功能不同。在代理机构中,可以覆盖各个标签功能。发生这种情况时,根据代理机构的过期字段重置单个标签的 过期。
- 过期的镜像将在分配的时间后消失,但仍存储在 Quay 中。镜像被完全删除或收集的时间取决于机构的 Time Machine 设置。垃圾回收的默认时间为 14 天,除非另有指定。
- 点击 Save。
在 CLI 中,从 registry 中拉取公共镜像,如 quay.io,作为代理缓存:
podman pull <registry_url>/<organization_name>/<quayio_namespace>/<image_name>
$ podman pull <registry_url>/<organization_name>/<quayio_namespace>/<image_name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 重要如果您的组织被设置为从远程 registry 的单个命名空间中拉取,则必须在 URL 中省略远程 registry 命名空间。例如,
podman pull <registry_url>/<organization_name>/<image_name>。
第 16 章 Red Hat Quay 构建增强 复制链接链接已复制到粘贴板!
在 Red Hat Quay 3.7 之前,Quay 在由 Pod 启动的虚拟机中运行 podman 命令。在虚拟平台上运行构建需要启用嵌套虚拟化,它们不适用于 Red Hat Enterprise Linux 或 OpenShift Container Platform。因此,构建必须在裸机集群上运行,这效率低下使用资源。
使用 Red Hat Quay 3.7。通过添加额外的构建选项(不包含虚拟机层),从而删除了运行构建所需的裸机限制。因此,构建可以在虚拟平台上运行。还提供向后兼容以运行之前的构建配置。
16.1. Red Hat Quay 增强的构建架构 复制链接链接已复制到粘贴板!
上图显示了增强的构建功能的预期设计流和架构:
在这个版本中,构建管理器首先会创建作业对象。然后,Job 对象 会使用 quay-builder-image 创建 pod。quay-builder-image 将包含 quay-builder 二进制文件 和 Podman 服务。所创建的 pod 以 非特权方式运行。然后,quay-builder 二进制文件 在沟通状态和从 Build Manager 检索构建信息的同时构建镜像。
16.2. Red Hat Quay 构建限制 复制链接链接已复制到粘贴板!
在非特权上下文中在 Red Hat Quay 中运行构建可能会导致一些在以前的构建策略下工作的命令失败。尝试更改构建策略可能会导致构建出现性能问题和可靠性。
直接在容器中运行构建不会与使用虚拟机的相同隔离。更改构建环境也可能会导致之前工作的构建失败。
16.3. 使用 OpenShift 创建 Red Hat Quay 构建器环境 复制链接链接已复制到粘贴板!
16.3.1. OpenShift TLS 组件 复制链接链接已复制到粘贴板!
tls 组件允许您控制 TLS 配置。
当 Operator 管理 TLS 组件时,Red Hat Quay 3.7 不支持构建程序。
如果将 tls 设置为非受管状态,您可以提供自己的 ssl.cert 和 ssl.key 文件。在本实例中,如果您希望集群支持构建器,您必须将 Quay 路由和构建器路由名称添加到证书中的 SAN 列表中,或者使用通配符。要添加构建器路由,请使用以下格式:
[quayregistry-cr-name]-quay-builder-[ocp-namespace].[ocp-domain-name]:443
[quayregistry-cr-name]-quay-builder-[ocp-namespace].[ocp-domain-name]:443
以下流程描述了如何在 Red Hat Quay 中实施构建器功能。
先决条件
- 构建器需要 SSL 证书。如需更多信息,请参阅在 Red Hat Quay 容器中添加 TLS 证书。
- 如果使用 AWS S3 存储,您必须在 AWS 控制台中修改存储桶,然后再运行构建器。如需所需参数,请参阅以下部分"修改 AWS S3 存储桶"。
- 此流程假设您已置备集群并运行 Quay Operator。
- 此过程是在 OpenShift Container Platform 上设置虚拟命名空间。
16.3.2.1. 为虚拟构建器准备 OpenShift Container Platform 复制链接链接已复制到粘贴板!
- 使用集群管理员帐户登录您的 Red Hat Quay 集群。
创建一个新项目运行您的虚拟构建器(如
virtual-builders)。oc new-project virtual-builders
$ oc new-project virtual-buildersCopy to Clipboard Copied! Toggle word wrap Toggle overflow 在此
项目中创建一个ServiceAccount,它将用于运行构建。oc create sa -n virtual-builders quay-builder
$ oc create sa -n virtual-builders quay-builderCopy to Clipboard Copied! Toggle word wrap Toggle overflow 使用编辑权限提供所创建的服务帐户,以便它能够运行构建:
oc adm policy -n virtual-builders add-role-to-user edit system:serviceaccount:virtual-builders:quay-builder
$ oc adm policy -n virtual-builders add-role-to-user edit system:serviceaccount:virtual-builders:quay-builderCopy to Clipboard Copied! Toggle word wrap Toggle overflow 授予 Quay builder
anyuid scc权限:oc adm policy -n virtual-builders add-scc-to-user anyuid -z quay-builder
$ oc adm policy -n virtual-builders add-scc-to-user anyuid -z quay-builderCopy to Clipboard Copied! Toggle word wrap Toggle overflow 注意此操作需要集群管理员特权。这是必要的,因为构建器必须以 Podman 用户运行,以获取非特权或无根构建才能工作。
获取 Quay builder 服务帐户的令牌。
如果使用 OpenShift Container Platform 4.10 或更早的版本,请输入以下命令:
oc sa get-token -n virtual-builders quay-builder
oc sa get-token -n virtual-builders quay-builderCopy to Clipboard Copied! Toggle word wrap Toggle overflow 如果使用 OpenShift Container Platform 4.11 或更高版本,请输入以下命令:
oc create token quay-builder -n virtual-builders
$ oc create token quay-builder -n virtual-buildersCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
eyJhbGciOiJSUzI1NiIsImtpZCI6IldfQUJkaDVmb3ltTHZ0dGZMYjhIWnYxZTQzN2dJVEJxcDJscldSdEUtYWsifQ...
eyJhbGciOiJSUzI1NiIsImtpZCI6IldfQUJkaDVmb3ltTHZ0dGZMYjhIWnYxZTQzN2dJVEJxcDJscldSdEUtYWsifQ...Copy to Clipboard Copied! Toggle word wrap Toggle overflow
确定构建器路由:
oc get route -n quay-enterprise
$ oc get route -n quay-enterpriseCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
NAME HOST/PORT PATH SERVICES PORT TERMINATION WILDCARD ... example-registry-quay-builder example-registry-quay-builder-quay-enterprise.apps.docs.quayteam.org example-registry-quay-app grpc edge/Redirect None ...
NAME HOST/PORT PATH SERVICES PORT TERMINATION WILDCARD ... example-registry-quay-builder example-registry-quay-builder-quay-enterprise.apps.docs.quayteam.org example-registry-quay-app grpc edge/Redirect None ...Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用 .crt 扩展生成自签名 SSL 证书:
oc extract cm/kube-root-ca.crt -n openshift-apiserver ca.crt
$ oc extract cm/kube-root-ca.crt -n openshift-apiserver ca.crtCopy to Clipboard Copied! Toggle word wrap Toggle overflow mv ca.crt extra_ca_cert_build_cluster.crt
$ mv ca.crt extra_ca_cert_build_cluster.crtCopy to Clipboard Copied! Toggle word wrap Toggle overflow 在控制台中找到 config bundle 的 secret,然后选择 Actions → Edit Secret 并添加适当的构建器配置:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 构建路由通过运行
oc get route -n并使用 OpenShift Operator 命名空间的名称来获取。例如,必须在路由末尾提供一个端口:[quayregistry-cr-name]-quay-builder-[ocp-namespace].[ocp-domain-name]:443。 - 2
- 如果
JOB_REGISTRATION_TIMEOUT参数设置太低,则可能会收到以下错误:failed to register job to build manager: rpc error: code = Unauthenticated desc = Invalid build token: Invalid build token: Signature has been expired.建议将此参数设置为 240。 - 3
- 如果您的 Redis 主机有密码或 SSL 证书,您必须相应地更新。
- 4
- 设置 以匹配虚拟构建器命名空间的名称,如
virtual-builders。 - 5
- 对于早期访问权限,
BUILDER_CONTAINER_IMAGE目前为quay.io/projectquay/quay-builder:3.7.0-rc.2。请注意,这可能会在早期访问窗口内有所变化。如果发生此情况,会提醒客户。 - 6
- 通过运行
oc cluster-info获取。 - 7
- 您必须手动创建并添加自定义 CA 证书,例如
K8S_API_TLS_CA: /conf/stack/extra_ca_certs/build_cluster.crt。 - 8
- 若未指定,则默认为 5120Mi。
- 9
- 对于虚拟构建,您必须确保集群中有足够的资源。若未指定,则默认为 1000m。
- 10
- 若未指定,则默认为 3968Mi。
- 11
- 若未指定,则默认为 500m。
- 12
- 运行
oc create sa时获取。
配置示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
16.3.2.2. 手动添加 SSL 证书。 复制链接链接已复制到粘贴板!
- 由于配置工具存在一个已知问题,您必须手动添加自定义 SSL 证书来正确运行构建程序。使用以下步骤手动添加自定义 SSL 证书。有关创建 SSL 证书的更多信息,请参阅在 Red Hat Quay 容器中添加 TLS 证书。
16.3.2.2.1. 创建并签名证书 复制链接链接已复制到粘贴板!
创建证书颁发机构并签署证书。如需更多信息 ,请参阅创建证书颁发机构并签署证书。
注意-
为 Quay registry 的 URL 添加
alt_name。 -
为 config.yaml 中指定的
BUILDMAN_HOSTNAME添加alt_name。
openssl.cnf
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 示例命令
openssl genrsa -out rootCA.key 2048 openssl req -x509 -new -nodes -key rootCA.key -sha256 -days 1024 -out rootCA.pem openssl genrsa -out ssl.key 2048 openssl req -new -key ssl.key -out ssl.csr openssl x509 -req -in ssl.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out ssl.cert -days 356 -extensions v3_req -extfile openssl.cnf
$ openssl genrsa -out rootCA.key 2048 $ openssl req -x509 -new -nodes -key rootCA.key -sha256 -days 1024 -out rootCA.pem $ openssl genrsa -out ssl.key 2048 $ openssl req -new -key ssl.key -out ssl.csr $ openssl x509 -req -in ssl.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out ssl.cert -days 356 -extensions v3_req -extfile openssl.cnfCopy to Clipboard Copied! Toggle word wrap Toggle overflow -
为 Quay registry 的 URL 添加
16.3.2.2.2. 将 TLS 设置为非受管状态 复制链接链接已复制到粘贴板!
在 Quay Registry yaml 中,将 kind: tls 设置为 managed: false :
- kind: tls
managed: false
- kind: tls
managed: false
在事件中,您应该会看到在设置适当的配置前阻止了更改:
16.3.2.2.3. 创建临时 secret 复制链接链接已复制到粘贴板!
在默认命名空间中为 CA 证书创建 secret:
oc create secret generic -n quay-enterprise temp-crt --from-file extra_ca_cert_build_cluster.crt
$ oc create secret generic -n quay-enterprise temp-crt --from-file extra_ca_cert_build_cluster.crtCopy to Clipboard Copied! Toggle word wrap Toggle overflow 在 default 命名空间中为 ssl.key 和 ssl.cert 文件创建一个 secret:
oc create secret generic -n quay-enterprise quay-config-ssl --from-file ssl.cert --from-file ssl.key
$ oc create secret generic -n quay-enterprise quay-config-ssl --from-file ssl.cert --from-file ssl.keyCopy to Clipboard Copied! Toggle word wrap Toggle overflow
16.3.2.2.4. 将 secret 数据复制到 config.yaml 复制链接链接已复制到粘贴板!
- 在 Workloads → Secrets 的 console UI 中找到新 secret。
对于每个 secret,找到 YAML 视图:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在 UI 中查找 Quay Registry 配置捆绑包的 secret,或通过运行以下命令来通过运行以下命令,例如:
oc get quayregistries.quay.redhat.com -o jsonpath="{.items[0].spec.configBundleSecret}{'\n'}" -n quay-enterprise$ oc get quayregistries.quay.redhat.com -o jsonpath="{.items[0].spec.configBundleSecret}{'\n'}" -n quay-enterpriseCopy to Clipboard Copied! Toggle word wrap Toggle overflow 在 OpenShift 控制台中,选择 config bundle secret 的 YAML 选项卡,并从您创建的两个 secret 添加数据:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 点击 Save。您应该看到正在重启的 pod:
oc get pods -n quay-enterprise
$ oc get pods -n quay-enterpriseCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 重新配置 Quay registry 后,检查您的 Quay app pod 是否正在运行:
oc get pods -n quay-enterprise
$ oc get pods -n quay-enterpriseCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在浏览器中,访问 registry 端点并验证证书是否已正确更新:
Common Name (CN) example-registry-quay-quay-enterprise.apps.docs.quayteam.org Organisation (O) DOCS Organisational Unit (OU) QUAY
Common Name (CN) example-registry-quay-quay-enterprise.apps.docs.quayteam.org Organisation (O) DOCS Organisational Unit (OU) QUAYCopy to Clipboard Copied! Toggle word wrap Toggle overflow
16.3.2.3. 使用 UI 创建构建触发器 复制链接链接已复制到粘贴板!
- 登录您的 Quay 存储库。
-
单击 Create New Repository 并创建一个新 registry,例如
testrepo。 在 Repositories 页面上,单击左侧窗格中的 Builds 选项卡。或者,直接使用对应的 URL,例如:
https://example-registry-quay-quay-enterprise.apps.docs.quayteam.org/repository/quayadmin/testrepo?tab=builds
https://example-registry-quay-quay-enterprise.apps.docs.quayteam.org/repository/quayadmin/testrepo?tab=buildsCopy to Clipboard Copied! Toggle word wrap Toggle overflow 重要在某些情况下,构建器可能会存在解析主机名的问题。此问题可能与作业对象上的
dnsPolicy被设置为default。目前,这个问题还没有临时解决方案。它将在以后的 Red Hat Quay 版本中解决。- 点 Create Build Trigger → Custom Git Repository Push。
输入用于克隆 Git 存储库的 HTTPS 或 SSH 风格 URL,然后点 Continue。例如:
https://github.com/gabriel-rh/actions_test.git
https://github.com/gabriel-rh/actions_test.gitCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 使用分支或标签名称检查 Tag 清单,然后单击 Continue。
-
在调用触发器时输入要构建的 Dockerfile 位置,如
/Dockerfile,再单击 Continue。 -
输入 Docker 构建上下文的位置,如
/,然后单击 Continue。 - 如果保证,请创建一个 Robot 帐户。否则,点 Continue。
- 点 Continue 验证参数。
- 在 Builds 页面上,点击 Trigger Name 的 Options 图标,然后点 Run Trigger Now。
- 输入来自 Git 存储库的提交 SHA,然后单击 Start Build。
您可以点击 Build History 页面中的提交或运行
oc get pods -n virtual-builders来检查构建的状态。oc get pods -n virtual-builders
$ oc get pods -n virtual-builders NAME READY STATUS RESTARTS AGE f192fe4a-c802-4275-bcce-d2031e635126-9l2b5-25lg2 1/1 Running 0 7sCopy to Clipboard Copied! Toggle word wrap Toggle overflow oc get pods -n virtual-builders
$ oc get pods -n virtual-builders NAME READY STATUS RESTARTS AGE f192fe4a-c802-4275-bcce-d2031e635126-9l2b5-25lg2 1/1 Terminating 0 9sCopy to Clipboard Copied! Toggle word wrap Toggle overflow oc get pods -n virtual-builders
$ oc get pods -n virtual-builders No resources found in virtual-builders namespace.Copy to Clipboard Copied! Toggle word wrap Toggle overflow 构建完成后,您可以在左侧窗格的 Tags 下检查标签的状态。
注意对于早期访问,构建的完整构建日志和时间戳目前不可用。
16.3.2.4. 修改 AWS S3 存储桶 复制链接链接已复制到粘贴板!
如果使用 AWS S3 存储,您必须在 AWS 控制台中修改存储桶,然后再运行构建器。
- 在 s3.console.aws.com 上登录到您的 AWS 控制台。
-
在搜索栏中,搜索
S3,然后单击 S3。 -
单击存储桶的名称,如
myawsbucket。 - 单击权限选项卡。
在 Cross-origin 资源共享(CORS) 下,包含以下参数:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
第 17 章 使用 Red Hat Quay API 复制链接链接已复制到粘贴板!
Red Hat Quay 提供了一个完整的 OAuth 2、RESTful API,它:
- 可以从 URL https://<yourquayhost>/api/v1的端点获取每个 Red Hat Quay 实例的端点
- 通过启用 Swagger UI,通过浏览器连接到端点,以获取、删除、发布和放置 Red Hat Quay 设置
- 可以被使用 API 调用和使用 OAuth 令牌的应用程序访问
- 以 JSON 格式发送和接收数据
下面的文本描述了如何访问 Red Hat Quay API,并使用它来查看和修改 Red Hat Quay 集群中的设置。下一节列出了和描述 API 端点。
17.1. 从 Quay.io 访问 Quay API 复制链接链接已复制到粘贴板!
如果您还没有运行自己的 Red Hat Quay 集群,您可以从 Web 浏览器浏览 Quay.io 提供的 Red Hat Quay API:
https://docs.quay.io/api/swagger/
https://docs.quay.io/api/swagger/
显示 Quay.io API 端点的 API Explorer。您将无法看到在 Quay.io 上未启用的 Red Hat Quay 功能的超级用户 API 端点或端点(如存储库镜像)。
从 API Explorer,您可以获得并有时会更改以下信息:
- 账单、订阅和计划
- 存储库构建和构建触发器
- 错误消息和全局信息
- 仓库镜像、清单、权限、通知、漏洞和镜像签名
- 使用日志
- 机构、成员和 OAuth 应用程序
- 用户和机器人帐户
- and more…
选择打开端点来查看端点的每一个部分的 Model Schema。打开端点,输入所有必要的参数(如存储库名称或镜像),然后选择 尝试退出! 按钮来查询或更改与 Quay.io 端点关联的设置。
17.2. 创建 OAuth 访问令牌 复制链接链接已复制到粘贴板!
要创建 OAuth 访问令牌,以便您可以访问机构的 API:
- 登录 Red Hat Quay 并选择您的机构(或创建一个新的机构)。
- 点击左侧导航栏中的 Applications 图标。
- 选择 Create New Application 并在出现提示时为新应用程序提供名称。
- 选择新应用。
- 从左侧导航中选择 Generate Token。
- 选择设置令牌范围的复选框,然后选择 Generate Access Token。
- 查看允许并选择授权应用程序的权限来批准它。
- 复制新生成的令牌,以用于访问 API。
17.3. 从网页浏览器访问 Quay API 复制链接链接已复制到粘贴板!
通过启用 Swagger,您可以通过网页浏览器访问您自己的 Red Hat Quay 实例的 API。这个 URL 通过 Swagger UI 和这个 URL 公开 Red Hat Quay API explorer:
https://<yourquayhost>/api/v1/discovery.
https://<yourquayhost>/api/v1/discovery.
这样,访问 API 的方法不包括在 Red Hat Quay 安装中可用的超级用户端点。以下是通过运行 swagger-ui 容器镜像访问本地系统上运行的 Red Hat Quay API 接口的示例:
export SERVER_HOSTNAME=<yourhostname> sudo podman run -p 8888:8080 -e API_URL=https://$SERVER_HOSTNAME:8443/api/v1/discovery docker.io/swaggerapi/swagger-ui
# export SERVER_HOSTNAME=<yourhostname>
# sudo podman run -p 8888:8080 -e API_URL=https://$SERVER_HOSTNAME:8443/api/v1/discovery docker.io/swaggerapi/swagger-ui
在运行 swagger-ui 容器时,打开 Web 浏览器到 localhost 端口 8888,以通过 swagger-ui 容器查看 API 端点。
为避免在日志中出现错误,如 "API 调用,如果使用浏览器调用 X-Requested-With 标头来调用,"如果从浏览器中调用,请将下面这一行添加到集群中的所有节点上的 config.yaml 中,再重启 Red Hat Quay:
BROWSER_API_CALLS_XHR_ONLY: false
BROWSER_API_CALLS_XHR_ONLY: false
17.4. 从命令行访问 Red Hat Quay API 复制链接链接已复制到粘贴板!
您可以通过 Red Hat Quay 集群的 API,使用 curl 命令 GET、PUT、POST 或 DELETE 设置。将 <token > 替换为您之前创建的 OAuth 访问令牌,以便在以下示例中获取或更改设置。
17.4.1. 获取超级用户信息 复制链接链接已复制到粘贴板!
curl -X GET -H "Authorization: Bearer <token_here>" \
"https://<yourquayhost>/api/v1/superuser/users/"
$ curl -X GET -H "Authorization: Bearer <token_here>" \
"https://<yourquayhost>/api/v1/superuser/users/"
例如:
17.4.2. 使用 API 创建超级用户 复制链接链接已复制到粘贴板!
配置超级用户名称,如 Deploy Quay book 所述:
- 使用配置编辑器 UI 或者
-
直接使用配置 API 来验证(并下载)更新的配置捆绑包,直接编辑
config.yaml文件
为超级用户名称创建用户帐户:
获取授权令牌(如上所述),并使用
curl来创建用户:curl -H "Content-Type: application/json" -H "Authorization: Bearer Fava2kV9C92p1eXnMawBZx9vTqVnksvwNm0ckFKZ" -X POST --data '{$ curl -H "Content-Type: application/json" -H "Authorization: Bearer Fava2kV9C92p1eXnMawBZx9vTqVnksvwNm0ckFKZ" -X POST --data '{ "username": "quaysuper", "email": "quaysuper@example.com" }' http://quay-server:8080/api/v1/superuser/users/ | jqCopy to Clipboard Copied! Toggle word wrap Toggle overflow 返回的内容包括新用户帐户的生成密码:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
现在,当您请求用户列表时,它将以超级用户身份显示 quaysuper :
17.4.3. 列出用量日志 复制链接链接已复制到粘贴板!
一个内部 API /api/v1/superuser/logs 可用于列出当前系统的用量日志。这将分页结果,因此在以下示例中创建了超过 20 个仓库,以介绍如何使用多个调用来访问整个结果集。
17.4.3.1. 分页示例 复制链接链接已复制到粘贴板!
首次调用
curl -X GET -k -H "Authorization: Bearer qz9NZ2Np1f55CSZ3RVOvxjeUdkzYuCp0pKggABCD" https://example-registry-quay-quay-enterprise.apps.example.com/api/v1/superuser/logs | jq
$ curl -X GET -k -H "Authorization: Bearer qz9NZ2Np1f55CSZ3RVOvxjeUdkzYuCp0pKggABCD" https://example-registry-quay-quay-enterprise.apps.example.com/api/v1/superuser/logs | jq
初始输出
使用 next_page 进行第二个调用
curl -X GET -k -H "Authorization: Bearer qz9NZ2Np1f55CSZ3RVOvxjeUdkzYuCp0pKggABCD" https://example-registry-quay-quay-enterprise.apps.example.com/api/v1/superuser/logs?next_page=gAAAAABhtzGDsH38x7pjWhD8MJq1_2FAgqUw2X9S2LoCLNPH65QJqB4XAU2qAxYb6QqtlcWj9eI6DUiMN_q3e3I0agCvB2VPQ8rY75WeaiUzM3rQlMc4i6ElR78t8oUxVfNp1RMPIRQYYZyXP9h6E8LZZhqTMs0S-SedaQJ3kVFtkxZqJwHVjgt23Ts2DonVoYwtKgI3bCC5 | jq
$ curl -X GET -k -H "Authorization: Bearer qz9NZ2Np1f55CSZ3RVOvxjeUdkzYuCp0pKggABCD" https://example-registry-quay-quay-enterprise.apps.example.com/api/v1/superuser/logs?next_page=gAAAAABhtzGDsH38x7pjWhD8MJq1_2FAgqUw2X9S2LoCLNPH65QJqB4XAU2qAxYb6QqtlcWj9eI6DUiMN_q3e3I0agCvB2VPQ8rY75WeaiUzM3rQlMc4i6ElR78t8oUxVfNp1RMPIRQYYZyXP9h6E8LZZhqTMs0S-SedaQJ3kVFtkxZqJwHVjgt23Ts2DonVoYwtKgI3bCC5 | jq
第二个调用的输出
17.4.4. 目录同步 复制链接链接已复制到粘贴板!
要在机构 testadminorg 中为团队 newteam 启用目录同步,其中 LDAP 中对应的组名称是 ldapgroup :
curl -X POST -H "Authorization: Bearer 9rJYBR3v3pXcj5XqIA2XX6Thkwk4gld4TCYLLWDF" \
-H "Content-type: application/json" \
-d '{"group_dn": "cn=ldapgroup,ou=Users"}' \
http://quay1-server:8080/api/v1/organization/testadminorg/team/newteam/syncing
$ curl -X POST -H "Authorization: Bearer 9rJYBR3v3pXcj5XqIA2XX6Thkwk4gld4TCYLLWDF" \
-H "Content-type: application/json" \
-d '{"group_dn": "cn=ldapgroup,ou=Users"}' \
http://quay1-server:8080/api/v1/organization/testadminorg/team/newteam/syncing
为同一团队禁用同步:
curl -X DELETE -H "Authorization: Bearer 9rJYBR3v3pXcj5XqIA2XX6Thkwk4gld4TCYLLWDF" \
http://quay1-server:8080/api/v1/organization/testadminorg/team/newteam/syncing
$ curl -X DELETE -H "Authorization: Bearer 9rJYBR3v3pXcj5XqIA2XX6Thkwk4gld4TCYLLWDF" \
http://quay1-server:8080/api/v1/organization/testadminorg/team/newteam/syncing
17.4.5. 通过 API 创建存储库构建 复制链接链接已复制到粘贴板!
要从指定的输入构建存储库,并使用自定义标签标记构建,用户可以使用 requestRepoBuild 端点。它采用以下数据:
archive_url 参数应指向包含 Dockerfile 和其他构建所需文件的 tar 或 zip 存档。file_id 参数是我们较旧的构建系统外。它无法再使用。如果 Dockerfile 位于子目录中,也需要指定它。
该存档应公开访问。OAuth 应用应具有 "Administer Organization" 范围,因为只有机构管理员可以访问机器人的帐户令牌。否则,某人可以通过简单地授予构建对机器人(没有访问权限本身)来获取机器人权限,并使用它来获取镜像内容。如果出现错误,请检查 json 块返回的,并确保归档位置、拉取机器机器和其他参数正确传递。点单个构建页面右上角的"下载日志"检查日志以了解更详细的消息。
17.4.6. 创建机构机器人 复制链接链接已复制到粘贴板!
curl -X PUT https://quay.io/api/v1/organization/{orgname}/robots/{robot shortname} \
-H 'Authorization: Bearer <token>''
$ curl -X PUT https://quay.io/api/v1/organization/{orgname}/robots/{robot shortname} \
-H 'Authorization: Bearer <token>''
17.4.7. 触发构建 复制链接链接已复制到粘贴板!
curl -X POST https://quay.io/api/v1/repository/YOURORGNAME/YOURREPONAME/build/ \ -H 'Authorization: Bearer <token>'
$ curl -X POST https://quay.io/api/v1/repository/YOURORGNAME/YOURREPONAME/build/ \
-H 'Authorization: Bearer <token>'
带有请求的 Python
import requests
r = requests.post('https://quay.io/api/v1/repository/example/example/image', headers={'content-type': 'application/json', 'Authorization': 'Bearer <redacted>'}, data={[<request-body-contents>})
print(r.text)
import requests
r = requests.post('https://quay.io/api/v1/repository/example/example/image', headers={'content-type': 'application/json', 'Authorization': 'Bearer <redacted>'}, data={[<request-body-contents>})
print(r.text)
17.4.8. 创建私有存储库 复制链接链接已复制到粘贴板!
curl -X POST https://quay.io/api/v1/repository \
-H 'Authorization: Bearer {token}' \
-H 'Content-Type: application/json' \
-d '{"namespace":"yournamespace", "repository":"yourreponame",
$ curl -X POST https://quay.io/api/v1/repository \
-H 'Authorization: Bearer {token}' \
-H 'Content-Type: application/json' \
-d '{"namespace":"yournamespace", "repository":"yourreponame",
"description":"descriptionofyourrepo", "visibility": "private"}' | jq