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.
- Provisione um cluster TKG 2 com uma classe de armazenamento padrão. Consulte Provisionando clusters do TKG 2 em Supervisor.
Observação: O Harbor requer uma classe de armazenamento persistente padrão. Se você tiver um cluster TKG 2 sem uma classe de armazenamento padrão, poderá corrigi-lo. Consulte Requisitos de armazenamento persistente para pacotes Tanzu.
- Conecte-se ao cluster do TKG 2. Consulte Gerenciando identidade e acesso para clusters TKG 2 em Supervisor.
- Instale os pré-requisitos do pacote Tanzu. Consulte Instalar os pré-requisitos do pacote Tanzu usando o Kubectl
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.
- Crie a especificação
harbor.yaml
.Consulte o exemplo a seguir. Substitua os valores na parteharbor-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"]
- 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.
- 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çoExternal-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çoExternal-IP
usando o seguinte comando.kubectl get svc envoy -n tanzu-system-ingress -o jsonpath='{.status.loadBalancer.ingress[0]}'
- 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çoExternal-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
- Para verificar a instalação da extensão Harbor, faça login no Harbor.
- 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. - 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
.
- Alterne o contexto para o vSphere Namespace em que o cluster é provisionado.
kubectl config use-context VSPHERE-NAMESPACE
- Liste os nós no cluster.
kubectl get virtualmachines
- Escolha um dos nós do trabalhador e descreva-o usando o seguinte comando.
kubectl describe virtualmachines tkg2-cluster-X-workers-9twdr-59bc54dc97-kt4cm
- Localize o endereço IP da máquina virtual, por exemplo,
Vm Ip: 10.115.22.43
. - 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
- Para verificar a instalação da extensão Harbor, faça login no Harbor.
- 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.
- 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.
- Acesse a interface da web do Harbour Registry em
https://core.harbor.domain
ou o nome do host usado. - 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
. - Verifique se você pode acessar a interface do usuário do Harbor.
- Obtenha o certificado Harbour CA.
Na interface do Harbor, selecione Novo projeto.
ou crie umClique em Registry Certificate e baixe o certificado Harbour CA (ca.crt).
- 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.
- Consulte a documentação do Harbor para obter detalhes sobre como usar o Harbor.