按照以下说明在使用适用于 vSphere 7.x 的 TKr 置备的 TKG 集群上安装 Harbor。

必备条件

请参见在适用于 vSphere 7.x 的 TKr 上安装标准软件包的工作流

Harbor 需要 HTTP/S Ingress。Harbor 服务通过 Contour 软件包中的 Envoy 服务公开。作为必备条件,请部署 Contour 软件包。请参见 在适用于 vSphere 7.x 的 TKr 上安装 Contour
  • 如果对 主管 使用的是 NSX 网络连接,请创建 LoadBalancer 类型的 Envoy 服务。
  • 如果对 主管 使用的是 vSphere vDS 网络连接,请创建 LoadBalancer 或 NodePort 类型的 Envoy 服务,具体取决于您的环境和要求。
Harbor 扩展需要使用 DNS。出于测试和验证目的,请将 Harbor 和 Notary FQDN 添加到本地 /etc/hosts 文件中。以下说明介绍了如何执行此操作。

在生产环境中,Harbor 要求本地 DNS 服务器(如 BIND)或公有云(如 AWS Route53 或 Azure DNS)上具有 DNS 区域。设置 DNS 后,要在 DNS 服务器中自动注册 Harbor FQDN,请安装 ExternalDNS 扩展。请参见在适用于 vSphere 7.x 的 TKr 上安装 ExternalDNS

安装 Harbor

要使用标准软件包安装 Harbor 注册表,请完成以下步骤。

  1. 列出存储库中的可用 Harbor 版本。
    kubectl get packages -n tkg-system | grep harbor
  2. 创建 harbor.yaml 规范
    apiVersion: v1
    kind: ServiceAccount
    metadata:
      name: harbor-sa
      namespace: tkg-system
    ---
    apiVersion: rbac.authorization.k8s.io/v1
    kind: ClusterRoleBinding
    metadata:
      name: habor-role-binding
    roleRef:
      apiGroup: rbac.authorization.k8s.io
      kind: ClusterRole
      name: cluster-admin
    subjects:
      - kind: ServiceAccount
        name: harbor-sa
        namespace: tkg-system
    ---
    apiVersion: packaging.carvel.dev/v1alpha1
    kind: PackageInstall
    metadata:
      name: harbor
      namespace: tkg-system
    spec:
      serviceAccountName: harbor-sa
      packageRef:
        refName: harbor.tanzu.vmware.com
        versionSelection:
          constraints: 2.7.1+vmware.1-tkg.1 #PKG-VERSION
      values:
      - secretRef:
          name: harbor-data-values
    ---
    apiVersion: v1
    kind: Secret
    metadata:
      name: harbor-data-values
      namespace: harbor-registry
    stringData:
      values.yml: |
        namespace: tanzu-system-registry
        hostname: <ENTER-HARBOR-FQDN>
        port:
          https: 443
        logLevel: info
        tlsCertificate:
          tls.crt: ""
          tls.key: ""
          ca.crt:
        tlsCertificateSecretName:
        enableContourHttpProxy: true
        harborAdminPassword: <ENTER-STRONG-PASSWORD-HERE>
        secretKey: <ENTER-SECRET-KEY>
        database:
          password: <ENTER-STRONG-PASSWORD-HERE>
          shmSizeLimit:
          maxIdleConns:
          maxOpenConns:
        exporter:
          cacheDuration:
        core:
          replicas: 1
          secret: <ENTER-SECRET>
          xsrfKey: <ENTER-XSRF-KEY-WHICH-IS-AN-ALPHANUMERIC-STRING-WITH-32-CHARS>
        jobservice:
          replicas: 1
          secret: <ENTER-SECRET>
        registry:
          replicas: 1
          secret: <ENTER-SECRET>
        trivy:
          enabled: true
          replicas: 1
          gitHubToken: ""
          skipUpdate: false
        persistence:
          persistentVolumeClaim:
            registry:
              existingClaim: ""
              storageClass: "<ENTER-STORAGE-CLASS>"
              subPath: ""
              accessMode: ReadWriteOnce
              size: 50Gi
            jobservice:
              existingClaim: ""
              storageClass: "<ENTER-STORAGE-CLASS>"
              subPath: ""
              accessMode: ReadWriteOnce
              size: 10Gi
            database:
              existingClaim: ""
              storageClass: "<ENTER-STORAGE-CLASS>"
              subPath: ""
              accessMode: ReadWriteOnce
              size: 10Gi
            redis:
              existingClaim: ""
              storageClass: "<ENTER-STORAGE-CLASS>"
              subPath: ""
              accessMode: ReadWriteOnce
              size: 10Gi
            trivy:
              existingClaim: ""
              storageClass: "<ENTER-STORAGE-CLASS>"
              subPath: ""
              accessMode: ReadWriteOnce
              size: 10Gi
        proxy:
          httpProxy:
          httpsProxy:
          noProxy: 127.0.0.1,localhost,.local,.internal
        pspNames: vmware-system-restricted
        network:
          ipFamilies: ["IPv4", "IPv6"]
  3. 使用适用于您环境的适当值自定义 harbor.yaml 规范中的 harbor-data-values 密钥,包括主机名、密码、密钥和存储类。

    有关指导,请参阅 Harbor 软件包参考

  4. 安装 Harbor。
    kubectl apply -f harbor.yaml
  5. 验证 Harbor 安装。
    kubectl get all -n harbor-registry

使用 Envoy LoadBalancer 为 Harbor 配置 DNS(NSX 网络连接)

如果通过 LoadBalancer 公开必备的 Envoy 服务,请获取负载均衡器的外部 IP 地址,并创建 Harbor FQDN 的 DNS 记录。
  1. 获取 LoadBalancer 类型的 Envoy 服务的 External-IP 地址。
    kubectl get service envoy -n tanzu-system-ingress
    您应该会看到返回的 External-IP 地址,例如:
    NAME    TYPE           CLUSTER-IP     EXTERNAL-IP     PORT(S)                      AGE
    envoy   LoadBalancer   10.99.25.220   10.195.141.17   80:30437/TCP,443:30589/TCP   3h27m
    或者,也可以使用以下命令获取 External-IP 地址。
    kubectl get svc envoy -n tanzu-system-ingress -o jsonpath='{.status.loadBalancer.ingress[0]}'
  2. 要验证 Harbor 扩展的安装,请使用映射到负载均衡器的 External-IP 地址的 Harbor 和 Notary FQDN 更新本地 /etc/hosts 文件,例如:
    127.0.0.1 localhost
    127.0.1.1 ubuntu
    #TKG Harbor with Envoy Load Balancer IP
    10.195.141.17 core.harbor.domain
    10.195.141.17 core.notary.harbor.domain
    
  3. 要验证 Harbor 扩展的安装,请登录到 Harbor。
  4. 在 DNS 服务器上创建两个 CNAME 记录,以将 Envoy 服务负载均衡器 External-IP 地址映射到 Harbor FQDN 和 Notary FQDN。
  5. 安装外部 DNS 扩展。

使用 Envoy NodePort 为 Harbor 配置 DNS(vDS 网络连接)

如果通过 NodePort 公开必备的 Envoy 服务,请获取工作节点的虚拟机 IP 地址,并创建 Harbor FQDN 的 DNS 记录。
注: 要使用 NodePort,必须在 harbor-data-values.yaml 文件中指定正确的 port.https 值。
  1. 将上下文切换到置备了集群的 vSphere 命名空间
    kubectl config use-context VSPHERE-NAMESPACE
  2. 列出集群中的节点。
    kubectl get virtualmachines
  3. 选择其中一个工作节点,然后使用以下命令对其进行描述。
    kubectl describe virtualmachines tkg2-cluster-X-workers-9twdr-59bc54dc97-kt4cm
  4. 找到虚拟机的 IP 地址,例如 Vm Ip: 10.115.22.43
  5. 要验证 Harbor 扩展的安装,请使用映射到工作节点 IP 地址的 Harbor 和 Notary FQDN 更新本地 /etc/hosts 文件,例如:
    127.0.0.1 localhost
    127.0.1.1 ubuntu
    #TKG Harbor with Envoy NodePort
    10.115.22.43 core.harbor.domain
    10.115.22.43 core.notary.harbor.domain
    
  6. 要验证 Harbor 扩展的安装,请登录到 Harbor。
  7. 在 DNS 服务器上创建两个 CNAME 记录,以将工作节点 IP 地址映射到 Harbor FQDN 和 Notary FQDN。
  8. 安装外部 DNS 扩展。

登录到 Harbor Web 界面

安装并配置 Harbor 后,请登录并开始使用。
  1. 访问 Harbor 注册表 Web 界面 (https://core.harbor.domain) 或您使用的主机名。

    Harbor 注册表 Web 界面。

  2. 使用用户名 admin 和生成的密码(放在 harbor-data-values.yaml 文件中)登录到 Harbor。

    Harbor 登录页面,带有用户名 admin 和生成的密码。

  3. 验证您是否可以访问 Harbor 用户界面。

    登录后,将显示 Harbor 用户界面的“项目”选项卡。

  4. 获取 Harbor CA 证书。

    在 Harbor 界面中,选择项目 > ,或者创建新项目

    单击注册表证书并下载 Harbor CA 证书 (ca.crt)。

  5. 将 Harbor CA 证书添加到 Docker 客户端的信任库中,以便可以将容器映像推送到 Harbor 注册表以及从 Harbor 注册表中提取容器映像。请参见对 TKG 服务 集群使用专用注册表
  6. 有关使用 Harbor 的详细信息,请参阅 Harbor 文档