From ac9f6b9dffff4e323f3da514db442eac82ca36d5 Mon Sep 17 00:00:00 2001 From: Michael Burke Date: Tue, 14 Sep 2021 15:49:27 -0400 Subject: [PATCH] Create conneted to disconnected cluster document --- _topic_map.yml | 2 + images/create-nodes-okd.png | Bin 0 -> 70006 bytes ...ected-to-disconnected-config-registry.adoc | 190 ++++++++++++++++++ .../connected-to-disconnected-disconnect.adoc | 11 + ...nnected-to-disconnected-mirror-images.adoc | 110 ++++++++++ ...nected-to-disconnected-prepare-mirror.adoc | 74 +++++++ ...cted-to-disconnected-restore-insights.adoc | 44 ++++ .../connected-to-disconnected-restore.adoc | 78 +++++++ modules/connected-to-disconnected-verify.adoc | 52 +++++ .../connected-to-disconnected.adoc | 66 ++++++ 10 files changed, 627 insertions(+) create mode 100644 images/create-nodes-okd.png create mode 100644 modules/connected-to-disconnected-config-registry.adoc create mode 100644 modules/connected-to-disconnected-disconnect.adoc create mode 100644 modules/connected-to-disconnected-mirror-images.adoc create mode 100644 modules/connected-to-disconnected-prepare-mirror.adoc create mode 100644 modules/connected-to-disconnected-restore-insights.adoc create mode 100644 modules/connected-to-disconnected-restore.adoc create mode 100644 modules/connected-to-disconnected-verify.adoc create mode 100644 post_installation_configuration/connected-to-disconnected.adoc diff --git a/_topic_map.yml b/_topic_map.yml index 6642aeda31c2..0c48cd0db9d3 100644 --- a/_topic_map.yml +++ b/_topic_map.yml @@ -459,6 +459,8 @@ Topics: File: preparing-for-users - Name: Configuring alert notifications File: configuring-alert-notifications +- Name: Converting a connected cluster to a disconnected cluster + File: connected-to-disconnected --- Name: Updating clusters Dir: updating diff --git a/images/create-nodes-okd.png b/images/create-nodes-okd.png new file mode 100644 index 0000000000000000000000000000000000000000..2abc14c89aca10b994162eadd7f736356ed67d71 GIT binary patch literal 70006 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 <1> +---- +<1> Provide the path to the new pull secret file. ++ +For example: ++ +[source,terminal] +---- +$ oc set data secret/pull-secret -n openshift-config --from-file=.dockerconfigjson=.mirrorsecretconfigjson +---- + +. Add the CA-signed mirror registry server certificate to the nodes in the cluster: + +.. Create a config map that includes the server certificate for the mirror registry ++ +[source,terminal] +---- +$ oc create configmap --from-file=..=$path/ca.crt -n openshift-config +---- ++ +For example: ++ +[source,terminal] +---- +S oc create configmap registry-config --from-file=mirror.registry.com..443=/root/certs/ca-chain.cert.pem -n openshift-config +---- + +.. Use the config map to update the `image.config.openshift.io/cluster` custom resource (CR). {product-title} applies the changes to this CR to all nodes in the cluster: ++ +[source,terminal] +---- +$ oc patch image.config.openshift.io/cluster --patch '{"spec":{"additionalTrustedCA":{"name":""}}}' --type=merge +---- ++ +For example: ++ +[source,terminal] +---- +$ oc patch image.config.openshift.io/cluster --patch '{"spec":{"additionalTrustedCA":{"name":"registry-config"}}}' --type=merge +---- + +. Create an ICSP to redirect container pull requests from the online registries to the mirror registry: + +.. Create the `ImageContentSourcePolicy` custom resource: ++ +[source,yaml] +---- +apiVersion: operator.openshift.io/v1alpha1 +kind: ImageContentSourcePolicy +metadata: + name: mirror-ocp +spec: + repositoryDigestMirrors: + - mirrors: + - mirror.registry.com:443/ocp/release <1> + source: quay.io/openshift-release-dev/ocp-release <2> + - mirrors: + - mirror.registry.com:443/ocp/release + source: quay.io/openshift-release-dev/ocp-v4.0-art-dev +---- +<1> Specifies the name of the mirror image registry and repository. +<2> Specifies the online registry and repository containing the content that is mirrored. + +.. Create the ICSP object: ++ +[source,terminal] +---- +$ oc create -f registryrepomirror.yaml +---- ++ +.Example output +[source,terminal] +---- +imagecontentsourcepolicy.operator.openshift.io/mirror-ocp created +---- ++ +{product-title} applies the changes to this CR to all nodes in the cluster. + +. Verify that the credentials, CA, and ICSP for mirror registry were added: + +.. Log into a node: ++ +[source,terminal] +---- +$ oc debug node/ +---- + +.. Set `/host` as the root directory within the debug shell: ++ +[source,terminal] +---- +sh-4.4# chroot /host +---- + +.. Check the `config.json` file for the credentials: ++ +[source,terminal] +---- +sh-4.4# cat /var/lib/kubelet/config.json +---- ++ +.Example output +[source,terminal] +---- +{"auths":{"brew.registry.redhat.io":{"xx=="},"brewregistry.stage.redhat.io":{"auth":"xxx=="},"mirror.registry.com:443":{"auth":"xx="}}} <1> +---- +<1> Ensure that the mirror registry and credentials are present. + +.. Change to the `certs.d` directory ++ +[source,terminal] +---- +sh-4.4# cd /etc/docker/certs.d/ +---- + +.. List the certificates in the `certs.d` directory: ++ +[source,terminal] +---- +sh-4.4# ls +---- ++ +.Example output +---- +image-registry.openshift-image-registry.svc.cluster.local:5000 +image-registry.openshift-image-registry.svc:5000 +mirror.registry.com:443 <1> +---- +<1> Ensure that the mirror registry is in the list. + +.. Check that the ICSP added the mirror registry to the `registries.conf` file: ++ +[source,terminal] +---- +sh-4.4# cat /etc/containers/registries.conf +---- ++ +.Example output ++ +[source,terminal] +---- +unqualified-search-registries = ["registry.access.redhat.com", "docker.io"] + +[[registry]] + prefix = "" + location = "quay.io/openshift-release-dev/ocp-release" + mirror-by-digest-only = true + + [[registry.mirror]] + location = "mirror.registry.com:443/ocp/release" + +[[registry]] + prefix = "" + location = "quay.io/openshift-release-dev/ocp-v4.0-art-dev" + mirror-by-digest-only = true + + [[registry.mirror]] + location = "mirror.registry.com:443/ocp/release" +---- ++ +The `registry.mirror` parameters indicate that the mirror registry is searched before the original registry. + +.. Exit the node. ++ +[source,terminal] +---- +sh-4.4# exit +---- + diff --git a/modules/connected-to-disconnected-disconnect.adoc b/modules/connected-to-disconnected-disconnect.adoc new file mode 100644 index 000000000000..cdc2f8d77d58 --- /dev/null +++ b/modules/connected-to-disconnected-disconnect.adoc @@ -0,0 +1,11 @@ +// Module included in the following assemblies: +// +// * post_installation_configuration/connected-to-disconnected.adoc + +[id="connected-to-disconnected-disconnect_{context}"] += Disconnect the cluster from the network + +After mirroring all the required repositories and configuring your cluster to work as a disconnected cluster, you can disconnect the cluster from the network. + + + diff --git a/modules/connected-to-disconnected-mirror-images.adoc b/modules/connected-to-disconnected-mirror-images.adoc new file mode 100644 index 000000000000..f889a0025786 --- /dev/null +++ b/modules/connected-to-disconnected-mirror-images.adoc @@ -0,0 +1,110 @@ +// Module included in the following assemblies: +// +// * post_installation_configuration/connected-to-disconnected.adoc + +[id="connected-to-disconnected-mirror-images_{context}"] += Mirroring the images + +After the cluster is properly configured, you can mirror the images from your external repositories to the mirror repository. + +.Procedure + +. Mirror the Operator Lifecycle Manager (OLM) images: +// copied from olm-mirroring-catalog.adoc ++ +[source,terminal] +---- +$ oc adm catalog mirror registry.redhat.io/redhat/redhat-operator-index:v{product-version} :/olm -a +---- ++ +-- +where: + +`product-version`:: Specifies the tag that corresponds to the version of {product-title} to install, such as `4.8`. +`mirror_registry`:: Specifies the target registry and namespace to mirror the Operator content to, where `` is any existing namespace on the registry. +`reg_creds`:: Specifies the location of your modified `.dockerconfigjson` file. +-- ++ +For example: ++ +[source,terminal] +---- +$ oc adm catalog mirror registry.redhat.io/redhat/redhat-operator-index:v4.8 mirror.registry.com:443/olm -a ./.dockerconfigjson --index-filter-by-os='.*' +---- + +. Mirror the content for any other Red Hat-provided Operator: ++ +[source,terminal] +---- +$ oc adm catalog mirror :/ -a +---- ++ +-- +where: + +`index_image`:: Specifies the index image for the catalog you want to mirror. For example, this might be a pruned index image that you created previously, or one of the source index images for the default catalogs, such as `{index-image-pullspec}`. +`mirror_registry`:: Specifies the target registry and namespace to mirror the Operator content to, where `` is any existing namespace on the registry. +`reg_creds`:: Optional: Specifies the location of your registry credentials file, if required. +-- ++ +For example: ++ +[source,terminal] +---- +$ oc adm catalog mirror registry.redhat.io/redhat/community-operator-index:v4.8 mirror.registry.com:443/olm -a ./.dockerconfigjson --index-filter-by-os='.*' +---- + +. Mirror the {product-title} image repository: ++ +[source,terminal] +---- +$ oc adm release mirror -a .dockerconfigjson --from=quay.io/openshift-release-dev/ocp-release:v- --to=/ --to-release-image=/:v- +---- ++ +-- +where: + +`product-version`:: Specifies the tag that corresponds to the version of {product-title} to install, such as `4.8.15-x86_64`. +`architecture`:: Specifies the type of architecture for your server, such as `x86_64`. +`local_registry`:: Specifies the registry domain name for your mirror repository. +`local_repository`:: Specifies the name of the repository to create in your registry, such as `ocp4/openshift4`. +-- ++ +For example: ++ +[source,terminal] +---- +$ oc adm release mirror -a .dockerconfigjson --from=quay.io/openshift-release-dev/ocp-release:4.8.15-x86_64 --to=mirror.registry.com:443/ocp/release --to-release-image=mirror.registry.com:443/ocp/release:4.8.15-x86_64 +---- ++ +.Example output ++ +[source,terminal] ++ +---- +info: Mirroring 109 images to mirror.registry.com/ocp/release ... +mirror.registry.com:443/ + ocp/release + manifests: + sha256:086224cadce475029065a0efc5244923f43fb9bb3bb47637e0aaf1f32b9cad47 -> 4.8.15-x86_64-thanos + sha256:0a214f12737cb1cfbec473cc301aa2c289d4837224c9603e99d1e90fc00328db -> 4.8.15-x86_64-kuryr-controller + sha256:0cf5fd36ac4b95f9de506623b902118a90ff17a07b663aad5d57c425ca44038c -> 4.8.15-x86_64-pod + sha256:0d1c356c26d6e5945a488ab2b050b75a8b838fc948a75c0fa13a9084974680cb -> 4.8.15-x86_64-kube-client-agent + +….. +sha256:66e37d2532607e6c91eedf23b9600b4db904ce68e92b43c43d5b417ca6c8e63c mirror.registry.com:443/ocp/release:4.5.41-multus-admission-controller +sha256:d36efdbf8d5b2cbc4dcdbd64297107d88a31ef6b0ec4a39695915c10db4973f1 mirror.registry.com:443/ocp/release:4.5.41-cluster-kube-scheduler-operator +sha256:bd1baa5c8239b23ecdf76819ddb63cd1cd6091119fecdbf1a0db1fb3760321a2 mirror.registry.com:443/ocp/release:4.5.41-aws-machine-controllers +info: Mirroring completed in 2.02s (0B/s) + +Success +Update image: mirror.registry.com:443/ocp/release:4.5.41-x86_64 +Mirror prefix: mirror.registry.com:443/ocp/release +---- + +. Mirror any other registries, as needed: ++ +[source,terminal] +---- +$ oc image mirror /my/image:latest +---- diff --git a/modules/connected-to-disconnected-prepare-mirror.adoc b/modules/connected-to-disconnected-prepare-mirror.adoc new file mode 100644 index 000000000000..2a71d2a10e51 --- /dev/null +++ b/modules/connected-to-disconnected-prepare-mirror.adoc @@ -0,0 +1,74 @@ +// Module included in the following assemblies: +// +// * post_installation_configuration/connected-to-disconnected.adoc + +[id="connected-to-disconnected-prepare-mirror_{context}"] += Preparing the cluster for mirroring + +Before disconnecting your cluster, you must mirror, or copy, the images to a mirror registry that is reachable by every node in your disconnected cluster. In order to mirror the images, you must prepare your cluster by: + +* Adding the mirror registry certificates to the list of trusted CAs on your host. +* Creating a `.dockerconfigjson` file that contains your image pull secret, which is from the `cloud.openshift.com` token. + +.Procedure + +. Configuring credentials that allow image mirroring: + +.. Add the CA certificate for the mirror registry, in the simple PEM or DER file formats, to the list of trusted CAs. For example: ++ +[source,terminal] +---- +$ cp /usr/share/pki/ca-trust-source/anchors/ +---- ++ +-- +where:: ++ +``:: Specifies the path to the certificate on your local file system. +-- + +.. Update the CA trust. For example, in Linux: ++ +[source,terminal] +---- +$ update-ca-trust +---- + +.. Extract the `.dockerconfigjson` file from the global pull secret: ++ +[source,terminal] +---- +$ oc extract secret/pull-secret -n openshift-config --confirm --to=. +---- ++ +.Example output +[source,terminal] +---- +.dockerconfigjson +---- + +.. Edit the `.dockerconfigjson` file to add your mirror registry and authentication credentials and save it as a new file: +// copied from olm-accessing-images-private-registries ++ +[source,terminal] +---- +{"auths":{"": {"auth": "","email": "you@example.com"}}},"://":{"auth":""}}} +---- ++ +where: ++ +``:: Specifies the registry domain name, and optionally the port, that your mirror registry uses to serve content. +`auth`:: Specifies the base64-encoded user name and password for your mirror registry. +`:/`:: Specifies the mirror registry details. +``:: Specifies the base64-encoded `username:password` for your mirror registry. ++ +For example: ++ +[source,terminal] +---- +$ {"auths":{"cloud.openshift.com":{"auth":"b3BlbnNoaWZ0Y3UjhGOVZPT0lOMEFaUjdPUzRGTA==","email":"user@example.com"}, +"quay.io":{"auth":"b3BlbnNoaWZ0LXJlbGVhc2UtZGOVZPT0lOMEFaUGSTd4VGVGVUjdPUzRGTA==","email":"user@example.com"}, +"registry.connect.redhat.com"{"auth":"NTE3MTMwNDB8dWhjLTFEZlN3VHkxOSTd4VGVGVU1MdTpleUpoYkdjaUailA==","email":"user@example.com"}, +"registry.redhat.io":{"auth":"NTE3MTMwNDB8dWhjLTFEZlN3VH3BGSTd4VGVGVU1MdTpleUpoYkdjaU9fZw==","email":"user@example.com"}, +"registry.svc.ci.openshift.org":{"auth":"dXNlcjpyWjAwWVFjSEJiT2RKVW1pSmg4dW92dGp1SXRxQ3RGN1pwajJhN1ZXeTRV"},"my-registry:5000/my-namespace/":{"auth":"dXNlcm5hbWU6cGFzc3dvcmQ="}}} +---- diff --git a/modules/connected-to-disconnected-restore-insights.adoc b/modules/connected-to-disconnected-restore-insights.adoc new file mode 100644 index 000000000000..e5e6f2b696b4 --- /dev/null +++ b/modules/connected-to-disconnected-restore-insights.adoc @@ -0,0 +1,44 @@ +// Module included in the following assemblies: +// +// * post_installation_configuration/connected-to-disconnected.adoc + +[id="connected-to-disconnected-restore-insights_{context}"] += Restoring a degraded Insights Operator + +Disconnecting the cluster from the network necessarily causes the cluster to lose the Internet connection. The Insights Operator becomes degraded because it requires access to link:https://console.redhat.com[Red Hat Insights]. + +This topic describes how to recover from a degraded Insights Operator. + +.Procedure + +. Edit your `.dockerconfigjson` file to remove the `cloud.openshift.com` entry, for example: ++ +[source,terminal] +---- +"cloud.openshift.com":{"auth":"","email":"user@example.com"} +---- + +. Save the file. + +. Update the cluster secret with the edited `.dockerconfigjson` file: ++ +[source,terminal] +---- +$ oc set data secret/pull-secret -n openshift-config --from-file=.dockerconfigjson=./.dockerconfigjson +---- + +. Verify that the Insights Operator is no longer degraded: ++ +[source,terminal] +---- +$ oc get co insights +---- ++ +.Example output +[source,terminal] +---- +NAME VERSION AVAILABLE PROGRESSING DEGRADED SINCE +insights 4.5.41 True False False 3d +---- + + diff --git a/modules/connected-to-disconnected-restore.adoc b/modules/connected-to-disconnected-restore.adoc new file mode 100644 index 000000000000..b6eb9cd1f9f9 --- /dev/null +++ b/modules/connected-to-disconnected-restore.adoc @@ -0,0 +1,78 @@ +// Module included in the following assemblies: +// +// * post_installation_configuration/connected-to-disconnected.adoc + +[id="connected-to-disconnected-restore_{context}"] += Restoring the network + +If you want to reconnect a disconnected cluster and pull images from online registries, delete the cluster's ImageContentSourcePolicy (ICSP) objects. Without the ICSP, pull requests to external registries are no longer redirected to the mirror registry. + +.Procedure + +. View the ICSP objects in your cluster: ++ +[source,terminal] +---- +$ oc get imagecontentsourcepolicy +---- ++ +.Example output +[source,terminal] +---- +NAME AGE +mirror-ocp 6d20h +ocp4-index-0 6d18h +qe45-index-0 6d15h +---- + +. Delete all the ICSP objects you created when disconnecting your cluster: ++ +[source,terminal] +---- +$ oc delete imagecontentsourcepolicy +---- ++ +For example: ++ +[source,terminal] +---- +$ oc delete imagecontentsourcepolicy mirror-ocp ocp4-index-0 qe45-index-0 +---- ++ +.Example output +[source,terminal] +---- +imagecontentsourcepolicy.operator.openshift.io "mirror-ocp" deleted +imagecontentsourcepolicy.operator.openshift.io "ocp4-index-0" deleted +imagecontentsourcepolicy.operator.openshift.io "qe45-index-0" deleted +---- + +. Wait for all the nodes to restart and return to the READY status and verify that the `registries.conf` file is pointing to the original registries and not the mirror registries: + +.. Log into a node: ++ +[source,terminal] +---- +$ oc debug node/ +---- + +.. Set `/host` as the root directory within the debug shell: ++ +[source,terminal] +---- +sh-4.4# chroot /host +---- + +.. Examine the `registries.conf` file: ++ +[source,terminal] +---- +sh-4.4# cat /etc/containers/registries.conf +---- ++ +.Example output +[source,terminal] +---- +unqualified-search-registries = ["registry.access.redhat.com", "docker.io"] <1> +---- +<1> The `registry` and `registry.mirror` entries created by the ICSPs you deleted are removed. diff --git a/modules/connected-to-disconnected-verify.adoc b/modules/connected-to-disconnected-verify.adoc new file mode 100644 index 000000000000..ae1ecc428ff6 --- /dev/null +++ b/modules/connected-to-disconnected-verify.adoc @@ -0,0 +1,52 @@ +// Module included in the following assemblies: +// +// * post_installation_configuration/connected-to-disconnected.adoc + +[id="connected-to-disconnected-verify_{context}"] += Ensure applications continue to work + +Before disconnecting the cluster from the network, ensure that your cluster is working as expected and all of your applications are working as expected. + +.Procedure + +Use the following commands to check the status of your cluster: + +* Ensure your pods are running: ++ +[source,terminal] +---- +$ oc get pods --all-namespaces +---- ++ +.Example output +[source,terinal] +---- +NAMESPACE NAME READY STATUS RESTARTS AGE +kube-system apiserver-watcher-ci-ln-47ltxtb-f76d1-mrffg-master-0 1/1 Running 0 39m +kube-system apiserver-watcher-ci-ln-47ltxtb-f76d1-mrffg-master-1 1/1 Running 0 39m +kube-system apiserver-watcher-ci-ln-47ltxtb-f76d1-mrffg-master-2 1/1 Running 0 39m +openshift-apiserver-operator openshift-apiserver-operator-79c7c646fd-5rvr5 1/1 Running 3 45m +openshift-apiserver apiserver-b944c4645-q694g 2/2 Running 0 29m +openshift-apiserver apiserver-b944c4645-shdxb 2/2 Running 0 31m +openshift-apiserver apiserver-b944c4645-x7rf2 2/2 Running 0 33m + ... +---- + +* Ensure your nodes are in the READY status: ++ +[source,terminal] +---- +$ oc get nodes +---- ++ +.Example output +[source,terminal] +---- +NAME STATUS ROLES AGE VERSION +ci-ln-47ltxtb-f76d1-mrffg-master-0 Ready master 42m v1.21.1+a620f50 +ci-ln-47ltxtb-f76d1-mrffg-master-1 Ready master 42m v1.21.1+a620f50 +ci-ln-47ltxtb-f76d1-mrffg-master-2 Ready master 42m v1.21.1+a620f50 +ci-ln-47ltxtb-f76d1-mrffg-worker-a-gsxbz Ready worker 35m v1.21.1+a620f50 +ci-ln-47ltxtb-f76d1-mrffg-worker-b-5qqdx Ready worker 35m v1.21.1+a620f50 +ci-ln-47ltxtb-f76d1-mrffg-worker-c-rjkpq Ready worker 34m v1.21.1+a620f50 +---- diff --git a/post_installation_configuration/connected-to-disconnected.adoc b/post_installation_configuration/connected-to-disconnected.adoc new file mode 100644 index 000000000000..63208adfad34 --- /dev/null +++ b/post_installation_configuration/connected-to-disconnected.adoc @@ -0,0 +1,66 @@ +[id="connected-to-disconnected"] += Converting a connected cluster to a disconnected cluster +include::modules/common-attributes.adoc[] +:context: connected-to-disconnected + +toc::[] + + + +There might be some scenarios where you need to convert your {product-title} cluster from a connected cluster to a disconnected cluster. + +A disconnected cluster, also known as a restricted cluster, does not have an active connection to the internet. As such, you must mirror the contents of your registries and installation media. You can create this mirror registry on a host that can access both the internet and your closed network, or copy images to a device that you can move across network boundaries. + +This topic describes the general process for converting an existing, connected cluster into a disconnected cluster. + +:FeatureName: The process for converting a cluster from connected to disconnected +include::modules/technology-preview.adoc[leveloffset=+1] + +include::modules/installation-about-mirror-registry.adoc[leveloffset=+1] + +[id="prerequisites_connected-to-disconnected"] +== Prerequisites + +* The `oc` client is installed. + +* A running cluster. + +* An installed mirror registry, which is a container image registry that supports link:https://docs.docker.com/registry/spec/manifest-v2-2/[Docker v2-2] in the location that will host the {product-title} cluster, such as one of the following registries: ++ +-- +** link:https://www.redhat.com/en/technologies/cloud-computing/quay[Red Hat Quay] + +** link:https://jfrog.com/artifactory/[JFrog Artifactory] + +** link:https://www.sonatype.com/products/repository-oss?topnav=true[Sonatype Nexus Repository] + +** link:https://goharbor.io/[Harbor] +-- ++ +If you have an subscription to Red Hat Quay, see the documentation on deploying Red Hat Quay link:https://access.redhat.com/documentation/en-us/red_hat_quay/3.5/html/deploy_red_hat_quay_for_proof-of-concept_non-production_purposes/[for proof-of-concept purposes] or link:https://access.redhat.com/documentation/en-us/red_hat_quay/3.5/html/deploy_red_hat_quay_on_openshift_with_the_quay_operator/[by using the Quay Operator]. + +* The mirror repository must be configured to share images. For example, a Red Hat Quay repository requires link:https://access.redhat.com/documentation/en-us/red_hat_quay/3.5/html/use_red_hat_quay/user-org-intro#org-create[Organizations] in order to share images. + +* Access to the internet to obtain the necessary container images. + +include::modules/connected-to-disconnected-prepare-mirror.adoc[leveloffset=+1] +include::modules/connected-to-disconnected-mirror-images.adoc[leveloffset=+1] + +.Additional information + +* For more information about mirroring Operator catalogs, see xref:../operators/admin/olm-restricted-networks.adoc#olm-mirror-catalog_olm-restricted-networks[Mirroring an Operator catalog]. +* For more information about the `oc adm catalog mirror` command, see the xref:../cli_reference/openshift_cli/administrator-cli-commands.adoc#oc-adm-catalog-mirror[OpenShift CLI administrator command reference]. + +include::modules/connected-to-disconnected-config-registry.adoc[leveloffset=+1] +include::modules/connected-to-disconnected-verify.adoc[leveloffset=+1] +include::modules/connected-to-disconnected-disconnect.adoc[leveloffset=+1] + +[NOTE] +==== +The Insights Operator is degraded when the cluster loses its Internet connection. You can avoid this problem by temporarily xref:../support/remote_health_monitoring/opting-out-of-remote-health-reporting.adoc[disabling the Insights Operator] until you can restore it. +==== + +include::modules/connected-to-disconnected-restore-insights.adoc[leveloffset=+1] +include::modules/connected-to-disconnected-restore.adoc[leveloffset=+1] + +