O Harbour é um registro de contêiner de código aberto. Você pode instalar o Tanzu Package for Harbor Registry como um repositório de registro privado para as imagens de contêiner que deseja implantar em clusters do TKG 2.

Requisitos do pacote

Obedeça aos seguintes requisitos para instalar o Tanzu Package for Harbor Registry.
Além disso, o Harbor Registry tem requisitos adicionais pré e pós-instalação.
  • A extensão Harbour requer a entrada HTTP/S. Especificamente, os serviços Harbour são expostos por meio de um serviço Envoy na Contour Extension. Como pré-requisito, implante o pacote Contour. Consulte Instalar o pacote Tanzu para o Contour Ingress usando o Kubectl.
    • Se você estiver usando a rede NSX-T para o Supervisor, crie um serviço Envoy do tipo LoadBalancer.
    • Se você estiver usando a rede vDS do vSphere para o Supervisor, crie um serviço Envoy do tipo LoadBalancer ou do tipo NodePort, dependendo do seu ambiente e dos requisitos.
  • A extensão Harbour requer DNS. Após a instalação da extensão Harbour, você precisa configurar o DNS.
    • Para fins de teste e verificação, adicione os FQDNs Harbor e Notary ao arquivo local /etc/hosts. As instruções abaixo descrevem como fazer isso.
    • Na produção, o Harbor requer uma zona DNS em um servidor DNS local, como BIND, ou em uma nuvem pública, como AWS Route53, DNS do Azure ou Google CloudDNS. Depois de configurar o DNS, para registrar automaticamente os FQDNs do Harbor com um servidor DNS, instale a extensão DNS externo.

Componentes do porto

O Tanzu Package for Harbor Registry instala vários contêineres no cluster. Para obter mais informações, consulte https://goharbor.io/.
Contêiner Tipo de recurso Réplicas Descrição
harbor-core Implantação 1 Servidor de gerenciamento e configuração do Envoy
harbor-database Pod 1 Banco de dados Postgres
harbor-jobservice Implantação 1 Serviço de trabalho do porto
harbor-notary-server Implantação 1 Cartório do Porto
harbor-notary-signer Implantação 1 Tabelião do porto
harbor-portal Implantação 1 Interface da Web do Harbour
harbor-redis Pod 1 Instância do Harbour redis
harbor-registry Implantação 2 Instância de registro de contêiner do Harbor
harbor-trivy Pod 1 Verificador de vulnerabilidades de imagem Harbor

Instalar o pacote Harbour

Para instalar o Harbour Registry usando o pacote Tanzu, conclua as etapas a seguir.

  1. Crie a especificação harbor.yaml.
    Consulte o exemplo a seguir. Substitua os valores na parte harbor-data-values pelos valores apropriados para seu ambiente, incluindo nome do host, classe de armazenamento, chaves TLS e senhas.
    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.5.3+vmware.1-tkg.1
      values:
      - secretRef:
          name: harbor-data-values
    ---
    apiVersion: v1
    kind: Secret
    metadata:
      name: harbor-data-values
      namespace: tkg-system
    stringData:
      values.yml: |
        namespace: tanzu-system-registry
        hostname: harbor.example.com
        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>
        notary:
          enabled: true
        trivy:
          enabled: true
          replicas: 1
          gitHubToken: ""
          skipUpdate: false
        persistence:
          persistentVolumeClaim:
            registry:
              existingClaim: ""
              storageClass: "tkg2-storage-profile"
              subPath: ""
              accessMode: ReadWriteOnce
              size: 50Gi
            jobservice:
              existingClaim: ""
              storageClass: "tkg2-storage-profile"
              subPath: ""
              accessMode: ReadWriteOnce
              size: 10Gi
            database:
              existingClaim: ""
              storageClass: "tkg2-storage-profile"
              subPath: ""
              accessMode: ReadWriteOnce
              size: 10Gi
            redis:
              existingClaim: ""
              storageClass: "tkg2-storage-profile"
              subPath: ""
              accessMode: ReadWriteOnce
              size: 10Gi
            trivy:
              existingClaim: ""
              storageClass: "tkg2-storage-profile"
              subPath: ""
              accessMode: ReadWriteOnce
              size: 10Gi
        proxy:
          httpProxy:
          httpsProxy:
          noProxy: 127.0.0.1,localhost,.local,.internal
        pspNames: vmware-system-restricted
        network:
          ipFamilies: ["IPv4", "IPv6"]
  2. Instale o Harbor.
    kubectl apply -f harbor.yaml

Configurar o DNS para o Harbor usando um serviço Envoy do tipo LoadBalancer (NSX-T Networking)

Se o serviço de pré-requisito do Envoy for exposto por meio de um LoadBalancer, obtenha o endereço IP externo do balanceador de carga e crie registros DNS para os FQDNs do Harbor.
  1. Obtenha o endereço External-IP para o serviço Envoy do tipo LoadBalancer.
    kubectl get service envoy -n tanzu-system-ingress
    Você deve ver o endereço External-IP retornado, por exemplo:
    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
    Como alternativa, você pode obter o endereço External-IP usando o seguinte comando.
    kubectl get svc envoy -n tanzu-system-ingress -o jsonpath='{.status.loadBalancer.ingress[0]}'
  2. Para verificar a instalação da extensão Harbor, atualize o arquivo /etc/hosts local com os FQDNs Harbor e Notary mapeados para o endereço External-IP do balanceador de carga, por exemplo:
    127.0.0.1 localhost
    127.0.1.1 ubuntu
    #TKG2 Harbor with Envoy Load Balancer IP
    10.195.141.17 core.harbor.domain
    10.195.141.17 core.notary.harbor.domain
    
  3. Para verificar a instalação da extensão Harbor, faça login no Harbor.
  4. Crie dois registros CNAME em um servidor DNS que mapeie o endereço External-IP do Balanceador de Carga do serviço Envoy para o FQDN do Harbor e o FQDN do Cartório.
  5. Instale a extensão DNS externo.

Configurar o DNS para o Harbor usando um serviço Envoy do tipo NodePort (rede vDS)

Se o serviço de pré-requisito do Envoy for exposto por meio de um NodePort, obtenha o endereço IP da máquina virtual de um nó do trabalhador e crie registros DNS para os FQDNs do Harbor.
Observação: Para usar o NodePort, você deve ter especificado o valor port.https correto no arquivo harbor-data-values.yaml.
  1. Alterne o contexto para o vSphere Namespace em que o cluster é provisionado.
    kubectl config use-context VSPHERE-NAMESPACE
  2. Liste os nós no cluster.
    kubectl get virtualmachines
  3. Escolha um dos nós do trabalhador e descreva-o usando o seguinte comando.
    kubectl describe virtualmachines tkg2-cluster-X-workers-9twdr-59bc54dc97-kt4cm
  4. Localize o endereço IP da máquina virtual, por exemplo, Vm Ip: 10.115.22.43.
  5. Para verificar a instalação da extensão Harbor, atualize o arquivo /etc/hosts local com os FQDNs Harbor e Notary mapeados para o endereço IP do nó do trabalhador, por exemplo:
    127.0.0.1 localhost
    127.0.1.1 ubuntu
    #TKG2 Harbor with Envoy NodePort
    10.115.22.43 core.harbor.domain
    10.115.22.43 core.notary.harbor.domain
    
  6. Para verificar a instalação da extensão Harbor, faça login no Harbor.
  7. Crie dois registros CNAME em um servidor DNS que mapeie o endereço IP do nó do trabalhador para o FQDN do Harbor e o FQDN do Notário.
  8. Instale a extensão DNS externo.

Fazer login na interface Harbor Web

Depois que o Harbour estiver instalado e configurado, faça login e comece a usá-lo.
  1. Acesse a interface da web do Harbour Registry em https://core.harbor.domain ou o nome do host usado.

    A interface da Web do Harbor Registry.

  2. Faça login no Harbor com o nome de usuário admin e a senha gerada que você coloca no arquivo harbor-data-values.yaml.

    A página de login do Harbor com o nome de usuário admin e a senha gerada.

  3. Verifique se você pode acessar a interface do usuário do Harbor.

    A guia Projetos da interface do usuário do Harbor aparece depois que você faz login.

  4. Obtenha o certificado Harbour CA.

    Na interface do Harbor, selecione Projetos (Projects) > biblioteca (library) ou crie um Novo projeto.

    Clique em Registry Certificate e baixe o certificado Harbour CA (ca.crt).

  5. Adicione o certificado de CA do Harbor ao armazenamento confiável do cliente Docker para que você possa enviar e receber imagens de contêiner do e para o Harbour Registry. Consulte Usando Container Registrys com clusters TKG 2 em Supervisor.
  6. Consulte a documentação do Harbor para obter detalhes sobre como usar o Harbor.