$ oc patch configs.imageregistry.operator.openshift.io/cluster --patch '{"spec":{"defaultRoute":true}}' --type=merge
无需从集群内部登录默认的 OpenShift 镜像注册表,您可以通过路由公开它来获得外部访问权限。此外部访问权限使您可以使用路由地址从集群外部登录注册表,并使用路由主机将镜像标记并推送到现有项目。
以下前提条件会自动执行
部署 Registry Operator。
部署 Ingress Operator。
您具有 `cluster-admin` 角色用户的集群访问权限。
您可以使用 `configs.imageregistry.operator.openshift.io` 资源中的 `defaultRoute` 参数公开路由。
要使用 `defaultRoute` 公开注册表
将 `defaultRoute` 设置为 `true`
$ oc patch configs.imageregistry.operator.openshift.io/cluster --patch '{"spec":{"defaultRoute":true}}' --type=merge
获取默认注册表路由
$ HOST=$(oc get route default-route -n openshift-image-registry --template='{{ .spec.host }}')
获取 Ingress Operator 的证书
$ 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
使用以下命令启用集群的默认证书以信任路由
$ sudo update-ca-trust enable
使用 podman 通过默认路由登录
$ sudo podman login -u kubeadmin -p $(oc whoami -t) $HOST
无需从集群内部登录 OpenShift 镜像注册表,您可以通过路由公开它来获得外部访问权限。这允许您使用路由地址从集群外部登录注册表,并使用路由主机将镜像标记并推送到现有项目。
以下前提条件会自动执行
部署 Registry Operator。
部署 Ingress Operator。
您具有 `cluster-admin` 角色用户的集群访问权限。
您可以使用 `configs.imageregistry.operator.openshift.io` 资源中的 `DefaultRoute` 参数或使用自定义路由来公开路由。
要使用 `DefaultRoute` 公开注册表
将 `DefaultRoute` 设置为 `True`
$ oc patch configs.imageregistry.operator.openshift.io/cluster --patch '{"spec":{"defaultRoute":true}}' --type=merge
使用 `podman` 登录
$ HOST=$(oc get route default-route -n openshift-image-registry --template='{{ .spec.host }}')
$ podman login -u kubeadmin -p $(oc whoami -t) --tls-verify=false $HOST (1)
1 | 如果集群的默认路由证书不受信任,则需要 `--tls-verify=false`。您可以使用 Ingress Operator 将自定义的受信任证书设置为默认证书。 |
要使用自定义路由公开注册表
使用路由的 TLS 密钥创建一个密钥。
$ oc create secret tls public-route-tls \
-n openshift-image-registry \
--cert=</path/to/tls.crt> \
--key=</path/to/tls.key>
此步骤是可选的。如果您不创建密钥,则路由将使用 Ingress Operator 的默认 TLS 配置。
在 Registry Operator 上
$ oc edit configs.imageregistry.operator.openshift.io/cluster
spec:
routes:
- name: public-routes
hostname: myregistry.mycorp.organization
secretName: public-route-tls
...
只有在您为注册表的路由提供自定义 TLS 配置时,才设置 `secretName`。 |