Este site utiliza cookies

Utilizamos cookies para melhorar sua experiência de navegação, personalizar conteúdo e analisar nosso tráfego. Ao clicar em 'Aceitar', você concorda com o uso de cookies conforme nossa Política de Privacidade.

Virtualização

Tornando o Harbor Pronto para Produção: Considerações Essenciais para Implantação

VMware
04 de dezembro de 2025
10 min de leitura
Compartilhar:
Tornando o Harbor Pronto para Produção: Considerações Essenciais para Implantação

Tornando o Harbor Pronto para Produção: Considerações Essenciais

Harbor é um container registry open-source que protege artefatos com políticas e controle de acesso baseado em role-based access control (RBAC), garantindo que as imagens sejam escaneadas em busca de vulnerabilidades e assinadas como confiáveis. Para saber mais sobre o Harbor e como implantá-lo em uma Virtual Machine (VM) e no Kubernetes (K8s), consulte as partes 1 e 2 desta série. Embora a implantação do Harbor seja direta, torná-lo pronto para produção exige uma consideração cuidadosa de vários aspectos cruciais.

Este blog descreve fatores críticos para garantir que sua instância do Harbor seja robusta, segura e escalável para ambientes de produção. Para este artigo, focaremos no Harbor upstream (v 2.14) implantado no Kubernetes via Helm como nossa base e forneceremos sugestões para essa implantação específica.


1. Alta Disponibilidade (HA) e Escalabilidade

Para um ambiente de produção, pontos únicos de falha (single points of failure) são inaceitáveis. Isso é especialmente verdadeiro para registries de imagens que atuam como um repositório central para armazenar e puxar (pull) imagens e artefatos. Portanto, implementar a alta disponibilidade para o Harbor é crucial e envolve várias considerações importantes:

Implantação com um Ingress

Configure um Service do Kubernetes do tipo Ingress controller (por exemplo, Traefik) na frente de suas instâncias do Harbor para distribuir o tráfego de entrada de forma eficiente e fornecer um ponto de entrada unificado, juntamente com o cert-manager para gerenciamento de certificados. Você pode especificar isso em seu arquivo values.yaml em:

yaml
expose:
  # Available Options: "loadBalancer", "ingress", "clusterIP", "nodePort"
  type: ingress

Para localizar seu arquivo values.yaml, consulte o blog anterior.

Utilize Múltiplas Instâncias do Harbor

Aumente a contagem de réplicas (replica count) para componentes críticos do Harbor (por exemplo, core, jobservice, portal, registry, trivy) em seu values.yaml para garantir a redundância.

yaml
core:
  replicas: 3
jobservice:
  replicas: 3
portal:
  replicas: 3
registry:
  replicas: 3
trivy:
  replicas: 3
# Embora não seja estritamente para o HA do registry em si, considere aumentar as réplicas do exporter para robustez na disponibilidade de monitoramento
exporter:
  replicas: 3
# Opcionalmente, se estiver usando Ingress, considere aumentar as réplicas do Nginx para melhorar a disponibilidade do Ingress
nginx:
  replicas: 3

Habilite o HA do Banco de Dados (PostgreSQL)

O Harbor inclui um banco de dados PostgreSQL interno, mas não o recomendamos para uso em produção. Veja o porquê:

  1. Falta de Alta Disponibilidade (HA): A configuração padrão interna do PostgreSQL dentro do Helm chart do Harbor é tipicamente uma única instância. Isso cria um ponto único de falha. Se esse pod de banco de dados cair, toda a sua instância do Harbor ficará indisponível.
  2. Escalabilidade Limitada: Um banco de dados embedded não foi projetado para escalonamento independente. Se o uso do seu Harbor crescer, você pode atingir gargalos de desempenho do banco de dados que são difíceis de resolver sem interromper o próprio Harbor.
  3. Gerenciamento de Ciclo de Vida Complexo: Gerenciar backups, recuperação pontual (point-in-time recovery), aplicação de patches e upgrades para um banco de dados stateful diretamente dentro do Helm chart de uma aplicação pode ser significativamente mais complexo e propenso a erros do que com soluções de banco de dados dedicadas.

Assim, é recomendado implantar um cluster PostgreSQL de alta disponibilidade dentro do Kubernetes (por exemplo, usando um Helm chart para Patroni ou CloudNativePG) ou utilizar um serviço de banco de dados gerenciado (managed database service) fora do cluster.

Configure o Harbor para se conectar a este banco de dados HA atualizando o values.yaml:

yaml
database:
  type: "external"
  external:
    host: "192.168.0.1"
    port: "5432"
    username: "user"
    password: "password"
    coreDatabase: "registry"
    # Se estiver usando um secret existente, a chave deve ser "password"
    existingSecret: ""
    # "disable" - Sem SSL
    # "require" - Sempre SSL (ignora verificação)
    # "verify-ca" - Sempre SSL (verifica se o certificado apresentado pelo
    # servidor foi assinado por uma CA confiável)
    # "verify-full" - Sempre SSL (verifica se o certificado apresentado pelo
    # servidor foi assinado por uma CA confiável e o hostname do servidor corresponde ao
    # certificado)
    sslmode: "verify-full"

Implemente o Redis HA

Implante um cluster Redis de alta disponibilidade no Kubernetes (por exemplo, usando um Helm chart para Redis Sentinel ou Redis Cluster) ou utilize um serviço Redis gerenciado. Configure o Harbor para se conectar a esta instância Redis HA atualizando redis.type e os detalhes de conexão em values.yaml.

yaml
redis:
  type: external
  external:
    addr: "192.168.0.2:6397"
    sentinelMasterSet: ""
    tlsOptions:
      enable: true
    username: ""
    password: ""

2. Melhores Práticas de Segurança

A segurança é fundamental para qualquer sistema de produção, especialmente um container registry.

Habilite TLS/SSL

Sempre habilite TLS/SSL para todos os componentes do Harbor. Para gerenciamento automatizado de certificados no Kubernetes, integre com o Cert-Manager e configure-o dentro do seu values.yaml do Helm do Harbor:

yaml
expose:
  tls:
    enabled: true
    certSource: auto # change to manual if using cert-manager
    auto:
      commonName: ""
internalTLS:
  enabled: true
  strong_ssl_ciphers: true
  certSource: "auto"
  core:
    secretName: ""
  jobService:
    secretName: ""
  registry:
    secretName: ""
  portal:
    secretName: ""
  trivy:
    secretName: ""

Configure Role-Based Access Control (RBAC)

Aproveite o RBAC do Kubernetes para gerenciar o acesso aos recursos do Harbor. Após a implantação, integre o Harbor com provedores de identidade corporativos, como LDAP ou OIDC. Consulte os guias de configuração do Harbor para etapas detalhadas: [Configure LDAP/Active Directory Authentication] ou [Configure OIDC Provider Authentication].

Implemente o Escaneamento de Vulnerabilidades

Garanta que o escaneamento de vulnerabilidades esteja habilitado em values.yaml. O Harbor usa o Trivy por padrão. Verifique sua ativação e configuração dentro do Helm chart.

yaml
trivy:
  enabled: true

Ative o Content Trust

O Harbor suporta múltiplos mecanismos de content trust para garantir a integridade de seus artefatos. Para a assinatura moderna de artefatos OCI, o Harbor recomenda Cosign e Notation. Imponha a segurança da implantação no nível do projeto dentro da UI do Harbor ou via Harbor API. Isso permite apenas a implantação de imagens verificadas e criptograficamente assinadas.

Mantenha Atualizações Regulares

Atualize regularmente seu Helm chart do Harbor e os componentes subjacentes do Kubernetes para se beneficiar dos patches de segurança e correções de bugs mais recentes. Use helm upgrade para essa finalidade.


3. Considerações de Storage

O storage eficiente e confiável é crítico para o desempenho e estabilidade do Harbor.

Configure Shared Storage

Para dados persistentes, configure Kubernetes StorageClasses e PersistentVolumes para usar soluções de storage compartilhado como vSAN, NFS, object storage compatível com S3 (por exemplo, MinIO implantado in-cluster ou S3 externo), ou um sistema de arquivos distribuído. Especifique-os em seu values.yaml em:

yaml
persistence:
  enabled: true
  resourcePolicy: "keep"
  persistentVolumeClaim:
    registry:
      #Se deixado vazio, a storage class padrão do cluster kubernetes será usada
      storageClass: "your-storage-class"
    jobservice:
      storageClass: "your-storage-class"
    database:
      storageClass: "your-storage-class"
    redis:
      storageClass: "your-storage-class"
    trivy:
      storageClass: "your-storage-class"

Escolha o Tipo de Storage Apropriado

Defina Kubernetes StorageClasses que se alinhem com sua infraestrutura subjacente (por exemplo, nfs-client, s3). Especifique essas configurações em seu values.yaml:

yaml
persistence:
  enabled: true
  resourcePolicy: "keep"
  imageChartStorage:
    #Specify storage type: "filesystem", "azure", "gcs", "s3", "swift", "oss"
    type: ""
    #Configure specific storage type section based on the selected option

Estime o Dimensionamento do Storage

Calcule cuidadosamente suas necessidades de storage com base no número e tamanho antecipados das imagens de container, bem como em suas políticas de retenção definidas. Configure o tamanho para seus PersistentVolumeClaims em values.yaml.

Implemente Backup e Recuperação Robustos

Estabeleça uma estratégia de backup abrangente para todos os dados do Harbor. Para backups nativos do Kubernetes, considere usar ferramentas como Velero para fazer backup de PersistentVolumes e recursos do Kubernetes. Para object storage, utilize soluções de backup externas. Teste regularmente seus procedimentos de recuperação.

Configure e Execute Garbage Collection

Configure e execute rotineiramente o garbage collection do Harbor. Isso pode ser configurado através da UI do Harbor, definindo um agendamento para execuções automatizadas para remover blobs não utilizados e recuperar espaço de storage de forma eficiente.


4. Monitoramento e Alerta (Alerting)

O monitoramento proativo e o alerta são essenciais para identificar e resolver problemas antes que afetem os usuários.

Colete Métricas Abrangentes

Implante o Prometheus e configure-o para coletar (scrape) métricas dos componentes do Harbor. O Helm chart do Harbor expõe endpoints compatíveis com Prometheus no arquivo values.yaml. Visualize essas métricas usando o Grafana.

yaml
metrics:
  enabled: true
  core:
    path: /metrics
    port: 8001
  registry:
    path: /metrics
    port: 8001
  jobservice:
    path: /metrics
    port: 8001
  exporter:
    path: /metrics
    port: 8001
  serviceMonitor:
    enabled: true

Centralize o Logging

Implemente uma solução de logging centralizada dentro do Kubernetes, como a stack ELK (Elasticsearch, Logstash, Kibana) ou Grafana com Fluentd/Fluent Bit.

Configure Alertas Críticos

Configure regras de alerta no Prometheus (Alertmanager) ou Grafana para eventos críticos, como falhas de componentes, alta utilização de recursos (CPU/memory limits), storage se aproximando da capacidade, falhas em escaneamentos de vulnerabilidade ou tentativas de acesso não autorizado. Defina esses limites com base nos seus requisitos de produção.


5. Configuração de Rede

A configuração de rede adequada garante uma comunicação suave entre os componentes do Harbor e os clientes externos.

Configure Ingress e Resolução de DNS

Conforme já mencionado, implante um Kubernetes Ingress controller ou Load Balancer para expor o Harbor externamente. Garanta que os registros DNS adequados estejam configurados para apontar para o endereço IP do seu Load Balancer.

Configure Proxy Settings (se aplicável)

Se os componentes do Harbor precisarem acessar recursos externos através de um proxy corporativo, configure as definições de proxy dentro do values.yaml. É crucial notar que o campo proxy.components define explicitamente quais componentes do Harbor (por exemplo, core, jobservice, trivy) utilizarão essas configurações de proxy para suas comunicações externas.

yaml
proxy:
  httpProxy:
  httpsProxy:
  noProxy: 127.0.0.1,localhost,.local,.internal
  components:
    - core
    - jobservice
    - trivy

Aloque Largura de Banda Suficiente

Garanta que a infraestrutura de rede subjacente do seu cluster Kubernetes e os nodes tenham largura de banda suficiente para lidar com picos de pushes e pulls de imagens. Monitore o I/O de rede nos nodes que executam os pods do Harbor.


Conclusão

Embora esta não seja uma lista exaustiva de considerações para tornar o Harbor pronto para produção, ao abordar diligentemente esses pontos, você pode transformar sua implantação básica do Harbor em um container registry robusto, seguro e de alta disponibilidade.

Essa abordagem garante que o Harbor sirva como um pilar de sua infraestrutura cloud-native, capaz de suportar fluxos de trabalho exigentes de desenvolvimento e produção. Desde a implementação de Alta Disponibilidade e medidas de segurança rigorosas até a otimização do storage e o estabelecimento de monitoramento proativo, cada etapa contribui para um sistema de gerenciamento de artefatos resiliente e eficiente.

Acompanhe nossa série de blogs sobre Harbor:

  • Blog 1 – Harbor: Your Enterprise-Ready Container Registry for a Modern Private Cloud (Harbor: Seu Container Registry Empresarial Pronto para uma Nuvem Privada Moderna)
  • Blog 2 – Reducing Harbor Deployment Complexity on Kubernetes (Reduzindo a Complexidade da Implantação do Harbor no Kubernetes)

Descubra mais em VMware Cloud Foundation (VCF) Blog.

Precisa de ajuda com suas soluções de TI?

A VirtuAllIT Solutions oferece consultoria especializada em virtualização, cloud computing e infraestrutura tecnológica.