Skip to main content
NetApp container solutions
简体中文版经机器翻译而成,仅供参考。如与英语版出现任何冲突,应以英语版为准。

创建私有镜像仓库

贡献者 kevin-hoke

对于大多数 Red Hat OpenShift 部署,使用公共注册表 "Quay.io"或者 "DockerHub"满足大多数客户的需求。然而,有时客户可能希望托管他们自己的私人或定制图像。

此过程记录了如何创建由Trident和NetApp ONTAP提供的持久卷支持的私有映像注册表。

备注 Trident Protect 需要一个注册表来托管Astra容器所需的图像。以下部分介绍在 Red Hat OpenShift 集群上设置私有注册表以及推送支持安装Trident Protect 所需的映像的步骤。

创建私有镜像仓库

  1. 从当前默认存储类中删除默认注释,并将 Trident 支持的存储类注释为 OpenShift 集群的默认存储类。

    [netapp-user@rhel7 ~]$ oc patch storageclass thin -p '{"metadata": {"annotations": {"storageclass.kubernetes.io/is-default-class": "false"}}}'
    storageclass.storage.k8s.io/thin patched
    
    [netapp-user@rhel7 ~]$ oc patch storageclass ocp-trident -p '{"metadata": {"annotations": {"storageclass.kubernetes.io/is-default-class": "true"}}}'
    storageclass.storage.k8s.io/ocp-trident patched
  2. 通过在以下位置输入以下存储参数来编辑 imageregistry 操作符 `spec`部分。

    [netapp-user@rhel7 ~]$ oc edit configs.imageregistry.operator.openshift.io
    
    storage:
      pvc:
        claim:
  3. 在 `spec`用于创建具有自定义主机名的 OpenShift 路由的部分。保存并退出。

    routes:
      - hostname: astra-registry.apps.ocp-vmw.cie.netapp.com
        name: netapp-astra-route
    备注 当您想要为路由指定自定义主机名时,可以使用上述路由配置。如果您希望 OpenShift 创建具有默认主机名的路由,则可以将以下参数添加到 spec`部分: `defaultRoute: true
    自定义 TLS 证书

    当您使用自定义主机名进行路由时,默认情况下,它会使用 OpenShift Ingress 操作员的默认 TLS 配置。但是,您可以向路由添加自定义 TLS 配置。为此,请完成以下步骤。

    1. 使用路由的 TLS 证书和密钥创建一个秘密。

      [netapp-user@rhel7 ~]$ oc create secret tls astra-route-tls -n openshift-image-registry –cert/home/admin/netapp-astra/tls.crt --key=/home/admin/netapp-astra/tls.key
    2. 编辑 imageregistry 操作符,添加以下参数 `spec`部分。

      [netapp-user@rhel7 ~]$ oc edit configs.imageregistry.operator.openshift.io
      
      routes:
        - hostname: astra-registry.apps.ocp-vmw.cie.netapp.com
          name: netapp-astra-route
          secretName: astra-route-tls
  4. 再次编辑imageregistry Operator,将Operator的管理状态改为 `Managed`状态。保存并退出。

    oc edit configs.imageregistry/cluster
    
    managementState: Managed
  5. 如果满足所有先决条件,则会为私有镜像注册表创建 PVC、pod 和服务。几分钟后,注册表就会启动。

    [netapp-user@rhel7 ~]$oc get all -n openshift-image-registry
    
    NAME                                                   READY   STATUS      RESTARTS   AGE
    pod/cluster-image-registry-operator-74f6d954b6-rb7zr   1/1     Running     3          90d
    pod/image-pruner-1627257600-f5cpj                      0/1     Completed   0          2d9h
    pod/image-pruner-1627344000-swqx9                      0/1     Completed   0          33h
    pod/image-pruner-1627430400-rv5nt                      0/1     Completed   0          9h
    pod/image-registry-6758b547f-6pnj8                     1/1     Running     0          76m
    pod/node-ca-bwb5r                                      1/1     Running     0          90d
    pod/node-ca-f8w54                                      1/1     Running     0          90d
    pod/node-ca-gjx7h                                      1/1     Running     0          90d
    pod/node-ca-lcx4k                                      1/1     Running     0          33d
    pod/node-ca-v7zmx                                      1/1     Running     0          7d21h
    pod/node-ca-xpppp                                      1/1     Running     0          89d
    
    NAME                              TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)     AGE
    service/image-registry            ClusterIP   172.30.196.167   <none>        5000/TCP    15h
    service/image-registry-operator   ClusterIP   None             <none>        60000/TCP   90d
    
    NAME                     DESIRED   CURRENT   READY   UP-TO-DATE   AVAILABLE   NODE SELECTOR            AGE
    daemonset.apps/node-ca   6         6         6       6            6           kubernetes.io/os=linux   90d
    
    NAME                                              READY   UP-TO-DATE   AVAILABLE   AGE
    deployment.apps/cluster-image-registry-operator   1/1     1            1           90d
    deployment.apps/image-registry                    1/1     1            1           15h
    
    NAME                                                         DESIRED   CURRENT   READY   AGE
    replicaset.apps/cluster-image-registry-operator-74f6d954b6   1         1         1       90d
    replicaset.apps/image-registry-6758b547f                     1         1         1       76m
    replicaset.apps/image-registry-78bfbd7f59                    0         0         0       15h
    replicaset.apps/image-registry-7fcc8d6cc8                    0         0         0       80m
    replicaset.apps/image-registry-864f88f5b                     0         0         0       15h
    replicaset.apps/image-registry-cb47fffb                      0         0         0       10h
    
    NAME                                COMPLETIONS   DURATION   AGE
    job.batch/image-pruner-1627257600   1/1           10s        2d9h
    job.batch/image-pruner-1627344000   1/1           6s         33h
    job.batch/image-pruner-1627430400   1/1           5s         9h
    
    NAME                         SCHEDULE    SUSPEND   ACTIVE   LAST SCHEDULE   AGE
    cronjob.batch/image-pruner   0 0 * * *   False     0        9h              90d
    
    NAME                                     HOST/PORT                                           PATH   SERVICES         PORT    TERMINATION   WILDCARD
    route.route.openshift.io/public-routes   astra-registry.apps.ocp-vmw.cie.netapp.com          image-registry   <all>   reencrypt     None
  6. 如果您正在为入口操作员 OpenShift 注册表路由使用默认 TLS 证书,则可以使用以下命令获取 TLS 证书。

    [netapp-user@rhel7 ~]$ oc extract secret/router-ca --keys=tls.crt -n openshift-ingress-operator
  7. 为了允许 OpenShift 节点访问并从注册表中提取图像,请将证书添加到 OpenShift 节点上的 docker 客户端。在 `openshift-config`命名空间使用 TLS 证书并将其修补到集群映像配置以使证书受信任。

    [netapp-user@rhel7 ~]$ oc create configmap astra-ca -n openshift-config --from-file=astra-registry.apps.ocp-vmw.cie.netapp.com=tls.crt
    
    [netapp-user@rhel7 ~]$ oc patch image.config.openshift.io/cluster --patch '{"spec":{"additionalTrustedCA":{"name":"astra-ca"}}}' --type=merge
  8. OpenShift 内部注册表由身份验证控制。所有OpenShift用户都可以访问OpenShift注册表,但登录用户可以执行的操作取决于用户权限。

    1. 要允许用户或一组用户从注册表中提取图像,必须为用户分配 registry-viewer 角色。

      [netapp-user@rhel7 ~]$ oc policy add-role-to-user registry-viewer ocp-user
      
      [netapp-user@rhel7 ~]$ oc policy add-role-to-group registry-viewer ocp-user-group
    2. 要允许用户或用户组写入或推送图像,必须为用户分配注册表编辑器角色。

      [netapp-user@rhel7 ~]$ oc policy add-role-to-user registry-editor ocp-user
      
      [netapp-user@rhel7 ~]$ oc policy add-role-to-group registry-editor ocp-user-group
  9. 为了让 OpenShift 节点访问注册表并推送或拉取图像,您需要配置一个拉取密钥。

    [netapp-user@rhel7 ~]$ oc create secret docker-registry astra-registry-credentials --docker-server=astra-registry.apps.ocp-vmw.cie.netapp.com --docker-username=ocp-user --docker-password=password
  10. 然后可以将这个拉取机密修补到服务帐户或在相应的 pod 定义中引用。

    1. 要将其修补到服务帐户,请运行以下命令。

      [netapp-user@rhel7 ~]$ oc secrets link <service_account_name> astra-registry-credentials --for=pull
    2. 要在 pod 定义中引用 pull secret,请将以下参数添加到 `spec`部分。

      imagePullSecrets:
        - name: astra-registry-credentials
  11. 要从 OpenShift 节点以外的工作站推送或拉取图像,请完成以下步骤。

    1. 将 TLS 证书添加到 docker 客户端。

      [netapp-user@rhel7 ~]$ sudo mkdir /etc/docker/certs.d/astra-registry.apps.ocp-vmw.cie.netapp.com
      
      [netapp-user@rhel7 ~]$ sudo cp /path/to/tls.crt /etc/docker/certs.d/astra-registry.apps.ocp-vmw.cie.netapp.com
    2. 使用 oc login 命令登录 OpenShift。

      [netapp-user@rhel7 ~]$ oc login --token=sha256~D49SpB_lesSrJYwrM0LIO-VRcjWHu0a27vKa0 --server=https://api.ocp-vmw.cie.netapp.com:6443
    3. 使用 OpenShift 用户凭据通过 podman/docker 命令登录注册表。

      podman
      [netapp-user@rhel7 ~]$ podman login astra-registry.apps.ocp-vmw.cie.netapp.com -u kubeadmin -p $(oc whoami -t) --tls-verify=false

      + 注意:如果您使用 `kubeadmin`用户登录私有注册中心,然后使用令牌而不是密码。

      码头工人
      [netapp-user@rhel7 ~]$ docker login astra-registry.apps.ocp-vmw.cie.netapp.com -u kubeadmin -p $(oc whoami -t)

      + 注意:如果您使用 `kubeadmin`用户登录私有注册中心,然后使用令牌而不是密码。

    4. 推送或拉取图像。

      podman
      [netapp-user@rhel7 ~]$ podman push astra-registry.apps.ocp-vmw.cie.netapp.com/netapp-astra/vault-controller:latest
      [netapp-user@rhel7 ~]$ podman pull astra-registry.apps.ocp-vmw.cie.netapp.com/netapp-astra/vault-controller:latest
      码头工人
      [netapp-user@rhel7 ~]$ docker push astra-registry.apps.ocp-vmw.cie.netapp.com/netapp-astra/vault-controller:latest
      [netapp-user@rhel7 ~]$ docker pull astra-registry.apps.ocp-vmw.cie.netapp.com/netapp-astra/vault-controller:latest