第 9 章 将 Red Hat Quay 与 Bridge Operator 集成
使用 Quay Bridge Operator,您可以将 OpenShift 中的集成容器 registry 替换为 Red Hat Quay registry。通过这样做,您的集成 OpenShift registry 将变为高度可用、企业级 Red Hat Quay registry,它增强了基于角色的访问控制(RBAC)功能。
Bridge Operator 的主要目标是将集成的 OpenShift registry 的功能复制到新的 Red Hat Quay registry 中。此 Operator 启用的功能包括:
将 OpenShift 命名空间同步到 Red Hat Quay 组织。
- 为每个默认命名空间服务帐户创建 Robot 帐户
- 为每个创建的 Robot 帐户创建 Secret (将每个 Robot Secret 关联到服务帐户,作为可挂载和镜像 Pull Secret)
- 将 OpenShift ImageStreams 作为 Quay 存储库同步
- 自动重写新的构建以使用 ImageStreams 输出到 Red Hat Quay
- 构建完成后自动导入 ImageStream 标签
将此流程与 Quay Bridge Operator 搭配使用,您可以启用 Red Hat Quay 和 OpenShift 集群之间的双向通信。
您不能有多个指向 Quay Bridge Operator 中的 Red Hat Quay 实例的 OpenShift Container Platform 集群。如果这样做,它会防止在两个集群中创建名称相同的命名空间。
9.1. 运行 Quay Bridge Operator 复制链接链接已复制到粘贴板!
9.1.1. 先决条件 复制链接链接已复制到粘贴板!
在设置 Bridge Operator 前,有以下内容:
- 您具有超级用户权限的现有 Red Hat Quay 环境
- 建议您具有集群管理员权限的 Red Hat OpenShift Container Platform 环境(4.2 或更高版本)
-
OpenShift 命令行工具(
oc
命令)
9.1.2. 设置和配置 OpenShift 和 Red Hat Quay 复制链接链接已复制到粘贴板!
Red Hat Quay 和 OpenShift 配置都需要:
9.1.2.1. Red Hat Quay 设置 复制链接链接已复制到粘贴板!
创建一个专用的 Red Hat Quay 组织,并从您在该机构中创建的新应用程序生成 OAuth 令牌,以便在 OpenShift 中使用 Quay Bridge Operator
- 以具有超级用户访问权限的用户身份登录到 Red Hat Quay,再选择配置外部应用程序的组织。
- 在左侧导航中,选择 Applications。
-
选择
Create New Application
并为新应用程序输入名称(如openshift
)。 - 显示新应用程序后,选择它。
-
在左侧导航中,选择
Generate Token
以创建新的 OAuth2 令牌。 - 选中所有复选框,以授予集成所需的访问权限。
-
检查分配的权限,然后选择
Authorize Application
,然后确认它。 - 复制并保存在下一部分中要使用的生成的 访问令牌。
9.1.2.2. OpenShift Setup 复制链接链接已复制到粘贴板!
为 Quay Bridge Operator 设置 OpenShift 需要几个步骤,包括:
- 创建 OpenShift 机密 :使用 Quay 中之前创建的 OAuth 令牌创建 OpenShift 机密。
- 添加 MutatingWebhookConfiguration 支持 :要支持 Red Hat Quay 与 OpenShift 集成,任何新的构建请求都应截获,以便输出可以修改为目标 Red Hat Quay 而不是 OpenShift 的集成 registry。
通过 MutatingWebhookConfiguration 促进了对作为 OpenShift 典型构建过程一部分的 API 请求动态拦截的支持。MutatingWebhookConfiguration 允许调用在 OpenShift 上项目中运行的 API,在收到特定的 API 请求时。
Kubernetes 要求 Webhook 端点使用集群的证书颁发机构的证书通过 SSL 进行保护。OpenShift 提供了生成由集群签名的证书的支持。
-
使用 OpenShift
oc
命令行工具,以集群管理员身份登录 OpenShift。 -
选择要使用的 OpenShift 命名空间,如
openshift-operators
或创建新命名空间。 创建一个 OpenShift secret,将 <access_token> 替换为之前从 Red Hat Quay 获取的访问令牌。例如,这会使用名为
quay-integration
的 <access_token> 以及名为token
的键来创建一个 secret:oc create secret generic quay-integration --from-literal=token=<access_token>
$ oc create secret generic quay-integration --from-literal=token=<access_token>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 结果会将新创建的私钥和证书放在指定的 secret 中。secret 将挂载到 Operator 部署中的相应 Operator 内的适当位置。
为 Operator 的 Webhook 端点创建一个服务:
quay-webhook.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 按如下方式创建 webhook 服务:
oc create -f quay-webhook.yaml
$ oc create -f quay-webhook.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 下载 webhook-create-signed-cert.sh 脚本,以便您可以使用它来生成由 Kubernetes 证书颁发机构签名的证书。
执行以下命令来请求证书:
./webhook-create-signed-cert.sh --namespace openshift-operators \ --secret quay-bridge-operator-webhook-certs \ --service quay-bridge-operator
$ ./webhook-create-signed-cert.sh --namespace openshift-operators \ --secret quay-bridge-operator-webhook-certs \ --service quay-bridge-operator
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 执行以下命令来检索 CA,并将结果格式化为一行,以便将其输入到 MutatingWebhookConfiguration 资源中:
oc get configmap -n kube-system \ extension-apiserver-authentication \ -o=jsonpath='{.data.client-ca-file}' | base64 | tr -d '\n'
$ oc get configmap -n kube-system \ extension-apiserver-authentication \ -o=jsonpath='{.data.client-ca-file}' | base64 | tr -d '\n'
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在以下 MutatingWebhookConfiguration YAML 中替换 ${CA_BUNDLE} 变量:
quay-mutating-webhook.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 将 ${CA_BUNDLE} 替换为上一步的输出。它代表您复制并粘贴到替换 ${CA_BUNDLE} 的长行。
创建 MutatingWebhookConfiguration,如下所示:
oc create -f quay-mutating-webhook.yaml
$ oc create -f quay-mutating-webhook.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在 Operator 运行时,构建的新请求将失败,因为 webserver the MutatingWebhookConfiguration 调用不可用,并且需要正确响应,以便对象保留在 etcd 中。
进入 OpenShift 控制台并安装 Quay Bridge Operator,如下所示:
- 选择 OperatorHub 并搜索 Quay Bridge Operator。
- 选择 Install
- 选择 Installation Mode (所有命名空间)、Update Channel 和 Approval Strategy (Automatic 或 Manual)。
- 选择 Subscribe
创建名为
QuayIntegration
的自定义资源(CR)。例如:quay-integration.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- clusterID 值应该在整个生态系统中唯一。这个值是可选的,默认为 openshift。
- 2
- 对于 credentialsSecretName,将
openshift-operators/quay-integration
替换为命名空间的名称,以及包含您之前创建的令牌的 secret。 - 3
- 将 QUAY_URL 替换为 Red Hat Quay 实例的主机名。
- 4
- whitelistNamespaces 是可选的。如果没有使用,Bridge Operator 会将所有命名空间同步到 Red Hat Quay,但 openshift 前缀的项目除外。在本例中,列出的命名空间(默认)现在将关联有 Red Hat Quay 组织。在此处使用任何命名空间。
- 5
- 如果 Quay 使用自签名证书,请设置属性
insecureRegistry: true
。
结果是,Red Hat Quay 中的机构应该为 OpenShift 中相关的命名空间创建。
创建
QuayIntegration
,如下所示:oc create -f quay-integration.yaml
$ oc create -f quay-integration.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
此时会创建一个 Quay 集成资源,将 OpenShift 集群链接到 Red Hat Quay 实例。
您创建的白名单命名空间现在应具有 Red Hat Quay 组织。如果要使用 oc new-app
等命令在该命名空间中创建新应用程序,您会看到为其创建的新 Red Hat Quay 存储库,而不是使用内部 registry。