Siga estas instrucciones para instalar Harbor en un clúster de TKG aprovisionado con un TKr para vSphere 7.x.

Requisitos previos

Consulte Flujo de trabajo para instalar paquetes estándar en TKr para vSphere 7.x.

Harbor requiere una entrada HTTP/S. Los servicios Harbor se exponen a través de un servicio Envoy en el paquete Contour. Como requisito previo, implemente el paquete de Contour. Consulte Instalar Contour en TKr para vSphere 7.x.
  • Si utiliza redes de NSX para Supervisor, cree un servicio Envoy de tipo LoadBalancer.
  • Si utiliza redes de vSphere vDS para Supervisor, cree un servicio Envoy de tipo LoadBalancer o NodePort, en función de cuáles sean el entorno y los requisitos.
La extensión Harbor requiere de DNS. Para fines de realización de pruebas y verificación, agregue los FQDN de Harbor y Notary al archivo local /etc/hosts. Las instrucciones que aparecen a continuación describen cómo hacerlo.

En la fase de producción, Harbor requiere una zona DNS en un servidor DNS local, como BIND, o en una nube pública, como AWS Route53 o Azure DNS. Una vez que haya configurado DNS, instale la extensión ExternalDNS si desea registrar automáticamente los FQDN de Harbor con un servidor DNS. Consulte Instalar ExternalDNS en TKr para vSphere 7.x.

Instalar Harbor

Para instalar el registro de Harbor mediante el paquete estándar, complete los siguientes pasos.

  1. Enumere las versiones de Harbor disponibles en el repositorio.
    kubectl get packages -n tkg-system | grep harbor
  2. Cree la especificación 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. Personalice el secreto harbor-data-values en la especificación harbor.yaml con los valores adecuados para su entorno, incluidos el nombre de host, las contraseñas, los secretos y la clase de almacenamiento.

    Para obtener más instrucciones, consulte Referencia del paquete de Harbor.

  4. Instale Harbor.
    kubectl apply -f harbor.yaml
  5. Compruebe la instalación de Harbor.
    kubectl get all -n harbor-registry

Configurar DNS para Harbor mediante Envoy LoadBalancer (redes NSX)

Si el servicio Envoy de requisitos previos se expone a través de LoadBalancer, obtenga la dirección IP externa del equilibrador de carga y cree registros de DNS para los FQDN de Harbor.
  1. Obtenga la dirección External-IP para el servicio Envoy de tipo LoadBalancer.
    kubectl get service envoy -n tanzu-system-ingress
    Debería ver la dirección External-IP que se devuelve, por ejemplo:
    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
    Si lo prefiere, puede obtener la dirección External-IP mediante el siguiente comando.
    kubectl get svc envoy -n tanzu-system-ingress -o jsonpath='{.status.loadBalancer.ingress[0]}'
  2. Para comprobar la instalación de la extensión Harbor, actualice el archivo /etc/hosts local con los FQDN de Harbor y Notary asignados a la dirección External-IP del equilibrador de carga; por ejemplo:
    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. Para comprobar la instalación de la extensión Harbor, inicie sesión en Harbor.
  4. Cree dos registros CNAME en un servidor DNS que asignen la dirección External-IP del servicio Envoy del equilibrador de carga al FQDN de Harbor y al FQDN de Notary.
  5. Instale la extensión DNS externo.

Configurar DNS para Harbor mediante Envoy NodePort (redes vDS)

Si el servicio Envoy de requisitos previos se expone a través de NodePort, obtenga la dirección IP de la máquina virtual de un nodo de trabajo y cree registros de DNS para los FQDN de Harbor.
Nota: Para usar NodePort, debe haber especificado el valor de port.https correcto en el archivo harbor-data-values.yaml.
  1. Cambie el contexto a la instancia de espacio de nombres de vSphere en la que se aprovisiona el clúster.
    kubectl config use-context VSPHERE-NAMESPACE
  2. Enumere los nodos del clúster.
    kubectl get virtualmachines
  3. Seleccione uno de los nodos de trabajo y describa el nodo mediante el siguiente comando.
    kubectl describe virtualmachines tkg2-cluster-X-workers-9twdr-59bc54dc97-kt4cm
  4. Busque la dirección IP de la máquina virtual; por ejemplo, Vm Ip: 10.115.22.43.
  5. Para comprobar la instalación de la extensión Harbor, actualice el archivo /etc/hosts local con los FQDN de Harbor y Notary asignados a la dirección IP del nodo de trabajo; por ejemplo:
    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. Para comprobar la instalación de la extensión Harbor, inicie sesión en Harbor.
  7. Cree dos registros CNAME en un servidor DNS que asignen la dirección IP del nodo de trabajo al FQDN de Harbor y al FQDN de Notary.
  8. Instale la extensión DNS externo.

Iniciar sesión en la interfaz web de Harbor

Una vez que Harbor esté instalado y configurado, inicie sesión y comience a utilizarlo.
  1. Acceda a la interfaz web del registro de Harbor en https://core.harbor.domain o al nombre de host que utilizó.

    La interfaz web del registro de Harbor.

  2. Inicie sesión en Harbor con el nombre de usuario admin y la contraseña generada que colocó en el archivo harbor-data-values.yaml.

    La página de inicio de sesión de Harbor con el nombre de usuario admin y la contraseña generada.

  3. Compruebe que puede acceder a la interfaz de usuario de Harbor.

    La pestaña Proyectos de la interfaz de usuario de Harbor aparece después de iniciar sesión.

  4. Obtenga el certificado de CA de Harbor.

    En la interfaz de Harbor, seleccione Proyectos > biblioteca o cree un Nuevo proyecto.

    Haga clic en Certificado del registro y descargue el certificado de CA de Harbor (ca.crt).

  5. Agregue el certificado de CA de Harbor al almacén de confianza del cliente de Docker para poder insertar y extraer imágenes de contenedor al registro de Harbor y desde él. Consulte Uso de registros privados con clústeres Servicio TKG.
  6. Consulte la documentación de Harbor para obtener más información sobre el uso de Harbor.