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-builders
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在此
项目
中创建一个ServiceAccount
,它将用于运行构建。oc create sa -n virtual-builders quay-builder
$ oc create sa -n virtual-builders quay-builder
Copy 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-builder
Copy 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-builder
Copy 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-builder
Copy 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-builders
Copy 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-enterprise
Copy 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.crt
Copy 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.crt
Copy 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.cnf
Copy 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.crt
Copy 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.key
Copy 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-enterprise
Copy 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-enterprise
Copy 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-enterprise
Copy 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) QUAY
Copy 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=builds
Copy 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.git
Copy 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 7s
Copy 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 9s
Copy 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