This documentation is for a release that is no longer maintained
See documentation for the latest supported version 3 or the latest supported version 4.4.9. 在受限网络中使用 Operator Lifecycle Manager
对于在受限网络中安装的 OpenShift Container Platform 集群(也称为 断开连接的集群 ),Operator Lifecycle Manager(OLM)默认无法访问托管在远程 registry 上的红帽提供的 OperatorHub 源,因为这些远程源需要足够的互联网连接。
但是,作为集群管理员,如果您有一个有完全互联网访问的工作站,则仍可以让集群在受限网络中使用 OLM。工作站需要完全访问互联网来拉取远程 OperatorHub 内容,用于准备远程源的本地镜像,并将内容推送到镜像 registry。
镜像 registry 可以位于堡垒主机上,它需要连接到您的工作站和断开连接的集群,或者一个完全断开连接的或 airgapped 主机,这需要可移动介质物理将镜像内容移到断开连接的环境中。
本指南描述了在受限网络中启用 OLM 所需的流程:
- 为 OLM 禁用默认远程 OperatorHub 源。
- 使用有完全互联网访问的工作站来创建并推送 OperatorHub 内容的本地镜像到镜像 registry。
- 将 OLM 配置为从镜像 registry 上的本地源而不是默认的远程源安装和管理 Operator。
在受限网络中启用 OLM 后,您可以继续使用不受限制的工作站在发布新版 Operator 时保持本地 OperatorHub 源的更新。
虽然 OLM 可以从本地源管理 Operator,但给定 Operator 在受限网络中能否成功运行仍取决于 Operator 本身。Operator 必须:
- 
							在 ClusterServiceVersion(CSV) 对象的relatedImages参数中列出所有相关的镜像,或 Operator 执行时可能需要的其他容器镜像。
- 通过摘要 (SHA) 而不是标签来引用所有指定的镜像。
您可以通过选择 Infrastucture Features 下的 Disconnected 过滤器,在 Red Hat Ecosystem Catalog 中搜索支持以断开连接模式运行的红帽 Operator 列表:
4.9.1. 先决条件
- 
							以具有 cluster-admin权限的用户身份登录 OpenShift Container Platform 集群。
- 
							如果要修剪默认目录,且只有选择地镜像部分 Operator,请安装 opmCLI。
如果您在 IBM Z 上的受限网络中使用 OLM,则必须至少为放置 registry 的目录分配 12 GB 的存储空间。
4.9.2. 禁用默认的 OperatorHub 源
在 OpenShift Container Platform 安装过程中,默认为 OperatorHub 配置由红帽和社区项目提供的源内容的 operator 目录。在受限网络环境中,必须以集群管理员身份禁用默认目录。然后,您可以将 OperatorHub 配置为使用本地目录源。
流程
- 通过在 - OperatorHub对象中添加- disableAllDefaultSources: true 来禁用默认目录的源:- oc patch OperatorHub cluster --type json \ -p '[{"op": "add", "path": "/spec/disableAllDefaultSources", "value": true}]'- $ oc patch OperatorHub cluster --type json \ -p '[{"op": "add", "path": "/spec/disableAllDefaultSources", "value": true}]'- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
					或者,您可以使用 Web 控制台管理目录源。在 Administration 
4.9.3. 修剪索引镜像
基于 Operator Bundle Format 的索引镜像是 Operator 目录的容器化快照。您可以修剪除指定的软件包列表以外的所有索引,创建只包含您想要的 Operator 的源索引副本。
当将 Operator Lifecycle Manager(OLM)配置为在受限网络 OpenShift Container Platform 集群上使用镜像内容时,如果您只想从默认目录中镜像一部分 Operator,请使用此修剪方法。
					对于此过程中的步骤,目标 registry 是一个存在的镜像 registry,您的具有无限网络访问权限的工作站可以访问该 registry。本例还显示修剪默认 redhat-operators 目录的索引镜像,但所有索引镜像的过程都是一样的。
				
先决条件
- 没有网络访问限制的工作站
- 
							podman版本 1.9.3+
- 
							grpcurl(第三方命令行工具)
- 
							opm版本 1.18.0+
- 访问支持 Docker v2-2 的 registry 重要- OpenShift Container Platform 集群的内部 registry 不能用作目标 registry,因为它不支持没有标签的推送(在镜像过程中需要这个功能)。 
流程
- 通过 - registry.redhat.io进行身份验证:- podman login registry.redhat.io - $ podman login registry.redhat.io- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 通过目标 registry 进行身份验证: - podman login <target_registry> - $ podman login <target_registry>- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 确定您要包括在您的修剪索引中的软件包列表。 - 运行您要修剪容器中的源索引镜像。例如: - podman run -p50051:50051 \ -it registry.redhat.io/redhat/redhat-operator-index:v4.8- $ podman run -p50051:50051 \ -it registry.redhat.io/redhat/redhat-operator-index:v4.8- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 输出示例 - Trying to pull registry.redhat.io/redhat/redhat-operator-index:v4.8... Getting image source signatures Copying blob ae8a0c23f5b1 done ... INFO[0000] serving registry database=/database/index.db port=50051 - Trying to pull registry.redhat.io/redhat/redhat-operator-index:v4.8... Getting image source signatures Copying blob ae8a0c23f5b1 done ... INFO[0000] serving registry database=/database/index.db port=50051- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 在一个单独的终端会话中,使用 - grpcurl命令获取由索引提供的软件包列表:- grpcurl -plaintext localhost:50051 api.Registry/ListPackages > packages.out - $ grpcurl -plaintext localhost:50051 api.Registry/ListPackages > packages.out- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 检查 - package.out文件,确定要保留在此列表中的哪个软件包名称。例如:- 软件包列表片断示例 - Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 
									在您执行 podman run命令的终端会话中,按 Ctrl 和 C 停止容器进程。
 
- 运行以下命令来修剪指定软件包以外的所有源索引: - opm index prune \ -f registry.redhat.io/redhat/redhat-operator-index:v4.8 \ -p advanced-cluster-management,jaeger-product,quay-operator \ [-i registry.redhat.io/openshift4/ose-operator-registry:v4.8] \ -t <target_registry>:<port>/<namespace>/redhat-operator-index:v4.8- $ opm index prune \ -f registry.redhat.io/redhat/redhat-operator-index:v4.8 \- 1 - -p advanced-cluster-management,jaeger-product,quay-operator \- 2 - [-i registry.redhat.io/openshift4/ose-operator-registry:v4.8] \- 3 - -t <target_registry>:<port>/<namespace>/redhat-operator-index:v4.8- 4 - Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 运行以下命令将新索引镜像推送到目标 registry: - podman push <target_registry>:<port>/<namespace>/redhat-operator-index:v4.8 - $ podman push <target_registry>:<port>/<namespace>/redhat-operator-index:v4.8- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 其中 - <namespace>是 registry 上的任何现有命名空间。例如,您可以创建一个- olm-mirror命名空间来将所有镜像的内容推送到。
4.9.4. 对 Operator 目录进行镜像(mirror)
					您可以使用 oc adm catalog mirror 命令将红帽提供的目录或自定义目录的 Operator 内容镜像到容器镜像 registry 中。目标 registry 必须支持 Docker v2-2。对于受限网络中的集群,此 registry 可以是集群有网络访问权限的 registry,如在受限网络集群安装过程中创建的镜像 registry。
				
OpenShift Container Platform 集群的内部 registry 不能用作目标 registry,因为它不支持没有标签的推送(在镜像过程中需要这个功能)。
					oc adm catalog mirror 命令还会自动将在镜像过程中指定的索引镜像(无论是红帽提供的索引镜像还是您自己的自定义构建索引镜像)镜像到目标 registry。然后,您可以使用镜像的索引镜像创建一个目录源,允许 Operator Lifecycle Manager(OLM)将镜像目录加载到 OpenShift Container Platform 集群。
				
先决条件
- 没有网络访问限制的工作站
- 
							podman1.9.3 或更高版本。
- 访问支持 Docker v2-2 的镜像 registry。
- 
							决定镜像 registry 上用于存储已镜像 Operator 内容的镜像 registry 内容。例如,您可以创建一个 olm-mirror命名空间。
- 如果您的镜像 registry 无法访问互联网,请将可移动介质连接到您的没有网络访问限制的工作站。
- 如果您正在使用私有 registry,包括 - registry.redhat.io,请将- REG_CREDS环境变量设置为 registry 凭证的文件路径,以便在后续步骤中使用。例如,对于- podmanCLI:- REG_CREDS=${XDG_RUNTIME_DIR}/containers/auth.json- $ REG_CREDS=${XDG_RUNTIME_DIR}/containers/auth.json- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
流程
- 如果要镜像红帽提供的目录,请在具有无网络访问限制的工作站中运行以下命令,以便与 - registry.redhat.io进行身份验证:- podman login registry.redhat.io - $ podman login registry.redhat.io- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- oc adm catalog mirror命令提取索引镜像的内容,以生成镜像所需的清单。命令的默认行为会生成清单,然后会自动将索引镜像以及索引镜像本身中的所有镜像内容镜像(mirror)到您的镜像 registry。另外,如果您的镜像 registry 位于完全断开连接的主机上,或者断开连接的或 airgapped 主机上,您可以首先将内容镜像到可移动介质,将介质移到断开连接的环境中,然后将内容从介质镜像到 registry。- 选项 A: 如果您的镜像 registry 与您的没有网络访问限制的工作站位于同一个网络中,请在您的工作站中执行以下操作: - 如果您的镜像 registry 需要身份验证,请运行以下命令登录到 registry: - podman login <mirror_registry> - $ podman login <mirror_registry>- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 运行以下命令镜像内容: - Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 1
- 指定您要镜像的目录的索引镜像。例如,这可能是之前创建的已修剪索引镜像,也可以是默认目录的源索引镜像之一,如registry.redhat.io/redhat/redhat-operator-index:v4.8。
- 2
- 指定要将 Operator 内容镜像到的目标 registry 和命名空间的完全限定域名(FQDN),其中<namespace>是 registry 上的任何现有命名空间。例如,您可以创建一个olm-mirror命名空间来将所有镜像的内容推送到。
- 3
- 可选:如果需要,指定 registry 凭证文件的位置。registry.redhat.io需要{REG_CREDS}。
- 4
- 可选:如果您不想为目标 registry 配置信任,请添加--insecure标志。
- 5
- 可选:在有多个变体可用时,指定索引镜像的平台和架构。镜像被传递为'<platform>/<arch>[/<variant>]'。这不适用于索引引用的镜像。有效值为linux/amd64、linux/ppc64le、linux/s390x和.*
- 6
- 可选:只生成镜像所需的清单,但并不实际将镜像内容镜像到 registry。这个选项对检查哪些将被镜像(mirror)非常有用,如果您只需要一小部分软件包,可以对映射列表进行修改。然后,您可以使用带有oc image mirror命令的mapping.txt文件来在以后的步骤中镜像修改的镜像列表。此标志仅用于从目录中对内容进行高级选择性镜像;opm index prune命令适用于大多数目录管理用例,如果之前用来修剪索引镜像。
 - 输出示例 - src image has index label for database path: /database/index.db using database path mapping: /database/index.db:/tmp/153048078 wrote database to /tmp/153048078 ... wrote mirroring manifests to manifests-redhat-operator-index-1614211642 - src image has index label for database path: /database/index.db using database path mapping: /database/index.db:/tmp/153048078 wrote database to /tmp/153048078- 1 - ... wrote mirroring manifests to manifests-redhat-operator-index-1614211642- 2 - Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 注意- Red Hat Quay 不支持嵌套存储库。因此,运行 - oc adm catalog mirror命令会失败,并显示- 401未授权错误。作为临时解决方案,您可以在运行- oc adm catalog mirror命令时使用- --max-components=2选项来禁用嵌套存储库的创建。有关这个临时解决方案的更多信息,请参阅使用带有 Quay registry 知识库文章的 catalog mirror 命令时出现 Unauthorized 错误。
 
- 选项 B:如果您的镜像 registry 位于断开连接的主机上,请执行以下操作。 - 在您的工作站中运行以下命令,且没有网络访问权限将内容镜像到本地文件中: - Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 输出示例 - Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 
											将当前目录中生成的 v2/目录复制到可移动介质中。
- 物理删除该介质并将其附加到断开连接的环境中可访问镜像 registry 的主机。
- 如果您的镜像 registry 需要身份验证,请在断开连接的环境中的主机上运行以下命令以登录到 registry: - podman login <mirror_registry> - $ podman login <mirror_registry>- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 从包含 - v2/目录的父目录运行以下命令,将镜像从本地文件上传到镜像 registry:- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 注意- Red Hat Quay 不支持嵌套存储库。因此,运行 - oc adm catalog mirror命令会失败,并显示- 401未授权错误。作为临时解决方案,您可以在运行- oc adm catalog mirror命令时使用- --max-components=2选项来禁用嵌套存储库的创建。有关这个临时解决方案的更多信息,请参阅使用带有 Quay registry 知识库文章的 catalog mirror 命令时出现 Unauthorized 错误。
- 再次运行 - oc adm catalog mirror命令。使用新镜像的索引镜像作为源,以及上一步中与目标相同的镜像 registry 命名空间:- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 1
- 此步骤需要--manifests-only标志,以便该命令不会再次复制所有镜像的内容。
 重要- 这一步是必需的,因为上一步中生成的 - imageContentSourcePolicy.yaml文件中的镜像映射必须从本地路径更新为有效的镜像位置。如果不这样做,会在稍后的步骤中创建- ImageContentSourcePolicy对象时会导致错误。
 
 
- 将内容镜像到 registry 后,检查当前目录中生成的清单目录。 注意- 清单目录名会在以后的步骤中使用。 - 如果您在上一步中将内容镜像到同一网络上的 registry,则目录名称采用以下格式: - manifests-<index_image_name>-<random_number> - manifests-<index_image_name>-<random_number>- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 如果您在上一步中将内容镜像到断开连接的主机上的 registry,则目录名称采用以下格式: - manifests-index/<namespace>/<index_image_name>-<random_number> - manifests-index/<namespace>/<index_image_name>-<random_number>- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - manifests 目录包含以下文件,其中的一些文件可能需要进一步修改: - catalogSource.yaml文件是- CatalogSource对象的基本定义,它预先填充索引镜像标签及其他相关元数据。此文件可原样使用,或进行相应修改来在集群中添加目录源。重要- 如果将内容镜像到本地文件,您必须修改 catalogSource - .yaml文件,从- metadata.name字段中删除任何反斜杠(- /)字符。否则,当您试图创建对象时,会失败并显示 "invalid resource name” 错误。
- 用来定义 - ImageContentSourcePolicy对象的- imageContentSourcePolicy.yaml,它可以将节点配置为在 Operator 清单中存储的镜像(image)引用和镜像 (mirror) 的 registry 间进行转换。注意- 如果您的集群使用 - ImageContentSourcePolicy对象来配置存储库镜像,则只能将全局 pull secret 用于镜像 registry。您不能在项目中添加 pull secret。
- mapping.txt文件,在其中包含所有源镜像,并将它们映射到目标 registry。此文件与- oc image mirror命令兼容,可用于进一步自定义镜像(mirror)配置。重要- 如果您在镜像过程中使用 - --manifests-only标志,并希望进一步调整要镜像的软件包子集,请参阅 OpenShift Container Platform 4.7 文档中的镜像软件包清单格式目录镜像流程中有关修改- mapping.txt文件并使用- oc image mirror命令的步骤。在进行了这些操作后,您可以继续这个过程。
 
- 在可访问断开连接的集群的主机上,运行以下命令来指定 manifests 目录中的 - imageContentSourcePolicy.yaml文件,创建- ImageContentSourcePolicy(ICSP) 对象:- oc create -f <path/to/manifests/dir>/imageContentSourcePolicy.yaml - $ oc create -f <path/to/manifests/dir>/imageContentSourcePolicy.yaml- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 其中 - <path/to/manifests/dir>是镜像内容的 manifests 目录的路径。- 现在,您可以创建一个 - CatalogSource来引用您的镜像索引镜像和 Operator 内容。
4.9.5. 从索引镜像创建目录
您可以从索引镜像创建 Operator 目录,并将其应用到 OpenShift Container Platform 集群,供 Operator Lifecycle Manager(OLM)使用。
先决条件
- 构建并推送到 registry 的索引镜像。
流程
- 创建一个 - CatalogSource对象来引用索引镜像。如果使用- oc adm catalog mirror命令将目录镜像到目标 registry,您可以使用生成的- catalogSource.yaml文件作为起点。- 根据您的规格修改以下内容,并将它保存为 - catalogSource.yaml文件:- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 使用该文件创建 - CatalogSource对象:- oc apply -f catalogSource.yaml - $ oc apply -f catalogSource.yaml- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
 
- 确定成功创建以下资源。 - 检查 pod: - oc get pods -n openshift-marketplace - $ oc get pods -n openshift-marketplace- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 输出示例 - NAME READY STATUS RESTARTS AGE my-operator-catalog-6njx6 1/1 Running 0 28s marketplace-operator-d9f549946-96sgr 1/1 Running 0 26h - NAME READY STATUS RESTARTS AGE my-operator-catalog-6njx6 1/1 Running 0 28s marketplace-operator-d9f549946-96sgr 1/1 Running 0 26h- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 检查目录源: - oc get catalogsource -n openshift-marketplace - $ oc get catalogsource -n openshift-marketplace- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 输出示例 - NAME DISPLAY TYPE PUBLISHER AGE my-operator-catalog My Operator Catalog grpc 5s - NAME DISPLAY TYPE PUBLISHER AGE my-operator-catalog My Operator Catalog grpc 5s- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 检查软件包清单: - oc get packagemanifest -n openshift-marketplace - $ oc get packagemanifest -n openshift-marketplace- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 输出示例 - NAME CATALOG AGE jaeger-product My Operator Catalog 93s - NAME CATALOG AGE jaeger-product My Operator Catalog 93s- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
 
现在,您可以在 OpenShift Container Platform Web 控制台中通过 OperatorHub 安装 Operator。
4.9.6. 更新索引镜像
在将 OperatorHub 配置为使用引用自定义索引镜像的目录源后,集群管理员可通过将捆绑包镜像添加到索引镜像来保持其集群上的可用 Operator 最新状态。
					您可以使用 opm index add 命令来更新存在的索引镜像。对于受限网络,还必须将更新的内容重新镜像到集群。
				
先决条件
- 
							opm版本 1.12.3+
- 
							podman版本 1.9.3+
- 构建并推送到 registry 的索引镜像。
- 引用索引镜像的现有目录源。
流程
- 通过添加捆绑包镜像来更新现有索引: - opm index add \ --bundles <registry>/<namespace>/<new_bundle_image>@sha256:<digest> \ --from-index <registry>/<namespace>/<existing_index_image>:<existing_tag> \ --tag <registry>/<namespace>/<existing_index_image>:<updated_tag> \ --pull-tool podman- $ opm index add \ --bundles <registry>/<namespace>/<new_bundle_image>@sha256:<digest> \- 1 - --from-index <registry>/<namespace>/<existing_index_image>:<existing_tag> \- 2 - --tag <registry>/<namespace>/<existing_index_image>:<updated_tag> \- 3 - --pull-tool podman- 4 - Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 其中: - <registry>
- 
										指定 registry 的主机名,如 quay.io或mirror.example.com。
- <namespace>
- 
										指定 registry 的命名空间,如 ocs-dev或abc。
- <new_bundle_image>
- 
										指定要添加到 registry 的新捆绑包镜像,如 ocs-operator。
- <digest>
- 
										指定捆绑包镜像的 SHA 镜像 ID 或摘要,如 c7f11097a628f092d8bad148406aa0e0951094a03445fd4bc0775431ef683a41。
- <existing_index_image>
- 
										指定之前推送的镜像,如 abc-redhat-operator-index。
- <existing_tag>
- 
										指定之前推送的镜像标签,如 4.8。
- <updated_tag>
- 
										指定要应用到更新的索引镜像的镜像标签,如 4.8.1。
 - 示例命令 - opm index add \ --bundles quay.io/ocs-dev/ocs-operator@sha256:c7f11097a628f092d8bad148406aa0e0951094a03445fd4bc0775431ef683a41 \ --from-index mirror.example.com/abc/abc-redhat-operator-index:4.8 \ --tag mirror.example.com/abc/abc-redhat-operator-index:4.8.1 \ --pull-tool podman- $ opm index add \ --bundles quay.io/ocs-dev/ocs-operator@sha256:c7f11097a628f092d8bad148406aa0e0951094a03445fd4bc0775431ef683a41 \ --from-index mirror.example.com/abc/abc-redhat-operator-index:4.8 \ --tag mirror.example.com/abc/abc-redhat-operator-index:4.8.1 \ --pull-tool podman- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 推送更新的索引镜像: - podman push <registry>/<namespace>/<existing_index_image>:<updated_tag> - $ podman push <registry>/<namespace>/<existing_index_image>:<updated_tag>- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 按照镜像 Operator 目录流程中的步骤来镜像更新的内容。但是,当进入创建 - ImageContentSourcePolicy(ICSP)对象的步骤时,请使用- oc replace命令而不是- oc create命令。例如:- oc replace -f ./manifests-redhat-operator-index-<random_number>/imageContentSourcePolicy.yaml - $ oc replace -f ./manifests-redhat-operator-index-<random_number>/imageContentSourcePolicy.yaml- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 这一更改是必需的,因为对象已存在且必须更新。 注意- 通常, - oc apply命令可用于更新之前使用- oc apply创建的现有对象。但是,由于有关 ICSP 对象中的- metadata.annotations字段大小的已知问题,- oc replace命令当前必须用于此步骤。
- Operator Lifecycle Manager(OLM)会在常规时间段内自动轮询目录源中引用的索引镜像,验证是否已成功添加新软件包: - oc get packagemanifests -n openshift-marketplace - $ oc get packagemanifests -n openshift-marketplace- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow