了解如何将 Harbor 安装和配置为 主管服务。然后,您可以将 Harbor 用作在 Tanzu Kubernetes Grid 集群和 vSphere Pod 上运行的工作负载的注册表。Harbor 需要将 Contour 作为输入控制器,因此请先安装 Contour 主管服务,然后再安装 Harbor。

将 Harbor 安装为主管服务

您可以通过 vSphere Client 中的工作负载管理选项将 Harbor 安装为主管服务

前提条件

  • 确认已升级到 vCenter Server 8.0a 或更高版本。vCenter Server 8.0a 及更高版本支持 Contour 和 Harbor 主管服务
  • 确认您在添加服务的 vCenter Server 系统上具有管理主管服务特权。
  • 在要安装 Harbor 的同一主管上将 Contour 安装为主管服务。请参见在 vSphere IaaS control plane 中将 Contour 安装为 主管服务
  • 指定用于访问 Harbor 管理 UI 的 FQDN。

过程

  1. 转到 Supervisor-Services 存储库的 Harbor Versions 一节,然后下载以下文件:
    • Harbor 服务定义,链接名为 Harbor vX.X.X。例如 Harbor 2.5.3
    • Harbor 配置文件,链接名为 values for vX.X.X。例如 values 2.5.3
    生成的文件如下所示:
    • harbor.yml
    • harbor-data-values.yml
  2. vSphere Client 中转到工作负载管理,然后选择服务
  3. 通过单击添加新服务并上载 harbor.yml 服务定义,部署 Harbor Operator。
    此窗口显示了 Harbor Operator 的部署
    部署 Harbor Operator 后,它会显示在 服务选项卡中: 此窗口显示了 Harbor Operator 和 Contour Operator 在部署后的概览
  4. 现已部署 Harbor Operator,您可以在运行 Contour 的同一主管服务上安装主管
    1. 打开 harbor-data-values.yml 文件,并根据需要编辑属性。
      属性 描述
      hostname: myharbor.com
      
        https: 443
      FQDN 更改为指定用于访问 Harbor 管理 UI 的 FQDN。
      tlsCertificate:
        tlsSecretLabels: {"managed-by": "vmware-vRegistry"}
      注: 请勿更改
      要使 TKG 集成正常工作,必须指定此值。
      harborAdminPassword: Harbor12345
      可以选择更改 安装期间使用的 Harbor 密码。安装服务后,您可以通过 Harbor 管理 UI 更改此属性。
      secretKey: 0123456789ABCDEF
      字符串 (共 16 个字符) 用于加密的密钥。必须是包含 16 个字符的字符串。
      database:
        password: change-it
      安全密码 用于 Postgres 数据库的初始密码。
      core:
        replicas: 
        secret: change-it
        xsrfKey: 0123456789ABCDEF0123456789ABCDEF
      jobservice:
        replicas: 1
        secret: change-it
      registry:
        replicas: 
        secret: change-it
      对于密钥为字符串,包含 32 个字符的 XSRF 密钥字符串 更改以设置您自己的密钥。
      persistence:
        persistentVolumeClaim:
          registry:
            storageClass: "insert-storage-class-name-here"
            subPath: ""
            accessMode: ReadWriteOnce
            size: 10Gi
          jobservice:
            storageClass: "insert-storage-class-name-here"
            subPath: ""
            accessMode: ReadWriteOnce
            size: 1Gi
          database:
            storageClass: "insert-storage-class-name-here"
            subPath: ""
            accessMode: ReadWriteOnce
            size: 1Gi
          redis:
            storageClass: "insert-storage-class-name-here"
            subPath: ""
            accessMode: ReadWriteOnce
            size: 1Gi
          trivy:
            storageClass: "insert-storage-class-name-here"
            subPath: ""
            accessMode: ReadWriteOnce
            size: 5Gi
       
      存储类名称

      将用作在 Harbor 注册表、作业服务和数据库等中置备 PVC 的存储类的存储策略。

      将每个属性设置为环境中可用的现有存储策略。将存储策略名称更改为有效的存储类名称,方法是将所有大写字母替换为小写字母,并将所有“_”符号和空格替换为短划线“-”。例如,将 Harbor Storage Policy 修改为 harbor-storage-policy

      network:
        ipFamilies: ["IPv4"]
      注: 请勿更改
      IPv6 不受支持。
    2. 返回到工作负载管理 > 服务,然后在 Harbor 服务卡中选择操作 > 在主管上安装
    3. 选择运行 Contour 的主管,然后在 YAML 服务配置中复制并粘贴修改后的 harbor-data-values.yml 文件的内容。
    4. 单击确定
      安装开始后,可以通过单击 Harbor 服务卡上的 主管字段来跟踪安装进度。可能需要几秒钟的时间,直到 主管旁边的数字递增。服务将处于“正在配置”状态,直到达到所需状态为止。达到所需状态后,服务的状态将更改为“正在运行”。

结果

您可以从 主机和集群视图中查看为 Harbor 创建的 vSphere 命名空间vSphere Pod此视图显示了 Harbor 命名空间及其包含的所有 vSphere Pod

将 Harbor FQDN 映射到 Envoy Ingress IP 地址

成功安装 Harbor 后,将 Harbor FQDN 与 Envoy Ingress IP 地址的映射记录添加到配置了主管的外部 DNS 服务器中。

Tanzu Kubernetes Grid 集群、vSphere Pod主管必须能够解析 Harbor FQDN,才能从注册表中拉取映像。

要查找 Envoy Ingress IP 地址,请导航到 Contour 命名空间,选择 网络,然后选择 服务

屏幕截图显示 Envoy IP 地址。

与 Harbor 主管服务 建立信任

安装 Harbor 后,必须在 主管 与之间 Harbor 配置信任关系,以将 Harbor 用作 vSphere Pod 的注册表。与 Harbor 位于同一 主管 上的 Tanzu Kubernetes Grid 集群已自动与 Harbor 建立信任关系。要将 Harbor 用作在不同 主管 上运行的 Tanzu Kubernetes Grid 集群的注册表,必须在 Harbor 与这些 Tanzu Kubernetes Grid 集群之间配置信任关系。

在 Harbor 与 主管 之间建立信任关系

在 Harbor 与 主管 之间建立信任关系:
  1. 从 Harbor UI 或使用 主管 控制平面上的 TLS 密钥提取 Harbor CA。您可以在 Harbor 管理 UI 的管理 > 配置 > 注册表根证书 > 下载中获取 Harbor ca.cert
  2. 将 Harbor CA 添加到 kube-system 命名空间中的 image-fetcher-ca-bundle ConfigMap。您必须使用 vCenter Single Sign-On 管理帐户登录,并且有权编辑 image-fetcher-ca-bundle
    1. 按照此处所述配置 KUBE_EDITOR 环境变量:
    2. 使用以下命令编辑 ConfigMap:
      kubectl edit configmap image-fetcher-ca-bundle -n kube-system
    3. 将 Harbor ca.cert 文件的内容附加到现有 主管 证书下的 ConfigMap。务必不要更改 主管 证书。
      apiVersion: v1
      data:
        ca-bundle: |-
          -----BEGIN CERTIFICATE-----
          MIIC/jCCAeagAwIBAgIBADANBgkqhkiG9w0BAQsFADAVMRMwEQYDVQQDEwprdWJl
          ...
          qB72tWi8M5++h2RGcVash0P1CUZOHkpHxGdUGYv1Z97Wl89dT2OTn3iXqn8d1JAK
          aF8=
          -----END CERTIFICATE-----
          -----BEGIN CERTIFICATE-----
          MIIDKDCCAhCgAwIBAgIQBbUsj7mqXXC5XRhqqU3GiDANBgkqhkiG9w0BAQsFADAU
          ...
          5q7y87vOLTr7+0MG4O01zK0dJYx2jVhZlsuduMYpfqRLLewVl0eGu/6vr2M=
          -----END CERTIFICATE-----    
      kind: ConfigMap
      metadata:
        creationTimestamp: "2023-03-15T14:28:34Z"
        name: image-fetcher-ca-bundle
        namespace: kube-system
        resourceVersion: "713"
        uid: 6b7611a0-25fa-40f7-b4f5-e2a13bd0afe3
    4. 保存对文件所做的编辑。因此,kubectl 报告:
      已编辑 configmap/image-fetcher-ca-bundle

在 Harbor 与在非 Harbor 所在的 主管 上运行的 Tanzu Kubernetes Grid 集群之间建立信任

在未安装 Harbor 的 主管 上运行的 Tanzu Kubernetes Grid 集群必须与 Harbor 建立网络连接。这些 Tanzu Kubernetes Grid 集群必须能够解析 Harbor FQDN。

要在 Harbor 与 Tanzu Kubernetes Grid 集群之间建立信任关系,请从 Harbor UI 中提取 Harbor CA,或者在 主管 控制平面上使用 TLS 密钥,然后按照将 TKG 2 集群与专用容器注册表集成中列出的步骤操作。