civil-and-structural-engineering
Construindo um Registro de Docker Multi-tenente com Porto
Table of Contents
No mundo containerizado de hoje, gerenciar várias imagens Docker de forma segura e eficiente é crucial para organizações de todos os tamanhos. À medida que as empresas dimensionam suas implementações de containers, a necessidade de um registro de container robusto, seguro e rico em recursos torna-se fundamental. Harbor, um projeto graduado da CNCF com mais de 30.000 estrelas GitHub, é o registro de containers nativos de nuvem de código aberto mais amplamente adotado. Este guia abrangente acompanha você através da construção de um registro Docker multidoente com Harbor, cobrindo tudo, desde a instalação até configurações de segurança avançadas.
O que é Harbor e por que o escolheu?
Harbor é um registro de código aberto que protege artefatos com políticas e controle de acesso baseado em funções, garante imagens são digitalizadas e livres de vulnerabilidades, e assina imagens como confiáveis. Harbor estende a distribuição de Docker código aberto adicionando as funcionalidades geralmente exigidas por usuários como segurança, identidade e gerenciamento.
A VMware open-sourced Harbor, em 2016, aderiu ao CNCF em julho de 2018, e graduou-se em junho de 2020, tornando-se o primeiro registo de código aberto a atingir o status de graduado da CNCF. Este marco reflete tanto a sua maturidade como a força do seu apoio comunitário.
Principais características que separam o porto
O porto distingue-se dos registos básicos da Docker e até mesmo das alternativas comerciais através de várias capacidades de nível empresarial:
- Multi-tendência Através de Projetos: Harbor organiza conteúdo em projetos, com cada projeto recebendo suas próprias políticas RBAC, configurações de varredura, limites de quotas e regras de retenção de tags
- Built-in Vulnerability Scanning: Harbor inclui políticas de varredura em empurrar com backends pluggáveis, incluindo Trivy, Clair e Anchore que bloqueiam imagens vulneráveis antes da implantação
- Image Signing and Content Trust: Harbor suporta assinatura de artefato com Cosign e notação para segurança da cadeia de suprimentos, além de políticas de confiança de conteúdo que aplicam apenas imagens assinadas podem ser puxadas
- Replicação multi-registro: O porto sincroniza imagens em data centers, regiões de nuvem ou ambientes híbridos com filtros baseados em políticas em repositórios, etiquetas e rótulos
- Controlo de Acesso Compreensivo: A autenticação conecta-se ao LDAP, Active Directory, provedores OIDC ou à base de dados incorporada
- Contas Robô para Automação: Contas Robot dão acesso não humano a pipelines CI/CD com permissões scoped e datas de validade
- Track completo de auditoria: Monitor de registros de auditoria que empurraram, puxaram, apagaram ou escanearam artefatos
Quando escolher o porto sobre as alternativas
As organizações executam o Harbor quando precisam de um registro de contêineres privado com controles de segurança que hospedam registros cobrando ou simplesmente não oferecem, sendo que ambientes com ar, indústrias regulamentadas e configurações multinuvem são casos típicos de uso.
Comparado ao Docker Hub, o Harbor oferece digitalização de vulnerabilidade integrada, assinatura de imagem, RBAC, registro de auditoria e replicação de multi-registros — recursos que exigem planos pagos ou não disponíveis para Docker Hub. Para organizações com requisitos de residência de dados, mandatos de conformidade ou necessidade de repositórios privados ilimitados, Harbor oferece uma alternativa atraente de auto-anfitrião.
Compreendendo a arquitetura multi-dotação do porto
Antes de mergulhar na instalação, é essencial entender como a Harbor implementa multi-propriedade e como esta arquitetura suporta o isolamento e segurança organizacional.
Projetos como Limites de Tenant
Os artefatos dentro do porto são de propriedade de um projeto, e este agrupamento permite configurações e permissões para serem ajustadas para conjuntos de artefatos em oposição a um nível puramente global. Os projetos servem como unidade fundamental de multi-tendência no porto, agindo como espaços de nomes isolados que separam imagens de containers, cartas Helm e outros artefatos OCI por equipe, departamento ou cliente.
As capacidades de multi-proteção da Harbor incluem projetos que atuam como espaços de nomes que isolam modelos por equipe, ambiente ou caso de uso, juntamente com RBAC de fino grão para controlar quem pode empurrar, puxar ou administrar artefatos.Esse isolamento baseado em projetos garante que diferentes inquilinos não podem acessar artefatos uns dos outros sem permissão explícita.
Controle de acesso baseado em funções (RBAC)
Os usuários acessam diferentes repositórios através de "projetos" e um usuário pode ter permissão diferente para imagens ou gráficos Helm sob um projeto. Harbor implementa um sistema RBAC sofisticado com funções pré-definidas que podem ser atribuídas ao nível do projeto:
- Convidado: Acesso apenas para leitura a ver e puxar artefatos
- [[FLT: 0]]Desenvolvedor: Permissões de leitura-escrita para empurrar e puxar imagens
- Mantenedor: Pode gerenciar membros do projeto e configurar configurações do projeto
- Admin. do Projeto: Controle total do projeto incluindo recursos de leitura-escrita-configuração
Este modelo de permissão granular permite que as organizações implementem o princípio do menor privilégio, garantindo que os usuários e sistemas automatizados tenham acesso apenas aos recursos de que necessitam.
Integração de autenticação
Nos casos mais simples, os usuários podem ser criados pelo próprio Harbor e gerenciados internamente, no entanto, isso não escala particularmente bem, então a Harbor também fornece integração em outros serviços populares, como OIDC, Active Directory e LDAP. Essa flexibilidade permite que as organizações aproveitem a infraestrutura de gerenciamento de identidade existente, reduzindo o custo administrativo e garantindo políticas de acesso consistentes entre sistemas.
Pré-requisitos e requisitos do sistema
Antes de instalar o Harbor, garanta que seu ambiente atenda aos requisitos necessários para uma implantação pronta para a produção.
Requisitos de Hardware
Para uma produção implantação de porto que apoia vários inquilinos, considere as seguintes especificações mínimas:
- CPU: 4 núcleos mínimos (8+ núcleos recomendados para ambientes de alto tráfego)
- [[FLT: 0]]Memoria: 8 GB de RAM mínimo (16+ GB recomendado)
- Armazenamento: Depende do volume da imagem; comece com 100 GB e planifique o crescimento
- Rede: Conectividade de rede estável com largura de banda suficiente para operações de push/pull de imagem
Pré-requisitos de software
O porto requer os seguintes componentes de software:
- Sistema operacional: Distribuição Linux (Ubuntu 20.04+, CentOS 7+, RHEL 7+, ou similar)
- [[FLT: 0]] Motor de Docker: Versão 20.10.0 ou superior
- Docker Compose: Versão 1.29.0 ou superior (para o método de instalação do Docker Compose)
- Kubernetes: Versão 1.20+ (se a implantação via Helm)
- [[FLT: 0]]OpenSSL: Para gerar certificados SSL/TLS
Configuração de Rede e Domínio
Para uma implantação de produção, você precisará:
- Um nome de domínio totalmente qualificado (FQDN) apontando para o seu servidor Harbor
- Certificados SSL/TLS (assinados para ensaio, assinados para produção)
- Portas de firewall abertas: 80 (HTTP), 443 (HTTPS), e opcionalmente 4443 (Notário)
Instalando o porto: Guia passo a passo
O porto pode ser instalado em qualquer ambiente Kubernetes ou em um sistema com suporte ao Docker. Este guia abrange ambos os métodos de instalação, começando com a abordagem Docker Compose para simplicidade, seguida pela implantação do Kubernetes usando gráficos Helm.
Método 1: Instalação de porto com a Docker Compose
A Docker Compose fornece o caminho mais rápido para a criação e execução do Harbor, tornando-o ideal para ambientes de desenvolvimento e implantações menores.
Passo 1: Instalar a composição do docker e do docker
Primeiro, certifique-se de que a Docker e a Docker Compose estão instaladas no seu sistema. No Ubuntu, você pode instalá-los com os seguintes comandos:
# Update package index
sudo apt update
# Install prerequisites
sudo apt install -y ca-certificates curl gnupg lsb-release
# Add Docker's official GPG key
sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
# Set up Docker repository
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
# Install Docker Engine and Docker Compose
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin
# Start and enable Docker
sudo systemctl start docker
sudo systemctl enable docker
# Verify installation
docker --version
docker compose version
Passo 2: Baixar o porto
Transferir os binários de lançamento do porto e seguir o Guia de Configuração do & amp; de Instalação para instalar o porto. Poderá transferir o último lançamento do porto a partir do repositório oficial do GitHub:
# Download the latest Harbor release
cd /opt
curl -s https://api.github.com/repos/goharbor/harbor/releases/latest | grep browser_download_url | cut -d '"' -f 4 | grep '.tgz$' | wget -i -
# Extract the archive
tar xzvf harbor-offline-installer-*.tgz
# Navigate to Harbor directory
cd harbor
Passo 3: Configurar o Porto
Harbor usa um arquivo de configuração YAML que deve ser personalizado para o seu ambiente:
# Copy the template configuration file
cp harbor.yml.tmpl harbor.yml
# Edit the configuration file
nano harbor.yml
Parâmetros de configuração chave a modificar:
# The hostname or IP address of your Harbor server
hostname: harbor.yourdomain.com
# HTTP configuration
http:
port: 80
# HTTPS configuration (recommended for production)
https:
port: 443
certificate: /path/to/your/certificate.crt
private_key: /path/to/your/private_key.key
# Harbor admin password (change this!)
harbor_admin_password: YourSecurePassword123!
# Database configuration
database:
password: DatabasePassword123!
max_idle_conns: 100
max_open_conns: 900
# Data storage location
data_volume: /data
# Log configuration
log:
level: info
local:
rotate_count: 50
rotate_size: 200M
location: /var/log/harbor
Passo 4: Gerar certificados SSL (Opcional, mas Recomendado)
Para implantação de produção, use certificados assinados pela CA. Para testar, você pode gerar certificados autoassinados:
# Create certificate directory
mkdir -p /opt/harbor/certs
cd /opt/harbor/certs
# Generate private key
openssl genrsa -out harbor.key 4096
# Generate certificate signing request
openssl req -new -key harbor.key -out harbor.csr -subj "/C=US/ST=State/L=City/O=Organization/CN=harbor.yourdomain.com"
# Generate self-signed certificate (valid for 365 days)
openssl x509 -req -days 365 -in harbor.csr -signkey harbor.key -out harbor.crt
# Update harbor.yml with certificate paths
# certificate: /opt/harbor/certs/harbor.crt
# private_key: /opt/harbor/certs/harbor.key
Passo 5: Instale o porto com o scanner Trivy
Trivy é o scanner padrão desde Harbor v2.2. Para instalar Harbor com o scanner de vulnerabilidade Trivy ativado:
# Run the installation script with Trivy
sudo ./install.sh --with-trivy
# Verify all containers are running
docker compose ps
Você deve ver saída mostrando todos os serviços Harbor em execução, incluindo porto-core, porto-portal, porto-db, registro, trivy-adaptador, e outros.
Passo 6: Acesse a interface Web do porto
Uma vez concluída a instalação, você deve ser capaz de acessar a interface de usuário Harbor em seu navegador da web em https://harbor.yourdomain.com e fazer login com o usuário administrador e a senha que você definiu.
Método 2: Instalação de porto em Kubernetes com Helm
Se você quiser implantar o Harbor em Kubernetes, por favor use o gráfico do Harbor. A implantação do Kubernetes oferece melhor escalabilidade, alta disponibilidade e integração com ecossistemas nativos da nuvem.
Passo 1: Adicionar Repositório do Leme do Porto
# Add Harbor Helm repository
helm repo add harbor https://helm.goharbor.io
# Update Helm repositories
helm repo update
# Create namespace for Harbor
kubectl create namespace harbor
Passo 2: Criar Helm Values File
Crie um arquivo de valores personalizados para configurar sua implantação do porto:
cat > harbor-values.yaml <<EOF
expose:
type: ingress
tls:
enabled: true
certSource: secret
secret:
secretName: harbor-tls
ingress:
hosts:
core: harbor.yourdomain.com
className: nginx
annotations:
cert-manager.io/cluster-issuer: "letsencrypt-prod"
externalURL: https://harbor.yourdomain.com
persistence:
enabled: true
resourcePolicy: "keep"
persistentVolumeClaim:
registry:
storageClass: "fast-ssd"
size: 500Gi
database:
storageClass: "fast-ssd"
size: 10Gi
redis:
storageClass: "fast-ssd"
size: 1Gi
harborAdminPassword: "ChangeThisPassword123!"
database:
type: internal
redis:
type: internal
trivy:
enabled: true
notary:
enabled: true
EOF
Passo 3: Instalar o porto via Helm
# Install Harbor
helm install harbor harbor/harbor
-n harbor
-f harbor-values.yaml
# Wait for all components to be ready
kubectl wait --for=condition=available --timeout=600s
deployment --all -n harbor
# Check pod status
kubectl get pods -n harbor
# Get Harbor admin password
kubectl get secret harbor-core -n harbor -o jsonpath='{.data.HARBOR_ADMIN_PASSWORD}' | base64 -d
Configuração de multi-propriedade em Porto
Com a Harbor instalada, o próximo passo é configurar multi-proporção para suportar várias equipes, departamentos ou clientes dentro de sua organização.
Criação de Projetos para os Inquilinos
Você pode criar vários projetos em Harbor para separar os artefatos armazenados por diferentes equipes ou sub-organizações dentro de uma empresa. Projetos podem ser criados através da interface web em Harbor ou programaticamente através da API.
Criando Projetos via Interface Web
Criar um projeto através do portal Harbor:
- Entrar no porto como administrador
- Clique em "Projetos" no menu de navegação à esquerda
- Clique no botão "PROJETO NOVO"
- Configurar as configurações do projeto:
- Nome do projeto: Use um nome descritivo (por exemplo, "equipe-frontend", "cliente-acme")
- Nível de acesso: Escolha "Publico" (qualquer um pode puxar) ou "Privado" (necessário autenticação)
- Contingente de armazenamento: Limite para impedir que qualquer inquilino consuma armazenamento excessivo
- Cache de Proxy: Configure opcionalmente o projeto como cache proxy para registros externos
- Clique em "OK" para criar o projeto
Criando Projetos via API
Para a criação automatizada de projetos ou operações em massa, use a API REST do porto:
# Set Harbor credentials
HARBOR_URL="https://harbor.yourdomain.com"
HARBOR_USER="admin"
HARBOR_PASSWORD="YourSecurePassword123!"
# Create multiple projects
for project in team-frontend team-backend team-ml customer-alpha customer-beta; do
curl -X POST "${HARBOR_URL}/api/v2.0/projects"
-H "Content-Type: application/json"
-u "${HARBOR_USER}:${HARBOR_PASSWORD}"
-d "{
"project_name": "${project}",
"public": false,
"storage_limit": 107374182400
}"
echo "Created project: $project"
done
# List all projects
curl -X GET "${HARBOR_URL}/api/v2.0/projects"
-u "${HARBOR_USER}:${HARBOR_PASSWORD}" | jq .
Configuração das Configuração do Nível do Projecto
Cada projeto em Harbor pode ser configurado de forma independente com configurações que impõem políticas de segurança e limites de recursos.
Quotas de armazenagem
As quotas de armazenamento impedem os inquilinos individuais de consumirem espaço em disco excessivo:
- Navegar para o projeto
- Clique na aba "Configuração"
- Em "Gestão de recursos", definir a quota de armazenamento (por exemplo, 100 GB)
- Clique em "Salvar"
Políticas de Varredura de Vulnerabilidade
Configurar a verificação automática de vulnerabilidade para imagens empurradas para o projeto:
- Ir para o projeto "Configuração"
- Activar "Examinar automaticamente as imagens ao empurrar"
- Definir "Prevenir imagens vulneráveis de execução" para bloquear imagens com vulnerabilidades críticas
- Configurar limiar de gravidade (por exemplo, bloquear imagens com vulnerabilidades "Altas" ou "Críticas")
Políticas de retenção de etiquetas
Políticas de retenção automaticamente limpam imagens antigas ou não utilizadas para gerenciar o armazenamento de forma eficiente:
- Navegar para a página "Política" do projeto
- Clique em "Adicionar regra" sob retenção de etiqueta
- Configurar critérios de retenção:
- Padrão de correspondência de repositório (por exemplo, "**" para todos os repositórios)
- Regra de retenção (por exemplo, "reter os mais recentes 10 artefatos empurrados")
- Padrão de correspondência de marcas (ex.: excluir as etiquetas "últimos" e "produção")
- Clique em "Adicionar" e em "Executar Agora" para testar a política
Confiança de Conteúdo e Assinatura de Imagens
Habilite a confiança de conteúdo para garantir que apenas as imagens assinadas possam ser puxadas:
- No projeto "Configuração", habilite "Ativar a confiança de conteúdo"
- Isso requer que as imagens sejam assinadas usando o Docker Content Trust ou Cosign
- As imagens não assinadas serão rejeitadas quando os usuários tentarem puxá- las
Gerenciando o Acesso ao Usuário e Permissões
Multi-proporção eficaz requer uma gestão cuidadosa do acesso do usuário e permissões para garantir que os inquilinos só podem acessar seus recursos designados.
Estratégias de Gestão do Utilizador
O Harbor suporta várias infra-estruturas de autenticação, permitindo que você escolha a abordagem que melhor se adapta à infraestrutura de gerenciamento de identidade da sua organização.
Gestão Local do Utilizador
Para pequenas implementações ou testes, você pode criar usuários diretamente no porto:
- Entrar como administrador
- Navegar para "Administração" → "Utilizadores"
- Clique em "Novo usuário"
- Preencha os detalhes do usuário (nome de usuário, e-mail, nome completo, senha)
- Clique em "OK"
Integração de diretório LDAP/Active
Para implantações empresariais, integre Harbor com seu LDAP existente ou Active Directory:
- Navegar para "Administração" → "Configuração" → "Autenticação"
- Selecione "LDAP" como o modo de autenticação
- Configurar as configurações do LDAP:
- LDAP URL: ldap://ldap.yourdomain.com:389
- [[FLT: 0]]LDAP Pesquisar DN: cn=admin,dc=seudomínio,dc=com
- [[FLT: 0]]LDAP Base DN: dc=seu domínio, dc=com
- [[FLT: 0]] Filtro LDAP: (objectClass=person)
- [[FLT: 0]]UID LDAP: uid
- [[FLT: 0]]LDAP Âmbito: Subárvore
- Testar a ligação
- Clique em "Salvar"
Integração com o OIDC
Para provedores de identidade modernos como Okta, Auth0, ou Keycloak:
- Nas configurações de "Autenticação", selecione "OIDC"
- Configurar parâmetros OIDC:
- OIDC Nome do Provedor: O seu nome do fornecedor
- Endpoint OIDC: https://your-idp.com
- ID do cliente do OIDC: ID do cliente
- OIDC Cliente secreto: O seu cliente secreto
- Escopo do OIDC: openid, profile,email
- Verificar e salvar
Atribuindo Usuários a Projetos
Uma vez autenticados, atribua-os a projetos com papéis apropriados:
- Navegar para o projeto
- Clique na aba "Membros"
- Clique em "User" ou "GROUP" para adicionar membros
- Procurar pelo usuário ou grupo
- Selecione o papel apropriado:
- Convidado: Acesso somente para leitura para puxar imagens
- [[FLT: 0]]Desenvolvedor: Pode empurrar e puxar imagens
- Mantenedor: Pode gerenciar membros do projeto e configurar configurações
- Admin. do Projeto: Controle total do projeto
- Clique em "OK"
Contas de Robot para Integração CI/CD
As contas de robôs são contas de serviços em Harbor com permissões específicas, usadas para operações automatizadas como pipelines CI/CD empurrando ou puxando imagens sem precisar de credenciais humanas.
Para criar uma conta de robô:
- Navegar para o projeto
- Clique em "Contas Robô" tab
- Clique em "Nova Conta ROBOT"
- Configurar a conta do robô:
- Nome: Nome descritivo (por exemplo, "ci-pipeline-bot")
- Tempo de expiração: Definir uma data de expiração para a segurança
- Permissões: Selecione repositórios e ações específicas (empurrar, puxar, apagar)
- Clique em "ADD"
- Copiar o token gerado imediatamente (não será mostrado novamente)
Use a conta de robô no seu pipeline CI/CD:
# In your CI/CD pipeline (e.g., GitLab CI, Jenkins)
docker login harbor.yourdomain.com -u 'robot$ci-pipeline-bot' -p 'TOKEN_HERE'
docker build -t harbor.yourdomain.com/team-frontend/app:${CI_COMMIT_SHA} .
docker push harbor.yourdomain.com/team-frontend/app:${CI_COMMIT_SHA}
Características de segurança para ambientes multi-doentes
A segurança é fundamental em ambientes multilocatários onde várias equipes ou clientes compartilham infraestrutura. A Harbor oferece recursos de segurança abrangentes para proteger sua cadeia de suprimentos de contêineres.
Varredura de Vulnerabilidade
Ao utilizar scanners de imagens populares, como o Trivy, as imagens podem ser automaticamente digitalizadas para encontrar vulnerabilidades conhecidas, e os resultados desses exames podem ser aproveitados para evitar a extração de artefatos com problemas de segurança não abordados.
Configurando a digitalização automática
Activar a digitalização automática no sistema ou no nível do projecto:
- Para a digitalização em todo o sistema: "Administração" → "Serviços de Interrogatório" → Configurar configurações Trivy
- Para a digitalização de nível de projeto: Projeto → "Configuração" → Habilitar "Scanear automaticamente imagens em push"
- Configurar as pesquisas agendadas para re- digitalizar as imagens existentes para as vulnerabilidades recém- descobertas
Políticas de Prevenção da Vulnerabilidade
Configurar políticas para evitar que imagens vulneráveis sejam implantadas:
- No projeto "Configuração", habilite "Prevenir imagens vulneráveis de execução"
- Definir o limiar de gravidade (por exemplo, "Alto" ou "Crítico")
- Imagens com vulnerabilidades em ou acima deste limiar não podem ser puxadas
Visualizando resultados de digitalização
Para visualizar os resultados da verificação de vulnerabilidade:
- Navegar para o projeto e repositório
- Clique em um artefato/etiqueta
- Veja a guia "Vulnerabilidades" para obter resultados detalhados da varredura
- Reveja detalhes do CVE, níveis de gravidade e correções disponíveis
Assinatura de imagem e confiança de conteúdo
Harbor suporta a assinatura de imagens de contêineres usando o Docker Content Trust (levantagem de Notário) para garantir autenticidade e proveniência, e políticas que impeçam que imagens não assinadas sejam implantadas também podem ser ativadas.
Habilitar a Confiança de Conteúdo
Para habilitar a confiança de conteúdo para um projeto:
- Navegar para o projeto "Configuração"
- Activar "Ativar a confiança de conteúdo"
- Activar "Prevenir imagens não assinadas de serem puxadas"
Assinando imagens com confiança de conteúdo do Docker
# Enable Docker Content Trust
export DOCKER_CONTENT_TRUST=1
export DOCKER_CONTENT_TRUST_SERVER=https://harbor.yourdomain.com:4443
# Push and sign an image
docker push harbor.yourdomain.com/team-frontend/app:v1.0
# The first push will prompt you to create signing keys
# Follow the prompts to set passphrases for root and repository keys
Assinatura com o Cossignate
Para os fluxos de trabalho de assinatura modernos, use Cosign:
# Install Cosign
curl -O -L "https://github.com/sigstore/cosign/releases/latest/download/cosign-linux-amd64"
sudo mv cosign-linux-amd64 /usr/local/bin/cosign
sudo chmod +x /usr/local/bin/cosign
# Generate key pair
cosign generate-key-pair
# Sign an image
cosign sign --key cosign.key harbor.yourdomain.com/team-frontend/app:v1.0
# Verify signature
cosign verify --key cosign.pub harbor.yourdomain.com/team-frontend/app:v1.0
Registo de Auditoria e Compliance
Todas as operações para os repositórios são monitoradas através de logs. Harbor mantém registros de auditoria abrangentes que rastreiam todas as atividades do usuário, facilitando o atendimento aos requisitos de conformidade e investigando incidentes de segurança.
Visualizando registros de auditoria
- Navegar para "Administração" → "Logs"
- Registros de filtro por:
- Username
- Tipo de operação (empurrar, puxar, apagar, criar, etc.)
- Tipo de recurso (projeto, repositório, artefato)
- Intervalo de tempo
- Exportar registos para análise externa ou arquivo
Integração com sistemas SIEM
Para conformidade empresarial, integre os logs do porto com o seu sistema SIEM:
# Configure Harbor to send logs to syslog
# Edit harbor.yml
log:
level: info
external_endpoint:
protocol: tcp
host: syslog.yourdomain.com
port: 514
# Restart Harbor to apply changes
docker compose down
docker compose up -d
Segurança de Rede e Controle de Acesso
Configurar HTTPS
Sempre use HTTPS na produção para criptografar dados em trânsito:
- Obter certificados SSL/TLS de uma CA confiável (Vamos criptografar, DigiCert, etc.)
- Configurar o porto.yml com caminhos de certificados
- Reiniciar o Porto
Configuração do Firewall
Restrinja o acesso ao porto usando regras de firewall:
# Allow HTTPS traffic
sudo ufw allow 443/tcp
# Allow HTTP (if needed for redirect)
sudo ufw allow 80/tcp
# Allow Notary (if using Docker Content Trust)
sudo ufw allow 4443/tcp
# Restrict access to specific IP ranges (optional)
sudo ufw allow from 10.0.0.0/8 to any port 443 proto tcp
# Enable firewall
sudo ufw enable
Replicação de Imagens para Implantações Multi- Locais
Imagens e gráficos podem ser replicados (sincronizados) entre várias instâncias de registro com base em políticas com o uso de filtros (repositório, tag e label), e Harbor automaticamente repete uma replicação se encontrar erros, que podem ser usados para ajudar o balanceamento de carga, alcançar alta disponibilidade e facilitar implantações multi-datacenter em cenários híbridos e multinuvem.
Configurar os Endpoints de Replicação
Os alvos de replicação incluem outras instâncias do porto, Docker Hub, AWS ECR, Google GCR/GAR, Azure ACR, e qualquer registro compatível com OCI.
Para configurar um ponto de avaliação de replicação:
- Navegar para "Administração" → "Registros"
- Clique em "NOVO ENDPOINT"
- Configurar detalhes do ponto de avaliação:
- Provider: Selecione o tipo de registro (Harbor, Docker Hub, AWS ECR, etc.]
- Nome:Nome descritivo para o ponto final
- [[FLT: 0]] URL do ponto final: URL do registro
- ID de acesso/secreto: Credenciais de autenticação
- Testar a ligação
- Clique em "OK"
Criando Regras de Replicação
Defina as políticas de replicação para sincronizar automaticamente as imagens:
- Navegar para "Administração" → "Replicações"
- Clique em "NORMA DE REPLICAÇÃO NOVA"
- Configurar a regra:
- Nome:Nome da regra descritiva
- [[FLT: 0]] Modo de replicação: Empurre (para o comando) ou Puxe (de modo remoto)
- [[FLT: 0]]Registro de origem: Selecione o código fonte
- Registro de destino: Selecione o ponto de avaliação alvo
- [[FLT: 0]]Modo de trigger: Manual, Agendado ou Evento
- Filtros: Especificar quais repositórios, etiquetas ou rótulos a replicar
- Clique em "Salvar"
Casos de uso para replicação
- Recuperação de desastres: Replicar imagens críticas para uma instância secundária Harbor em uma região diferente
- Distribuição geográfica: Sincronizar imagens para registros regionais para tempos de tração mais rápidos
- Nuvem híbrida: Replicar entre o porto e os registos de nuvem
- Desenvolvimento/Separação de Produção: Promover imagens de desenvolvimento para registos de produção
Trabalhar com o Porto: fluxos de trabalho práticos
Uma vez que o Harbor é configurado para multi-propriedade, as equipes podem começar a usá-lo para seus fluxos de trabalho de contêineres.
Levando imagens para o porto
Para empurrar uma imagem para Harbor:
# Log in to Harbor
docker login harbor.yourdomain.com
# Tag your image with Harbor registry path
docker tag myapp:latest harbor.yourdomain.com/team-frontend/myapp:v1.0
# Push the image
docker push harbor.yourdomain.com/team-frontend/myapp:v1.0
Tirando imagens do porto
# Log in to Harbor (if pulling private images)
docker login harbor.yourdomain.com
# Pull the image
docker pull harbor.yourdomain.com/team-frontend/myapp:v1.0
# Run the container
docker run -d harbor.yourdomain.com/team-frontend/myapp:v1.0
Usar o porto com Kubernetes
Para tirar imagens do porto em Kubernetes, crie um segredo de imagem:
# Create a Docker registry secret
kubectl create secret docker-registry harbor-registry
--docker-server=harbor.yourdomain.com
--docker-username=your-username
--docker-password=your-password
[email protected]
-n your-namespace
# Reference the secret in your pod spec
apiVersion: v1
kind: Pod
metadata:
name: myapp
spec:
containers:
- name: myapp
image: harbor.yourdomain.com/team-frontend/myapp:v1.0
imagePullSecrets:
- name: harbor-registry
Cache de Proxy para Registros Externos
O recurso de cache proxy do Harbor permite que o Harbor atue como um proxy de cache para registros externos, reduzindo o uso da largura de banda e melhorando o desempenho de tração.
Para configurar um projeto de cache proxy:
- Criar um novo projeto
- Selecione "Cache de Procura" como o tipo de projeto
- Escolha o registro de destino (Docker Hub, Quay.io, etc.)
- Configurar credenciais se necessário
- Puxar imagens através do porto usando o caminho da cache do proxy
# Instead of pulling from Docker Hub directly
docker pull nginx:latest
# Pull through Harbor proxy cache
docker pull harbor.yourdomain.com/dockerhub-proxy/library/nginx:latest
Backup e Recuperação de Desastres
Proteger a sua implantação no porto e os seus dados é fundamental para a continuidade dos negócios.
Amparar os Dados do Porto
Harbor usa um banco de dados para armazenar seus dados, e por padrão, ele usa um banco de dados PostgreSQL que é gerenciado pelo Docker.
Para apoiar o Harbor:
# Stop Harbor
cd /opt/harbor
docker compose down
# Backup the data directory
sudo tar -czf harbor-backup-$(date +%Y%m%d).tar.gz /data
# Backup the configuration
sudo cp harbor.yml harbor.yml.backup
# Backup the database (if using external database)
docker exec harbor-db pg_dump -U postgres registry > harbor-db-backup-$(date +%Y%m%d).sql
# Restart Harbor
docker compose up -d
Programa de Cópia de Segurança Automatizado
#!/bin/bash
# harbor-backup.sh
BACKUP_DIR="/backup/harbor"
DATE=$(date +%Y%m%d-%H%M%S)
HARBOR_DIR="/opt/harbor"
DATA_DIR="/data"
# Create backup directory
mkdir -p $BACKUP_DIR
# Stop Harbor
cd $HARBOR_DIR
docker compose down
# Backup data volume
tar -czf $BACKUP_DIR/harbor-data-$DATE.tar.gz $DATA_DIR
# Backup configuration
cp $HARBOR_DIR/harbor.yml $BACKUP_DIR/harbor-config-$DATE.yml
# Restart Harbor
docker compose up -d
# Remove backups older than 30 days
find $BACKUP_DIR -name "harbor-*" -mtime +30 -delete
echo "Backup completed: $BACKUP_DIR/harbor-data-$DATE.tar.gz"
Agendar este programa com o cron:
# Run backup daily at 2 AM
0 2 * * * /usr/local/bin/harbor-backup.sh >> /var/log/harbor-backup.log 2>&1
Restaurando da cópia de segurança
# Stop Harbor
cd /opt/harbor
docker compose down
# Restore data directory
sudo rm -rf /data
sudo tar -xzf /backup/harbor/harbor-data-20260402.tar.gz -C /
# Restore configuration
sudo cp /backup/harbor/harbor-config-20260402.yml /opt/harbor/harbor.yml
# Restart Harbor
docker compose up -d
Monitoramento e otimização de desempenho
Monitorar a saúde e o desempenho da Harbor garante uma operação ideal e ajuda a identificar problemas antes de impactar os usuários.
Monitoramento da Saúde do Porto
Harbor expõe os parâmetros de verificação de saúde:
# Check Harbor health
curl -k https://harbor.yourdomain.com/api/v2.0/health
# Expected response
{
"status": "healthy",
"components": [
{"name": "core", "status": "healthy"},
{"name": "database", "status": "healthy"},
{"name": "redis", "status": "healthy"},
{"name": "registry", "status": "healthy"}
]
}
Prometheus Métricas
Harbor expõe métricas de Prometheus para monitoramento:
# Enable metrics in harbor.yml
metric:
enabled: true
port: 9090
path: /metrics
# Scrape metrics with Prometheus
curl http://harbor.yourdomain.com:9090/metrics
Dicas de otimização de desempenho
- Use o armazenamento SSD: Store Harbor dados em unidades SSD rápidas para melhor desempenho de E/S
- Configure Redis caching: Certifique-se de que Redis tem memória suficiente alocada
- Base de dados sintonizando: Otimizar configurações PostgreSQL para sua carga de trabalho
- Ativar coleta de lixo: Agendar coleta regular de lixo para recuperar armazenamento
- Use cache proxy: Reduza as capturas de registro externo por cache de imagens usadas frequentemente
- Replicação do complemento: Distribuir carga em várias instâncias do porto
Colecção de Lixo
A coleção de lixo é o processo de recuperação de espaço de armazenamento, removendo bolhas e artefatos não referenciados que não são mais necessários.
Para executar a recolha de lixo:
- Navegar para "Administração" → "Coleção de garagem"
- Clique em "GC NOW" para coleta imediata
- Ou programar coleta regular de lixo (por exemplo, semanalmente às 2h00)
Resolver Problemas Comuns
Não é possível carregar imagens
Símptomas: "negado: o acesso solicitado ao recurso é negado" erro
Soluções:]
- Verificar o usuário tem o desenvolvedor ou papel superior no projeto
- Verificar a quota de armazenamento do projeto não foi excedida
- Garantir que o usuário está autenticado:
- Verificar o nome do projecto na etiqueta de imagem corresponde ao projecto existente
Erros no certificado SSL
Símptomas: "x509: certificado assinado por autoridade desconhecida" erro
Soluções:]
- Adicionar o certificado CA do Harbor aos certificados confiáveis do Docker
- Para os certificados autoassinados, copiar o certificado CA para
- Reiniciar o servidor do Docker: [[FLT: 27]]
Lentamente a imagem empurra/puxa
Símptomas: As operações de imagem levam tempo excessivo
Soluções:]
- Verificar a largura de banda e a latência da rede
- Verificar o desempenho de E/S de armazenamento
- Aumentar o máximo de envios/downloads simultâneos do servidor Docker
- Considere usar a replicação do porto para equipes distribuídas geograficamente
- Activar a 'cache' de proxy para imagens externas frequentemente extraídas
Problemas de Ligação à Base de Dados
Símptomas: A interface de porto mostra erros ou não carrega
Soluções:]
- Verificar o estado do contentor da base de dados:
- Verifique credenciais de banco de dados em hangar.yml
- Verificar os registos da base de dados:
- Garantir que a base de dados tenha recursos suficientes (CPU, memória, disco)
Cenários Avançados de Multi-Dotação
Distribuição de Containers de Contêiners de Face de Cliente
O porto pode ser usado para distribuir software contêiner para clientes externos:
- Criar projetos separados para cada cliente
- Usar contas de robôs com datas de validade para acesso ao cliente
- Implementar notificações webhook quando novas versões estão disponíveis
- Configurar replicação para registros específicos do cliente, se necessário
- Usar quotas de projeto para gerenciar armazenamento por cliente
Implantação de várias regiões
Para organizações globais, implante Harbor em várias regiões:
- Implantar instâncias do porto em cada região principal (EUA, UE, APAC)
- Configurar a replicação bidirecional entre instâncias
- Usar balanceamento de carga baseado em DNS para encaminhar usuários para a instância mais próxima
- Implementar autenticação LDAP/OIDC consistente em todas as instâncias
- Centralizar o monitoramento e o registro para todas as instâncias
Requisitos de conformidade e regulamentação
Para as indústrias regulamentadas (saúde, finanças, governo):
- Activar o registo de auditorias abrangente
- Aplicar a verificação obrigatória de vulnerabilidade com políticas de bloqueio
- Requer assinatura de imagem para todas as imagens de produção
- Configurar políticas de retenção para atender aos requisitos de retenção de dados
- Usar a integração LDAP/AD para controle centralizado de acesso
- Implementar regras de segmentação de rede e firewall
- Testes regulares de backup e recuperação de desastres
- Documentar todos os controlos e procedimentos de segurança
Melhores práticas para a implantação de portos multi-doentes
Melhores Práticas de Segurança
- Sempre use HTTPS: Nunca execute Harbor sobre HTTP simples em produção
- Mude as senhas padrão: Imediatamente alterar a senha de administrador após a instalação
- Ativar a digitalização de vulnerabilidade: Configurar a digitalização automática no push
- Inscreva a assinatura de imagem: Requer imagens assinadas para implantação de produção
- Use contas de robôs: Nunca use credenciais pessoais em pipelines CI/CD
- Atualizações de segurança regulares: Mantenha Harbor e seus componentes atualizados
- Princípio do menor privilégio: Concede aos utilizadores permissões mínimas necessárias
- Permite o registo de auditoria: Monitore e reveja regularmente os registos
Melhores práticas operacionais
- Estratégia de backup de implementação: Backups automatizados regulares com procedimentos de restauração testados
- Monitoramento do uso de recursos:
- Configurar quotas de armazenamento: Impedir que os projectos individuais consumam armazenamento excessivo
- Configure políticas de retenção: Limpar automaticamente imagens antigas ou não utilizadas
- Recolha de lixo agendada: Limpeza regular para recuperar espaço de armazenamento
- Procedimentos de documentação: Mantenha documentação para operações comuns e solução de problemas
- Teste recuperação de desastres: Teste regularmente procedimentos de restauração de backup e failover
- Planejamento da capacidade: Monitorar as tendências de crescimento e o plano de escala
Melhores Práticas Organizacionais
- Convenções de navegação: Estabelecer nomenclatura consistente para projetos, repositórios e tags
- Estrutura do projeto: Organizar projetos por equipe, aplicação ou ambiente
- Políticas de controle de acesso: Definir políticas claras para quem pode acessar o que
- Estratégia de marcação: Use versionamento semântico e tags significativas
- Formação e documentação: Assegurar que as equipas compreendam como utilizar eficazmente o porto
- Gestão de mudança: Processos de aprovação de implementação para alterações de configuração
- Comunicação: Estabelecer canais para anunciar manutenção e atualizações
Integrando o porto com o seu ecossistema DevOps
Integração CI/CD Pipeline
Exemplo GitLab CI pipeline:
stages:
- build
- scan
- deploy
variables:
HARBOR_REGISTRY: harbor.yourdomain.com
HARBOR_PROJECT: team-frontend
IMAGE_NAME: myapp
build:
stage: build
script:
- docker login -u robot$ci-bot -p $HARBOR_TOKEN $HARBOR_REGISTRY
- docker build -t $HARBOR_REGISTRY/$HARBOR_PROJECT/$IMAGE_NAME:$CI_COMMIT_SHA .
- docker push $HARBOR_REGISTRY/$HARBOR_PROJECT/$IMAGE_NAME:$CI_COMMIT_SHA
scan:
stage: scan
script:
- |
# Wait for Harbor to scan the image
sleep 30
# Check scan results via Harbor API
SCAN_STATUS=$(curl -u robot$ci-bot:$HARBOR_TOKEN
"$HARBOR_REGISTRY/api/v2.0/projects/$HARBOR_PROJECT/repositories/$IMAGE_NAME/artifacts/$CI_COMMIT_SHA"
| jq -r '.scan_overview.scan_status')
if [ "$SCAN_STATUS" != "Success" ]; then
echo "Vulnerability scan failed"
exit 1
fi
deploy:
stage: deploy
script:
- kubectl set image deployment/myapp myapp=$HARBOR_REGISTRY/$HARBOR_PROJECT/$IMAGE_NAME:$CI_COMMIT_SHA
only:
- main
Integração Webhook
Configurar os webhooks para activar as acções quando as imagens são empurradas:
- Navegar para o projeto "Webhooks"
- Clique em "Novo WEBHOOK"
- Configurar o webhook:
- Endpoint URL: Seu URL receptor de webhook
- [[FLT: 0]]Eventos: Selecione eventos para ativar (empurrar, puxar, excluir, escanear concluída)
- [[FLT: 0]]Autenticação: Configurar autenticação se necessário
- Teste o webhook
- Clique em "Continuar"
Repositório de Gráficos do Leme
O porto também pode servir como repositório de gráficos Helm:
# Add Harbor as Helm repository
helm repo add myteam https://harbor.yourdomain.com/chartrepo/team-frontend
--username your-username
--password your-password
# Push a Helm chart to Harbor
helm package ./mychart
helm push mychart-1.0.0.tgz myteam
# Install from Harbor
helm install myapp myteam/mychart
Proofing futuro seu porto implantação
Continuando atual com as Atualizações
A partir do v2.15.0, os artefatos de liberação do porto são criptograficamente assinados usando o Cosign para garantir autenticidade e integridade. Sempre verifique as versões do porto antes de atualizar:
# Download Harbor release and signature
wget https://github.com/goharbor/harbor/releases/download/v2.15.0/harbor-offline-installer-v2.15.0.tgz
wget https://github.com/goharbor/harbor/releases/download/v2.15.0/harbor-offline-installer-v2.15.0.tgz.sigstore.json
# Verify signature
cosign verify-blob
--bundle harbor-offline-installer-v2.15.0.tgz.sigstore.json
--certificate-oidc-issuer https://token.actions.githubusercontent.com
--certificate-identity-regexp '^https://github.com/goharbor/harbor/.github/workflows/publish_release.yml@refs/tags/v.*$'
harbor-offline-installer-v2.15.0.tgz
Considerações sobre Escalas
À medida que a sua organização cresce, considere:
- Escala horizontal: Implanta várias instâncias do porto com equilíbrio de carga
- Base de dados externa:Use PostgreSQL gerenciado para uma melhor escalabilidade e confiabilidade
- Redis externas:Use o cluster Redis gerenciado ou Redis para cache
- [[FLT: 0]] Armazenamento de objetos: Use S3, Azure Blob ou GCS para armazenamento de imagens em vez de disco local
- [[FLT: 0]] Integração com o CDN: Usar o CDN para distribuição global de imagens
Casos de Uso Emergentes
O porto sempre foi compatível com o OCI, o que significa que pode armazenar e distribuir qualquer artefato que esteja de acordo com a especificação de Distribuição OCI, e a extensibilidade da especificação OCI significa que os modelos de IA podem agora alavancar essa mesma infraestrutura com a mesma segurança, governança e maturidade operacional. O porto está sendo cada vez mais utilizado para:
- Registro do modelo AI/ML:] Modelos de aprendizagem de máquina de armazenamento e distribuição como artefactos OCI
- módulos WASM:
- Projeto de Software de Materiais (SBOM): Armazenar e gerenciar SBOMs ao lado de imagens
- Pacotes políticos:]Divulgar políticas de OPA e outros artefatos de configuração
Conclusão
Construir um registro multi-docker com a Harbor oferece às organizações uma solução poderosa, segura e escalável para gerenciar imagens de contêineres em equipes, departamentos e até mesmo clientes. O Harbor faz a ponte entre a lacuna como um registro de contêineres de código aberto, de nível empresarial, que traz segurança, desempenho e soberania para o gerenciamento de imagens de contêineres, integrando-se perfeitamente com paradigmas operacionais existentes e fornecendo uma solução robusta para as necessidades modernas de gerenciamento de imagens de contêineres.
Ao implementar as práticas descritas neste guia – desde a instalação e configuração adequadas até o endurecimento da segurança, a configuração multilocacional e as melhores práticas operacionais – você pode construir uma implantação de Harbor pronta para a produção que atenda às necessidades da sua organização hoje em dia, mantendo-se flexível o suficiente para se adaptar aos requisitos futuros.
Chaves de compra para multi-proporção Porto de sucesso:
- Os projetos são a fundação: Use projetos para criar namespaces isolados para diferentes inquilinos
- Segurança é primordial: Activar a digitalização de vulnerabilidade, assinatura de imagens e registo de auditoria abrangente
- A automação é essencial: Use contas de robôs, webhooks e integração de API para fluxos de trabalho CI/CD
- Planeje para escala: Implemente replicação, monitoramento e planejamento de capacidade desde o início
- Mantenha-se envolvido: Junte-se à comunidade do porto, mantenha-se atualizado com atualizações e contribua de volta
Quer esteja gerenciando contêineres para uma pequena equipe de desenvolvimento ou operando uma plataforma multidotação em grande escala que atende centenas de clientes, Harbor fornece as características, flexibilidade e suporte comunitário necessários para ter sucesso. Comece com o básico, implemente as melhores práticas de segurança e gradualmente adote recursos avançados à medida que suas necessidades evoluem.
Para mais informações e recursos, visite o site oficial [Portuário oficial, explore o repositório GitHub[, junte-se à comunidade no Slack e consulte a documentação completa Harbor. A comunidade Harbor está ativa, acolhedora e pronta para ajudá-lo a ter sucesso com o seu registro de contêineres.