×

默认情况下,OpenShift 镜像注册表在集群安装期间是安全的,以便它通过 TLS 提供服务。与之前的 OpenShift Container Platform 版本不同,注册表在安装时不会公开到集群外部。

手动公开默认注册表

无需从集群内部登录默认的 OpenShift 镜像注册表,您可以通过路由公开它来获得外部访问权限。此外部访问权限使您可以使用路由地址从集群外部登录注册表,并使用路由主机将镜像标记并推送到现有项目。

先决条件
  • 以下前提条件会自动执行

    • 部署 Registry Operator。

    • 部署 Ingress Operator。

  • 您具有 `cluster-admin` 角色用户的集群访问权限。

步骤

您可以使用 `configs.imageregistry.operator.openshift.io` 资源中的 `defaultRoute` 参数公开路由。

要使用 `defaultRoute` 公开注册表

  1. 将 `defaultRoute` 设置为 `true`

    $ oc patch configs.imageregistry.operator.openshift.io/cluster --patch '{"spec":{"defaultRoute":true}}' --type=merge
  2. 获取默认注册表路由

    $ HOST=$(oc get route default-route -n openshift-image-registry --template='{{ .spec.host }}')
  3. 获取 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
  4. 使用以下命令启用集群的默认证书以信任路由

    $ sudo update-ca-trust enable
  5. 使用 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` 公开注册表

  1. 将 `DefaultRoute` 设置为 `True`

    $ oc patch configs.imageregistry.operator.openshift.io/cluster --patch '{"spec":{"defaultRoute":true}}' --type=merge
  2. 使用 `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 将自定义的受信任证书设置为默认证书。

要使用自定义路由公开注册表

  1. 使用路由的 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 配置。

  2. 在 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`。