2.2. 创建用于在受限网络中安装的镜像 registry
在受限网络中置备的基础架构上安装集群前,您必须创建镜像 registry。在受限网络中安装仅支持您置备的基础架构,不支持安装程序置备的基础架构。
您必须有权访问互联网,才能获取填充镜像存储库的数据。在这一流程中,您要将镜像 registry 放在可访问您的网络以及互联网的堡垒(bastion)主机上。如果您没有堡垒主机的访问权限,请使用最适合您的限制条件的方法将镜像 registry 的内容提取到受限网络中。
2.2.1. 关于镜像 registry
您可以镜像 OpenShift Container Platform registry 的内容,也可以镜像生成安装程序所需的镜像。
镜像 registry 是一个关键组件,有了它才能在受限网络中完成安装。您可以在堡垒主机上创建此镜像,该主机可同时访问互联网和您的封闭网络,也可以使用满足您的限制条件的其他方法。
由于 OpenShift Container Platform 验证发行版本有效负载完整性的方式,您的本地 registry 中的镜像引用与红帽在 Quay.io 上托管的镜像相同。在安装的 bootstrap 过程中,不论镜像是从哪个存储库提取的,镜像都必须有相同的摘要。要确保发行版有效负载一致,请将镜像镜像到您的本地存储库。
2.2.2. 准备堡垒主机
在创建镜像 registry 前,您必须准备堡垒主机。
2.2.2.1. 安装 CLI
为了可以使用命令行界面与 OpenShift Container Platform 进行交互,您需要安装 CLI。
如果安装了旧版本的 oc
,则无法使用 OpenShift Container Platform 4.2 中的所有命令。下载并安装新版本的 oc
。
流程
- 在 Red Hat OpenShift Cluster Manager 站点的 Infrastructure Provider 页面中导航至您的安装类型页面,并点击 Download Command-line Tools。
点您的操作系统和系统架构的文件夹,然后点压缩文件。
注意您可在 Linux 、Windows 或 macOS 上安装
oc
。- 将文件保存到文件系统。
- 展开压缩文件。
-
把它放到
PATH
中的一个目录下。
安装 CLI 后,就可以使用oc
命令:
$ oc <command>
2.2.3. 创建镜像 registry
创建 registry 来托管安装 OpenShift Container Platform 所需的镜像内容。要在受限网络中安装,您必须将镜像放在您的堡垒主机上。
以下流程创建一个简单的 registry,它可在 /opt/registry
文件夹中保存数据并在 podman
容器中运行。您可以使用不同的 registry 解决方案,例如 Red Hat Quay。检查以下流程以确保 registry 可以正常工作。
先决条件
- 网络上有一个 Red Hat Enterprise Linux (RHEL) 服务器充当 registry 主机。
- registry 主机可以访问互联网。
流程
在堡垒主机上,执行以下操作:
安装所需的软件包:
# yum -y install podman httpd-tools
podman
软件包提供容器软件包,用于运行 registry。httpd-tools
软件包提供htpasswd
实用程序,用于创建用户。为 registry 创建文件夹:
# mkdir -p /opt/registry/{auth,certs,data}
这些文件夹挂载到 registry 容器中。
为 registry 提供证书。如果您没有现有的可信证书颁发机构,您可以生成自签名证书:
$ cd /opt/registry/certs # openssl req -newkey rsa:4096 -nodes -sha256 -keyout domain.key -x509 -days 365 -out domain.crt
在提示符处,为证书提供所需的值:
国家/地区名称(双字母代码)
指定您所在位置的双字母 ISO 国家/地区代码。请参见 ISO 3166 国家/地区代码标准。
州或省名称(完整名称)
输入您的州或省的完整名称。
本地名称(例如,城市)
输入您的城市名称。
机构名称(例如,公司)
输入公司的名称。
组织单元名称(例如,部门)
输入您的部门名称。
通用名称(例如,您的名字或服务器主机名)
输入 registry 主机的主机名。确保您的主机名在 DNS 中,并且解析为预期的 IP 地址。
电子邮件地址
输入您的电子邮件地址。如需了解更多信息,请参阅 OpenSSL 文档中的 req 说明。
为 registry 生成使用
bcrpt
格式的用户名和密码:# htpasswd -bBc /opt/registry/auth/htpasswd <user_name> <password> 1
- 1
- 将
<user_name>
和<password>
替换为用户名和密码。
创建
mirror-registry
容器以托管 registry:# podman run --name mirror-registry -p <local_registry_host_port>:5000 \ 1 -v /opt/registry/data:/var/lib/registry:z \ -v /opt/registry/auth:/auth:z \ -e "REGISTRY_AUTH=htpasswd" \ -e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" \ -e REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd \ -v /opt/registry/certs:/certs:z \ -e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/domain.crt \ -e REGISTRY_HTTP_TLS_KEY=/certs/domain.key \ -e REGISTRY_COMPATIBILITY_SCHEMA1_ENABLED=true \ -d docker.io/library/registry:2
- 1
- 对于
<local_registry_host_port>
,请指定您的镜像 registry 用于提供内容的端口。
为 registry 打开所需的端口:
# firewall-cmd --add-port=<local_registry_host_port>/tcp --zone=internal --permanent 1 # firewall-cmd --add-port=<local_registry_host_port>/tcp --zone=public --permanent 2 # firewall-cmd --reload
将自签名证书添加到您的可信证书列表中:
# cp /opt/registry/certs/domain.crt /etc/pki/ca-trust/source/anchors/ # update-ca-trust
您必须信任您的证书,才能在镜像过程中登录到 registry。
确认 registry 可用:
$ curl -u <user_name>:<password> -k https://<local_registry_host_name>:<local_registry_host_port>/v2/_catalog 1 {"repositories":[]}
- 1
- 对于
<user_name>
和<password>
,指定 registry 的用户名和密码。对于<local_registry_host_name>
,请指定在您的证书中指定的 registry 域名,如registry.example.com
。对于<local_registry_host_port>
,请指定您的镜像 registry 用于提供内容的端口。
如果命令输出显示一个空存储库,则您的 registry 已经可用。
2.2.4. 在 pull secret 中添加 registry
在受限网络中安装 OpenShift Container Platform 集群前,需要为 OpenShift Container Platform 集群修改 pull secret 来使用本地 registry。
先决条件
- 配置了一个镜像(mirror) registry 在受限网络中使用。
流程
在堡垒主机上完成以下步骤:
-
从 Red Hat OpenShift Cluster Manager 站点的 Pull Secret 页面下载
registry.redhat.io
的 pull secret。 为您的镜像 registry 生成 base64 编码的用户名和密码或令牌:
$ echo -n '<user_name>:<password>' | base64 -w0 1 BGVtbYk3ZHAtqXs=
- 1
- 通过
<user_name>
和<password>
指定 registry 的用户名和密码。
以 JSON 格式创建您的 pull secret 副本:
$ cat ./pull-secret.text | jq . > <path>/<pull-secret-file>1
- 1
- 指定到存储 pull secret 的文件夹的路径,以及您创建的 JSON 文件的名称。
该文件类似于以下示例:
{ "auths": { "cloud.openshift.com": { "auth": "b3BlbnNo...", "email": "you@example.com" }, "quay.io": { "auth": "b3BlbnNo...", "email": "you@example.com" }, "registry.connect.redhat.com": { "auth": "NTE3Njg5Nj...", "email": "you@example.com" }, "registry.redhat.io": { "auth": "NTE3Njg5Nj...", "email": "you@example.com" } } }
编辑新文件并添加描述 registry 的部分:
"auths": { ... "<local_registry_host_name>:<local_registry_host_port>": { 1 "auth": "<credentials>", 2 "email": "you@example.com" }, ...
该文件类似于以下示例:
{ "auths": { "cloud.openshift.com": { "auth": "b3BlbnNo...", "email": "you@example.com" }, "quay.io": { "auth": "b3BlbnNo...", "email": "you@example.com" }, "registry.connect.redhat.com": { "auth": "NTE3Njg5Nj...", "email": "you@example.com" }, "<local_registry_host_name>:<local_registry_host_port>": { "auth": "<credentials>", "email": "you@example.com" }, "registry.redhat.io": { "auth": "NTE3Njg5Nj...", "email": "you@example.com" } } }
2.2.5. 镜像 OpenShift Container Platform 镜像存储库
镜像要在集群安装或升级过程中使用的 OpenShift Container Platform 镜像存储库。
先决条件
- 您已将镜像 registry 配置为在受限网络中使用,并可访问您配置的证书和凭证。
- 您已从 Red Hat OpenShift Cluster Manager 站点的 Pull Secret页面下载了 pull secret,并已修改为包含镜像存储库身份验证信息。
流程
在堡垒主机上完成以下步骤:
- 查看 OpenShift Container Platform 下载页面,以确定您要安装的 OpenShift Container Platform 版本。
设置所需的环境变量:
$ export OCP_RELEASE=<release_version> 1 $ export LOCAL_REGISTRY='<local_registry_host_name>:<local_registry_host_port>' 2 $ export LOCAL_REPOSITORY='<repository_name>' 3 $ export PRODUCT_REPO='openshift-release-dev' 4 $ export LOCAL_SECRET_JSON='<path_to_pull_secret>' 5 $ export RELEASE_NAME="ocp-release" 6
- 1
- 对于
<release_version>
,请指定要安装的 OpenShift Container Platform 版本号,如4.2.0
。 - 2
- 对于
<local_registry_host_name>
,请指定镜像存储库的 registry 域名;对于<local_registry_host_port>
,请指定用于提供内容的端口。 - 3
- 对于
<repository_name>
,请指定要在 registry 中创建的存储库名称,如ocp4/openshift4
。 - 4
- 要镜像的存储库。对于生产环境版本,必须指定
openshift-release-dev
。 - 5
- 对于
<path_to_pull_secret>
,请指定您创建的镜像 registry 的 pull secret 的绝对路径和文件名。 - 6
- 发行版本镜像。对于生产环境版本,您必须指定
ocp-release
。
镜像存储库:
$ oc adm -a ${LOCAL_SECRET_JSON} release mirror \ --from=quay.io/${PRODUCT_REPO}/${RELEASE_NAME}:${OCP_RELEASE} \ --to=${LOCAL_REGISTRY}/${LOCAL_REPOSITORY} \ --to-release-image=${LOCAL_REGISTRY}/${LOCAL_REPOSITORY}:${OCP_RELEASE}
该命令将发行信息提取为摘要,其输出包括安装集群时所需的
imageContentSources
数据。-
记录上一命令输出中的
imageContentSources
部分。您的镜像信息与您的镜像存储库相对应,您必须在安装过程中将imageContentSources
部分添加到install-config.yaml
文件中。 要创建基于您镜像内容的安装程序,请提取内容并将其固定到发行版中:
$ oc adm -a ${LOCAL_SECRET_JSON} release extract --command=openshift-install "${LOCAL_REGISTRY}/${LOCAL_REPOSITORY}:${OCP_RELEASE}"
重要要确保将正确的镜像用于您选择的 OpenShift Container Platform 版本,您必须从镜像内容中提取安装程序。
您必须在有活跃互联网连接的机器上执行这个步骤。
2.2.6. 使用带有备用或经过镜像的 registry 的 Samples Operator 镜像流
OpenShift 命名空间中大多数由 Samples Operator 管理的镜像流指向位于 registry.redhat.io 上红帽 registry 中的镜像。镜像功能不适用于这些镜像流。
jenkins
、jenkins-agent-maven
和 jenkins-agent-nodejs
镜像流的确来自安装有效负载,并由 Samples Operator 管理,因此这些镜像流不需要进一步的镜像操作。
将 Sample Operator 配置文件中的 samplesRegistry
字段设置为 registry.redhat.io 有很多冗余,因为它已经定向到 registry.redhat.io,只用于 Jenkins 镜像和镜像流。它还会破坏 Jenkins 镜像流的安装有效负载。
Samples Operator 禁止将以下 registry 用于 Jenkins 镜像流:
cli
、installer
、must-gather
和 test
镜像流虽然属于安装有效负载的一部分,但不由 Samples Operator 管理。此流程中不涉及这些镜像流。
先决条件
-
使用具有
cluster-admin
角色的用户访问集群。 - 为您的镜像 registry 创建 pull secret。
流程
访问被镜像(mirror)的特定镜像流的镜像,例如:
$ oc get is <imagestream> -n openshift -o json | jq .spec.tags[].from.name | grep registry.redhat.io
将 registry.redhat.io 中与您在受限网络环境中需要的任何镜像流关联的镜像,镜像 (mirror) 成一个定义的镜像 (mirror):
$ oc image mirror registry.redhat.io/rhscl/ruby-25-rhel7:latest ${MIRROR_ADDR}/rhscl/ruby-25-rhel7:latest
在集群的镜像配置对象中,为镜像添加所需的可信 CA:
$ oc create configmap registry-config --from-file=${MIRROR_ADDR_HOSTNAME}..5000=$path/ca.crt -n openshift-config $ oc patch image.config.openshift.io/cluster --patch '{"spec":{"additionalTrustedCA":{"name":"registry-config"}}}' --type=merge
更新 Samples Operator 配置对象中的
samplesRegistry
字段,使其包含镜像配置中定义的镜像位置的hostname
部分:$ oc get configs.samples.operator.openshift.io -n openshift-cluster-samples-operator
注意这是必要的,因为镜像流导入过程在此刻不使用镜像(mirro)或搜索机制。
将所有未镜像的镜像流添加到 Samples Operator 配置对象的
skippedImagestreams
字段。或者,如果您不想支持任何示例镜像流,请在 Samples Operator 配置对象中将 Samples Operator 设置为Removed
。注意镜像流导入失败两小时后,任何没有跳过的未镜像的镜像流,或者如果 Samples Operator 没有更改为
Removed
,都会导致 Samples Operator 报告Degraded
状态。OpenShift 命名空间中的多个模板都引用镜像流。因此,使用
Removed
清除镜像流和模板,将避免在因为缺少镜像流而导致镜像流和模板无法正常工作时使用它们。
后续步骤
- 在您在受限网络中置备的基础架构上安装集群,如 VMware vSphere、裸机或 Amazon Web Services。