16.3. 使用 OpenShift Container Platform 创建 Red Hat Quay 构建程序环境
本节中的步骤解释了如何使用 OpenShift Container Platform 创建 Red Hat Quay 虚拟构建程序环境。
16.3.1. OpenShift Container Platform TLS 组件 复制链接链接已复制到粘贴板!
tls
组件允许您控制 TLS 配置。
当 TLS 组件由 Operator 管理时,Red Hat Quay 3.8 不支持构建程序。
如果将 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
构建器需要 SSL/TLS 证书。有关 SSL/TLS 证书的更多信息,请参阅 将 TLS 证书添加到 Red Hat Quay 容器。
如果使用 Amazon Web Service (AWS) S3 存储,您必须在 AWS 控制台中修改存储桶,然后才能运行构建程序。如需所需参数,请参见以下部分中"修改 AWS S3 存储桶"。
16.3.2.1. 为虚拟构建器准备 OpenShift Container Platform 复制链接链接已复制到粘贴板!
使用以下步骤为 Red Hat Quay 虚拟构建器准备 OpenShift Container Platform。
- 此流程假设您已置备集群并运行 Quay Operator。
- 此流程是在 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/TlS 证书:
oc extract cm/kube-root-ca.crt -n openshift-apiserver
$ oc extract cm/kube-root-ca.crt -n openshift-apiserver
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
ca.crt
ca.crt
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输入以下命令将
ca.crt
文件重命名为extra_ca_cert_build_cluster.crt
: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 在控制台中找到配置捆绑包的 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
参数设置得太低,您可能会收到以下错误: 无法将作业注册到构建管理器:rpc error: code = Unauthenticated desc = Invalid build token: Signature has expired
.建议将此参数至少设置为 240。 - 3
- 如果您的 Redis 主机有密码或 SSL/TLS 证书,您必须相应地更新。
- 4
- 设置为与虚拟构建器命名空间的名称匹配,如
virtual-builders
。 - 5
- 对于早期访问,
BUILDER_CONTAINER_IMAGE
目前quay.io/projectquay/quay-builder:3.7.0-rc.2
。请注意,在早期访问窗口中可能会有所变化。如果出现这种情况,则会提示客户。 - 6
K8S_API_SERVER
通过运行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/TLS 证书 复制链接链接已复制到粘贴板!
由于配置工具的已知问题,您必须手动添加自定义 SSL/TLS 证书才能正确运行构建器。使用以下步骤手动添加自定义 SSL/TLS 证书。
有关创建 SSL/TLS 证书的更多信息,请参阅 将 TLS 证书添加到 Red Hat Quay 容器。
16.3.2.2.1. 创建和签名证书 复制链接链接已复制到粘贴板!
使用以下步骤创建并签署 SSL/TLS 证书。
流程
创建证书颁发机构并签署证书。如需更多信息 ,请参阅创建证书颁发机构并签署证书。
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
16.3.2.2.2. 将 TLS 设置为非受管 复制链接链接已复制到粘贴板!
使用以下步骤将 king:tls
设置为 unmanaged。
流程
在 Red Hat Quay Registry YAML 中,将
kind: tls
设置为managed: false
:- kind: tls managed: false
- kind: tls managed: false
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在 Events 页面中,更改会被阻止,直到您设置适当的
config.yaml
文件。例如:Copy to Clipboard Copied! Toggle word wrap Toggle overflow
16.3.2.2.3. 创建临时 secret 复制链接链接已复制到粘贴板!
使用以下步骤为 CA 证书创建临时 secret。
流程
在默认命名空间中创建一个 secret,用于 CA 证书:
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 在默认命名空间中为
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 数据复制到配置 YAML 中 复制链接链接已复制到粘贴板!
使用以下步骤将 secret 数据复制到 config.yaml
文件中。
流程
-
在控制台 UI 中的 Workloads
Secrets 中找到新 secret。 对于每个 secret,找到 YAML 视图:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在 UI 中找到 Red Hat 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 Container Platform 控制台中,为配置捆绑包 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 重新配置 Red Hat Quay registry 后,输入以下命令来检查 Red Hat Quay 应用程序 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 创建构建触发器 复制链接链接已复制到粘贴板!
使用以下步骤使用 UI 创建构建触发器。
流程
- 登录您的 Red Hat 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 重要在某些情况下,构建器可能会在解决主机名时遇到问题。此问题可能与在作业对象上设置为
default
的dnsPolicy
相关。目前,这个问题还没有临时解决方案。它将在以后的 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
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
NAME READY STATUS RESTARTS AGE f192fe4a-c802-4275-bcce-d2031e635126-9l2b5-25lg2 1/1 Running 0 7s
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
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
NAME READY STATUS RESTARTS AGE f192fe4a-c802-4275-bcce-d2031e635126-9l2b5-25lg2 1/1 Terminating 0 9s
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
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
No resources found in virtual-builders namespace.
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
16.3.2.5. 修改 Google Cloud Platform 对象存储桶 复制链接链接已复制到粘贴板!
使用以下步骤为虚拟构建器配置跨原始资源共享(CORS)。
如果没有 CORS 配置,上传构建 Dockerfile 会失败。
流程
使用以下引用来创建 JSON 文件,以满足您的特定 CORS 需求。例如:
cat gcp_cors.json
$ cat gcp_cors.json
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输入以下命令更新 GCP 存储桶:
gcloud storage buckets update gs://<bucket_name> --cors-file=./gcp_cors.json
$ gcloud storage buckets update gs://<bucket_name> --cors-file=./gcp_cors.json
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Updating Completed 1
Updating Completed 1
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 您可以运行以下命令来显示 GCP 存储桶的更新 CORS 配置:
gcloud storage buckets describe gs://<bucket_name> --format="default(cors)"
$ gcloud storage buckets describe gs://<bucket_name> --format="default(cors)"
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow