Chapter 5. Exposing the registry
By default, the OpenShift image registry is secured during cluster installation so that it serves traffic through the Transport Layer Security (TLS) protocol. Unlike previous versions of OpenShift Container Platform, the registry is not exposed outside of the cluster at the time of installation.
5.1. Exposing a default registry manually Copy linkLink copied to clipboard!
Instead of logging in to the default OpenShift image registry from within the cluster, you can gain external access to the OpenShift image registry by exposing the registry with a route. With this external access, you can log in to the registry from outside the cluster by using the route address. You can then tag and push images to an existing project by using the route host.
Prerequisites
The following prerequisites are automatically performed:
- Deploy the Registry Operator.
- Deploy the Ingress Operator.
-
You have access to the cluster as a user with the
cluster-adminrole.
Procedure
To expose the registry by using the
defaultRouteparameter that exists in theconfigs.imageregistry.operator.openshift.ioresource, set defaultRoute` totrueby running the following command:oc patch configs.imageregistry.operator.openshift.io/cluster --patch '{"spec":{"defaultRoute":true}}' --type=merge$ oc patch configs.imageregistry.operator.openshift.io/cluster --patch '{"spec":{"defaultRoute":true}}' --type=mergeCopy to Clipboard Copied! Toggle word wrap Toggle overflow Get the default registry route by running the following command:
HOST=$(oc get route default-route -n openshift-image-registry --template='{{ .spec.host }}')$ HOST=$(oc get route default-route -n openshift-image-registry --template='{{ .spec.host }}')Copy to Clipboard Copied! Toggle word wrap Toggle overflow Get the certificate of the Ingress Operator by running the following command:
oc extract secret/$(oc get ingresscontroller -n openshift-ingress-operator default -o json | jq '.spec.defaultCertificate.name // "router-certs-default"' -r) -n openshift-ingress --confirm
$ oc extract secret/$(oc get ingresscontroller -n openshift-ingress-operator default -o json | jq '.spec.defaultCertificate.name // "router-certs-default"' -r) -n openshift-ingress --confirmCopy to Clipboard Copied! Toggle word wrap Toggle overflow Move the extracted certificate to the trusted CA directory of the system by running the following command:
sudo mv tls.crt /etc/pki/ca-trust/source/anchors/
$ sudo mv tls.crt /etc/pki/ca-trust/source/anchors/Copy to Clipboard Copied! Toggle word wrap Toggle overflow Enable the default certificate of the cluster to trust the route by running the following command:
sudo update-ca-trust enable
$ sudo update-ca-trust enableCopy to Clipboard Copied! Toggle word wrap Toggle overflow Log in with podman with the default route by running the following command:
sudo podman login -u kubeadmin -p $(oc whoami -t) $HOST
$ sudo podman login -u kubeadmin -p $(oc whoami -t) $HOSTCopy to Clipboard Copied! Toggle word wrap Toggle overflow
5.2. Exposing a secure registry manually Copy linkLink copied to clipboard!
Instead of logging in to the OpenShift image registry from within the cluster, you can gain external access to the OpenShift image registry by exposing the registry with a route. With this external access, you can log in to the registry from outside the cluster by using the route address. You can then tag and push images to an existing project by using the route host.
You can expose the route by using DefaultRoute parameter in the configs.imageregistry.operator.openshift.io resource or by using custom routes.
Prerequisites
The following prerequisites are automatically performed:
- Deploy the Registry Operator.
- Deploy the Ingress Operator.
-
You have access to the cluster as a user with the
cluster-adminrole.
Procedure
To expose the registry using
DefaultRouteparameter, setDefaultRoutetoTrue:oc patch configs.imageregistry.operator.openshift.io/cluster --patch '{"spec":{"defaultRoute":true}}' --type=merge$ oc patch configs.imageregistry.operator.openshift.io/cluster --patch '{"spec":{"defaultRoute":true}}' --type=mergeCopy to Clipboard Copied! Toggle word wrap Toggle overflow Log in with
podmanby entering the following command:HOST=$(oc get route default-route -n openshift-image-registry --template='{{ .spec.host }}')$ HOST=$(oc get route default-route -n openshift-image-registry --template='{{ .spec.host }}')Copy to Clipboard Copied! Toggle word wrap Toggle overflow podman login -u kubeadmin -p $(oc whoami -t) --tls-verify=false $HOST
$ podman login -u kubeadmin -p $(oc whoami -t) --tls-verify=false $HOSTCopy to Clipboard Copied! Toggle word wrap Toggle overflow -
--tls-verify=false: Set this parameter tofalseif the default certificate of the cluster for routes is untrusted. You can set a custom, trusted certificate as the default certificate with the Ingress Operator.
-
To expose the registry using custom routes, create a secret with your route’s TLS keys. This step is optional. If you do not create a secret, the route uses the default TLS configuration from the Ingress Operator.
oc create secret tls public-route-tls \ -n openshift-image-registry \ --cert=</path/to/tls.crt> \ --key=</path/to/tls.key>$ oc create secret tls public-route-tls \ -n openshift-image-registry \ --cert=</path/to/tls.crt> \ --key=</path/to/tls.key>Copy to Clipboard Copied! Toggle word wrap Toggle overflow On the Registry Operator, enter the following command:
oc edit configs.imageregistry.operator.openshift.io/cluster
$ oc edit configs.imageregistry.operator.openshift.io/clusterCopy to Clipboard Copied! Toggle word wrap Toggle overflow Copy to Clipboard Copied! Toggle word wrap Toggle overflow NoteOnly set
secretNameif you are providing a custom TLS configuration for the route of the registry.
Troubleshooting