Table of Contents
En el mundo containerizzato de hoy, gestionar múltiples imágenes Docker de forma segura y eficiente es crucial para las organizaciones de todos los tamaños. A medida que las empresas escalan sus implementaciones de contenedores, la necesidad de un registro de contenedores sólido, seguro y rico en características se convierte en primordial. Portuaje, un proyecto graduado CNCF con más de 30.000 estrellas GitHub, es el registro de contenedores nativos de código abierto más adoptado.
¿Qué es Puerto y por qué elegirlo?
Harbor es un registro de código abierto que asegura artefactos con políticas y control de acceso basado en roles, garantiza que las imágenes sean escaneadas y libres de vulnerabilidades, y que las imágenes de signos sean de confianza. Harbor extiende la distribución de Docker de código abierto agregando las funcionalidades que generalmente requieren los usuarios como seguridad, identidad y gestión.
VMware abrió-sourced Harbor en 2016, se unió a la CNCF en julio de 2018, y se graduó en junio de 2020 — lo que lo convierte en el primer registro de código abierto para alcanzar el estatus graduado de CNCF. Este hito refleja tanto su madurez como la fuerza de su apoyo comunitario.
Características clave que establecen el puerto
Harbor se distingue de los registros básicos de Docker e incluso de alternativas comerciales a través de varias capacidades de grado empresarial:
- Multi-tenancy A través de proyectos: Portugués organiza contenido en proyectos, con cada proyecto consiguiendo sus propias políticas de RBAC, ajustes de escaneo, límites de cuota y reglas de retención de etiquetas
- Exploración de vulnerabilidades: El puerto incluye políticas de escaneo en el puño con backends enchubles incluyendo Trivy, Clair y Anchore que bloquean imágenes vulnerables antes de desplegarse
- Finanza de firmas de imágenes y contenidos: Portuaria apoya la firma de artefactos con Cosign y notación para la seguridad de la cadena de suministro, además de políticas de confianza de contenido que sólo ejecutan imágenes firmadas pueden ser tiradas
- Replicación de registro múltiple: Portuario sincroniza imágenes en centros de datos, regiones de la nube o entornos híbridos con filtros basados en políticas en repositorios, etiquetas y etiquetas
- Control de acceso amplio: La autenticación se conecta a LDAP, Active Directory, proveedores OIDC o a la base de datos integrada
- Cuentas de robot para la automatización: Las cuentas de robot dan acceso a tuberías CI/CD no humano con permisos de alcance y fechas de vencimiento.
- Trail de auditoría completo: Recorrido de registros de auditoría que empujaron, tiraron, eliminaron o escanearon artefactos
Cuándo elegir puerto sobre alternativas
Las organizaciones ejecutan Harbor cuando necesitan un registro de contenedores privado con controles de seguridad que alojan los registros cobran o simplemente no ofrecen, con entornos de ventilación, industrias reguladas y configuraciones de multi-cloud siendo casos de uso típicos.
Comparado con Docker Hub, Harbor ofrece una exploración de vulnerabilidad integrada, firma de imágenes, RBAC, registro de auditorías y replicación multi-registrística, características que requieren planes de Docker Hub pagados o no están disponibles. Para organizaciones con requisitos de residencia de datos, mandatos de cumplimiento, o la necesidad de repositorios privados ilimitados, Harbor proporciona una alternativa convincente.
Comprender la arquitectura multi-tenancy de Harbor
Antes de sumergirse en la instalación, es esencial entender cómo Harbor implementa la multi-tenancia y cómo esta arquitectura apoya el aislamiento organizativo y la seguridad.
Proyectos como Fronteras de Tenant
Los objetos dentro de Harbor son propiedad de un proyecto, y este agrupamiento permite que los ajustes y permisos sean afinados para conjuntos de artefactos en lugar de un nivel puramente global. Los proyectos sirven como unidad fundamental de multi-tenancy en Harbor, actuando como espacios de nombres aislados que separan imágenes de contenedores, diagramas de helm y otros artefactos de OCI por equipo, departamento o cliente.
Las capacidades de multitenancia de Harbor incluyen proyectos que actúan como espacios de nombres que aíslan modelos por equipo, medio ambiente o caso de uso, junto con RBAC fino para controlar quién puede empujar, tirar o administrar artefactos. Este aislamiento basado en proyectos asegura que diferentes inquilinos no pueden acceder a los artefactos de los otros sin permiso explícito.
Control de acceso basado en roles (RBAC)
Los usuarios acceden a diferentes repositorios a través de 'proyectos' y un usuario puede tener diferentes permisos para imágenes o gráficos Helm bajo un proyecto. Harbor implementa un sofisticado sistema RBAC con roles predefinidos que pueden ser asignados a nivel del proyecto:
- Guest:] Acceso sólo lectura a la vista y a los artefactos de atracción
- Desarrollo: Autorizaciones de escritura para empujar y tirar imágenes
- Manier: Puede gestionar los miembros del proyecto y configurar la configuración del proyecto
- Proyecto Admin: Control completo sobre el proyecto, incluyendo capacidades de configuración de lectura-escritura
Este modelo de permisos granulares permite a las organizaciones aplicar el principio de mínimo privilegio, garantizando que los usuarios y los sistemas automatizados tengan acceso únicamente a los recursos que necesitan.
Authentication Integration
En los casos más simples, los usuarios pueden ser creados por Harbor en sí mismos y gestionados internamente, sin embargo, esto no escala particularmente bien, así que Harbor también proporciona integración en otros servicios populares como OIDC, Active Directory y LDAP. Esta flexibilidad permite a las organizaciones aprovechar la infraestructura de gestión de identidad existente, reduciendo la sobrecarga administrativa y garantizando políticas de acceso consistentes a través de sistemas.
Prerrequisitos y requisitos del sistema
Antes de instalar Harbor, asegúrese de que su entorno cumple con los requisitos necesarios para una implementación lista para la producción.
Requisitos de hardware
Para una implementación de puerto de producción que soporta múltiples inquilinos, considere las siguientes especificaciones mínimas:
- CPU: 4 núcleos mínimos (8+ núcleos recomendados para entornos de alta trafico)
- Memoria: 8 GB de RAM mínimo (16+ GB recomendados)
- Fuente: Depende del volumen de imagen; comience con 100 GB y plan de crecimiento
- Redes: Conectividad de red estable con suficiente ancho de banda para operaciones de impulso de imagen/pull
Prerrequisitos de software
Portuario requiere los siguientes componentes de software:
- Sistema operativo: Distribución Linux (Ubuntu 20.04+, CentOS 7+, RHEL 7+, o similar)
- Motor de muelles: Versión 20.10.0 o superior
- Docker Compose: Versión 1.29.0 o superior (para el método de instalación Docker Compose)
- Kubernetes: Versión 1.20+ (si se despliega vía Helm)
- OpenSSL: Para generar certificados SSL/TLS
Configuración de red y dominio
Para una implementación de producción, necesitará:
- Un nombre de dominio completamente calificado (FQDN) señalando a su servidor de puerto
- Certificados SSL/TLS (autofirmados para pruebas, firmadas por CA para producción)
- Puertos de cortafuegos abiertos: 80 (HTTP), 443 (HTTPS), y opcionalmente 4443 (Notario)
Instalación de puerto: Guía paso a paso
El puerto puede instalarse en cualquier entorno de Kubernetes o en un sistema con soporte Docker. Esta guía cubre ambos métodos de instalación, comenzando por el enfoque Docker Compose para la simplicidad, seguido por el despliegue de Kubernetes usando gráficos Helm.
Método 1: Instalar puerto con la compostura de muelles
Docker Compose proporciona el camino más rápido para subir y correr a Harbor, lo que lo hace ideal para entornos de desarrollo y despliegues más pequeños.
Paso 1: Instalar Docker y Docker Compose
Primero, asegúrese de que Docker y Docker Compose están instalados en su sistema. En Ubuntu, puede instalarlos con los siguientes 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
Paso 2: Descargar Puerto
Descargar binarios de la versión de Harbor y seguir la Guía de Instalación y Configuración para instalar Harbor. Puede descargar la última versión de Harbor del repositorio GitHub oficial:
# 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
Paso 3: Configurar Puerto
Harbor utiliza un archivo de configuración YAML que debe ser personalizado para su entorno:
# Copy the template configuration file
cp harbor.yml.tmpl harbor.yml
# Edit the configuration file
nano harbor.yml
Parámetros de configuración clave para 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
Paso 4: Generar certificados SSL (Opcional pero Recomendado)
Para las implementaciones de producción, utilice certificados de CA. Para las pruebas, puede generar certificados auto-firmados:
# 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
Paso 5: Instalar puerto con escáner de carga
Trivy es el escáner predeterminado desde Harbor v2. Para instalar Harbor con el escáner de vulnerabilidad Trivy habilitado:
# Run the installation script with Trivy
sudo ./install.sh --with-trivy
# Verify all containers are running
docker compose ps
Usted debe ver la salida que muestra todos los servicios de Harbor funcionando, incluyendo el puerto-core, puerto-portal, puerto-db, registro, trivy-adapter, y otros.
Paso 6: Interfaz de acceso a puerto
Una vez que la instalación esté completa, usted debe ser capaz de acceder a la interfaz de usuario de puerto en su navegador web en https://harbor.yourdomain.com y conectarse con el usuario administrador y la contraseña que usted establece.
Método 2: Instalación de puerto en Kubernetes con Helm
Si deseas desplegar Harbor en Kubernetes, utiliza el gráfico Harbor. El despliegue de Kubernetes ofrece una mejor escalabilidad, alta disponibilidad e integración con los ecosistemas nativos de la nube.
Paso 1: Agregar el depósito de helm puerto
# 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
Paso 2: Crear archivo de valores de helm
Cree un archivo de valores personalizado para configurar su implementación de Harbor:
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
Paso 3: Instalar puerto vía 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
Configuración de la multi-tenancia en Puerto
Con Harbor instalado, el siguiente paso es configurar la multi-tenancia para apoyar múltiples equipos, departamentos o clientes dentro de su organización.
Creación de proyectos para inquilinos
Puede crear múltiples proyectos en Harbor para separar los artefactos almacenados por diferentes equipos o suborganizaciones dentro de una empresa. Los proyectos se pueden crear a través de la interfaz web de Harbor o programáticamente a través de la API.
Creación de proyectos a través de la interfaz web
Para crear un proyecto a través del portal Harbor:
- Inicie sesión en Harbor como administrador
- Haga clic en "Proyectos" en el menú de navegación izquierdo
- Haga clic en el botón "Nuevo PROYECTO"
- Configurar la configuración del proyecto:
- Nombre del proyecto:] Usar un nombre descriptivo (por ejemplo, "team-frontend", "customer-acme")
- Nivel de acceso: Elija "Public" (cualquiera puede tirar) o "Privado" (requiere autenticación)
- Storage Quota: Establecer un límite para evitar que cualquier inquilino consuma un almacenamiento excesivo
- Proxy Cache: Configurar el proyecto como un caché proxy para registros externos
- Haga clic en "OK" para crear el proyecto
Creación de proyectos a través de API
Para la creación automatizada de proyectos o operaciones a granel, utilice la API de Harbor REST:
# 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 .
Configuración de los ajustes de proyecto de nivel
Cada proyecto en Harbor puede configurarse independientemente con ajustes que ejecuten las políticas de seguridad y los límites de recursos.
Quotas de almacenamiento
Las cuotas de almacenamiento impiden que los inquilinos consuman espacio excesivo en disco:
- Navegue al proyecto
- Haga clic en la pestaña "Configuración"
- Bajo "Resource Management", establece el cupo de almacenamiento (por ejemplo, 100 GB)
- Haga clic en "Guardar"
Políticas de exploración de vulnerabilidad
Configurar el análisis automático de vulnerabilidad para imágenes empujadas al proyecto:
- Vaya al proyecto "Configuración"
- Activar "Escanear automáticamente imágenes en el empuje"
- Establecer "Prevenir imágenes vulnerables de correr" para bloquear imágenes con vulnerabilidades críticas
- Configurar el umbral de gravedad (por ejemplo, bloquear imágenes con vulnerabilidades "High" o "Critical")
Políticas de retención de la etiqueta
Las políticas de retención limpian automáticamente imágenes viejas o no utilizadas para gestionar el almacenamiento de manera eficiente:
- Navegue a proyectar "Policía" pestaña
- Haga clic en "Agregar Regla" bajo la retención de la etiqueta
- Configurar criterios de retención:
- Patrón de emparejamiento del depósito (por ejemplo, "**" para todos los depósitos)
- Regla de retención (por ejemplo, "tener los 10 artefactos más recientemente empujados")
- etiqueta patrón de emparejamiento (por ejemplo, excluir etiquetas "latúnicas" y "producción")
- Haga clic en "Añadir" y luego "Run Ahora" para probar la política
Confianza de contenidos y firma de imágenes
Permitir la confianza en el contenido para asegurar que sólo las imágenes firmadas se pueden extraer:
- En el proyecto "Configuración", habilitar "Confianza de contenido de Habilitar"
- Esto requiere que las imágenes sean firmadas usando Docker Content Trust o Cosign
- Las imágenes no firmadas serán rechazadas cuando los usuarios traten de tirarlas
Gestión del acceso y las permisos de usuario
Para que los inquilinos puedan acceder sólo a sus recursos designados, es preciso administrar cuidadosamente el acceso de los usuarios y los permisos para ello.
Estrategias de gestión de usuarios
Harbor admite varios backends de autenticación, lo que le permite elegir el enfoque que mejor se ajuste a la infraestructura de gestión de identidad de su organización.
Gestión local de usuarios
Para pequeñas implementaciones o pruebas, puede crear usuarios directamente en Harbor:
- Ingrese como administrador
- Navegue a "Administración" → "Usuarios"
- Haga clic en "NOVE USUARIO"
- Rellene los datos del usuario (nombre de usuario, correo electrónico, nombre completo, contraseña)
- Haga clic en "OK"
LDAP/Incorporación en Directorios Activos
Para implementaciones de empresas, integre Harbor con su LDAP o Active Directory existente:
- Navega a la "Administración" → "Configuración" → "Authentication"
- Seleccione "LDAP" como modo de autenticación
- Configuración LDAP:
- ] URL de la LDAP:] ldap://ldap.yourdomain.com:389
- LDAP Search DN: cn=admin,dc=yourdomain,dc=com
- LD Base DN: dc=yourdomain,dc=com
- Filtro de la LDAM: (objetoClass=persona)
- UID DE LA LD: Uid
- Ámbito de aplicación: Subtree
- Prueba la conexión
- Haga clic en "Guardar"
OIDC Integration
Para los proveedores de identidad modernos como Okta, Auth0 o Keycloak:
- En la configuración de "Authentication", seleccione "OIDC"
- Configurar los parámetros OIDC:
- ]OIDC Nombre del proveedor:
- OIDC Endpoint:] https://your-idp.com
- ID del cliente de OIDC: Su ID del cliente
- OIDC Client Secret: Su cliente secreto
- Ámbito de OIDC: openid,profile,email
- Verificar y salvar
Asignación de Usuarios a Proyectos
Una vez que los usuarios sean autenticados, asignárseles a proyectos con funciones apropiadas:
- Navegue al proyecto
- Haga clic en "Miembros" ficha
- Haga clic en "USER" o "GROUP" para añadir miembros
- Buscar el usuario o grupo
- Seleccione el papel apropiado:
- ]] ] Acceso sólo lectura para extraer imágenes
- Desarrollo: Puede empujar y tirar imágenes
- Manier: Puede gestionar los miembros del proyecto y configurar la configuración
- Proyecto Admin: Control completo sobre el proyecto
- Haga clic en "OK"
Cuentas de robot para la integración CI/CD
Las cuentas de robot son cuentas de servicio en Harbor con permisos específicos, utilizados para operaciones automatizadas como tuberías CI/CD empujando o tirando imágenes sin requerir credenciales humanas.
Para crear una cuenta de robot:
- Navegue al proyecto
- Haga clic en "Recuentas de robot"
- Haga clic en "Nuevo ROBOT ACCOUNT"
- Configurar la cuenta de robot:
- ]Nombre: Nombre descriptivo (por ejemplo, "ci-pipeline-bot")
- Tiempo de extinción: Establecer una fecha de vencimiento para la seguridad
- Permisos: Seleccione repositorios y acciones específicas (push, pull, delete)
- Haga clic en "ADD"
- Copiar el token generado inmediatamente (no se mostrará de nuevo)
Utilice la cuenta de robot en su tubería 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 seguridad para entornos multi-tenientes
La seguridad es primordial en entornos multi-tenant donde múltiples equipos o clientes comparten infraestructura. Harbor proporciona características de seguridad integrales para proteger su cadena de suministro de contenedores.
Escaneo de vulnerabilidad
Utilizando escáneres de imagen populares, como Trivy, las imágenes pueden ser escaneadas automáticamente para vulnerabilidades conocidas, y los resultados de estos escáneres pueden ser aprovechados para evitar la extracción de artefactos con problemas de seguridad no abordados.
Configuración de escaneado automático
Permite el escaneo automático en el nivel del sistema o del proyecto:
- Para el escaneo a nivel de todo el sistema: "Administración" → "Servicios de Interrogación" → Configuración de la Trivy
- Para el escaneo de nivel de proyecto: Proyecto → "Configuración" → Habilitar "Escanear automáticamente imágenes en el empuje"
- Configurar los escaneos programados para re-escanear las imágenes existentes para vulnerabilidades recién descubiertas
Políticas de prevención de la vulnerabilidad
Configurar políticas para evitar que se desplieguen imágenes vulnerables:
- En el proyecto "Configuración", permite "Prevenir imágenes vulnerables de correr"
- Establecer el umbral de gravedad (por ejemplo, "alto" o "crítico")
- Las imágenes con vulnerabilidades en o por encima de este umbral no pueden ser tiradas
Ver resultados de la exploración
Para ver los resultados del análisis de vulnerabilidad:
- Navegue al proyecto y al repositorio
- Haga clic en un artefacto/tag
- Vea la pestaña "Vulnerabilidades" para resultados de análisis detallados
- Revise los detalles CVE, niveles de gravedad y correcciones disponibles
Signing de imagen y Content Trust
Harbor admite la firma de imágenes de contenedores utilizando Docker Content Trust (notario de la generación de recursos) para garantizar la autenticidad y procedencia, y también se pueden activar políticas que impiden que se desplieguen imágenes no firmadas.
Confianza en el contenido
Para permitir la confianza en el contenido de un proyecto:
- Navegue para proyectar "Configuración"
- Permite "Iniciar confianza en contenidos"
- Permite "Prevenir imágenes no firmadas de ser tiradas"
Imágenes de firma con Docker Content Trust
# 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
Firma con Cosign
Para los flujos de trabajo de firma modernos, utilice 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
Auditorías de la logística y el cumplimiento
Todas las operaciones a los depósitos se rastrean a través de registros. Harbor mantiene registros de auditoría integrales que rastrean todas las actividades de los usuarios, facilitando el cumplimiento de los requisitos e investigan incidentes de seguridad.
Ver los registros de auditoría
- Navega a "Administración" → "Logs"
- Registros de filtro por:
- Tipo de operación (pojía, tira, borra, crea, etc.)
- Tipo de recurso (proyecto, repositorio, artefacto)
- Rango de tiempo
- Registros de exportación para análisis o archivo externo
Integrando con SIEM Systems
Para el cumplimiento de la empresa, integre los registros de puerto con su 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
Seguridad de la red y control de acceso
Configuración de HTTPS
Utilizar siempre HTTPS en producción para cifrar datos en tránsito:
- Obtenga certificados SSL/TLS de una CA de confianza (Encrypt, DigiCert, etc.)
- Configurar puerto.síntoma con las trayectorias de certificados
- Puerto de Restart
Configuración de firewall
Acceso restringido a Puerto usando reglas de cortafuegos:
# 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
Replicación de imagen para despliegues multi-sitio
Las imágenes y gráficos pueden reproducirse (sincronizarse) entre múltiples instancias de registro basadas en políticas con el uso de filtros (repositorio, etiqueta y etiqueta), y Harbor automáticamente se registra una replicación si encuentra errores, que pueden utilizarse para ayudar a la carga, lograr alta disponibilidad, y facilitar despliegues multi-datacentro en escenarios híbridos y multi-cloud.
Configuración de puntos finales de replicación
Los objetivos de replicación incluyen otros casos de puerto, Docker Hub, AWS ECR, Google GCR/GAR, Azure ACR, y cualquier registro compatible con OCI.
Para configurar un punto final de replicación:
- Navegue a "Administración" → "Registros"
- Haga clic en "NIT ENDPOINT"
- Configurar los detalles del punto final:
- Proveedor: Seleccione el tipo de registro (Harbor, Docker Hub, AWS ECR, etc.)
- Nombre: Nombre descriptivo para el punto final
- URL de punto: URL del registro
- Admisión ID/Secret:
- Prueba la conexión
- Haga clic en "OK"
Crear reglas de replicación
Definir las políticas de reproducción para sincronizar automáticamente las imágenes:
- Navega a "Administración" → "Replicaciones"
- Haga clic en "Nuevo REGLAMENTE DE REPLICACIÓN"
- Configure la regla:
- ]Nombre:
- Modo de replicación: Empuja (a distancia) o Tire (a distancia)
- Registro de la fuente: Seleccione fuente
- Registro de destino: Seleccione el punto final de destino
- Modo de prueba: Manual, programado o basado en eventos
- Filters: Especificar qué repositorios, etiquetas o etiquetas reproducir
- Haga clic en "SAVE"
Casos de uso para la replicación
- Replicar imágenes críticas a una instancia secundaria de puerto en una región diferente
- Distribución geográfica: Imágenes sincronizadas a los registros regionales para tiempos de tirado más rápidos
- Hybrid Cloud: Replicar entre los registros de puerto y nubes
- Separación de desarrollo/producción: Promover imágenes de los dev a los registros de producción
Trabajando con Puerto: Flujos de trabajo prácticos
Una vez que Harbor está configurado para la multi-tenancia, los equipos pueden comenzar a utilizarlo para sus flujos de trabajo de contenedores.
Empujar imágenes a puerto
Para empujar una imagen a Puerto:
# 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
Imágenes de Portaje desde Puerto
# 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
Utilizando Harbor con Kubernetes
Para sacar imágenes de Harbor en Kubernetes, cree un secreto de imagen:
# 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
Proxy Cache for External Registries
La función de caché proxy de Harbor permite a Harbor actuar como un proxy caching para registros externos, reduciendo el uso del ancho de banda y mejorando el rendimiento de la tirada.
Para configurar un proyecto de caché proxy:
- Crear un nuevo proyecto
- Seleccione "Caña de Proxy" como tipo de proyecto
- Elija el registro de destino (Docker Hub, Quay.io, etc.)
- Configurar las credenciales si es necesario
- Saque imágenes a través de Harbor utilizando el camino de caché 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
Reacción y recuperación de desastres
Proteger su despliegue portuario y sus datos es crítico para la continuidad de las operaciones.
Datos de la base de puerto
Harbor utiliza una base de datos para almacenar sus datos, y por defecto, utiliza una base de datos PostgreSQL que es gestionada por Docker.
Para apoyar a 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
Script de respaldo 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"
Programa este script con cron:
# Run backup daily at 2 AM
0 2 * * * /usr/local/bin/harbor-backup.sh >> /var/log/harbor-backup.log 2>&1
Restauración de la copia de seguridad
# 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
Optimización de la vigilancia y el rendimiento
La salud y el rendimiento de Monitoring Harbor garantiza una operación óptima y ayuda a identificar problemas antes de que impacten a los usuarios.
Vigilancia de la salud portuaria
Harbor expone los puntos finales de comprobación de salud:
# 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"}
]
}
Prometeo Metrics
Harbor expone las métricas Prometheus para monitorizar:
# Enable metrics in harbor.yml
metric:
enabled: true
port: 9090
path: /metrics
# Scrape metrics with Prometheus
curl http://harbor.yourdomain.com:9090/metrics
Consejos de optimización del rendimiento
- Utilice el almacenamiento SSD: Almacene datos de puerto en unidades SSD rápidas para un mejor rendimiento I/O
- Configurar el caché de Redis: Asegurar que Redis tenga suficiente memoria asignada
- Ajuste de base de datos: Optimize PostgreSQL settings for your burden
- Recopilación de basura: Programar la recogida regular de basura para recuperar el almacenamiento
- Use caché proxy: Reducir tiradas de registro externas por imágenes usadas con frecuencia caché
- Replicación de la implementación: Distribuir carga a través de múltiples instancias Portuarias
Colección de basura
La colección de basura es el proceso de recuperación de espacio de almacenamiento eliminando bloques y artefactos no referenciados que ya no son necesarios.
Para correr la recolección de basura:
- Navegue a "Administración" → "Garbage Collection"
- Haga clic en "GC NOW" para la colección inmediata
- O programar la recogida regular de basura (por ejemplo, semanal a las 2 AM)
Problemas comunes
No puede empujar imágenes
Síntomas: "se ha negado: se niega el acceso solicitado al recurso" error
Solutions:
- Verificar usuario tiene desarrollador o mayor papel en el proyecto
- No se ha superado el cupo de almacenamiento de proyecto
- Asegurar que el usuario sea autenticado:
- Verificar el nombre del proyecto en los partidos de etiqueta de imagen
Errores de certificado SSL
Síntomas: "x509: certificado firmado por autoridad desconocida" error
Solutions:
- Añadir el certificado CA de Harbor a los certificados de confianza de Docker
- Para certificados auto-firmados, copie el certificado CA a
- Reinicie el daemon Docker:
Propulsión de imagen lenta /Pull
Síntomas: Las operaciones de imagen tardan tiempo excesivo
Solutions:
- Comprobar ancho de banda de red y latencia
- Verificar el rendimiento de almacenamiento I/O
- Aumentar las cargas/descargas máximas concurrentes de Docker daemon
- Considere usar la replicación de puerto para equipos distribuidos geográficamente
- Caché proxy para imágenes externas con frecuencia tiradas
Cuestiones de conexión de bases de datos
Síntomas: Portugués UI muestra errores o no cargará
Solutions:
- Compruebe el estado de los contenedores de la base de datos:
- Verifique las credenciales de la base de datos en Harbor.yml
- Registros de bases de datos:
- Garantizar que la base de datos tenga recursos suficientes (CPU, memoria, disco)
Escenarios avanzados de múltiples niveles
Distribución de contenedores que se encargan de los clientes
El puerto puede ser utilizado para distribuir software containerizzato a clientes externos:
- Crear proyectos separados para cada cliente
- Usar cuentas de robot con fechas de vencimiento para el acceso al cliente
- Implementar notificaciones de webhook cuando se disponga de nuevas versiones
- Configurar la replicación a registros específicos del cliente si es necesario
- Utilice cupos de proyecto para gestionar el almacenamiento por cliente
Despliegue de la subregión
Para las organizaciones globales, despliegue Puerto en múltiples regiones:
- Implementar las instancias de puerto en cada región principal (EEUU, UE, APAC)
- Configurar la replicación bidireccional entre instancias
- Utilice el equilibrio de carga basado en DNS para hacer que los usuarios se acerquen a la instancia más cercana
- Implementar la autenticación de LDAP/OIDC consistente en todos los casos
- Centralizar la vigilancia y la tala de datos para todos los casos
Cumplimiento y requisitos reglamentarios
Para industrias reguladas (salud, finanzas, gobierno):
- Permitir la logging de auditoría integral
- Implementar el escaneo de vulnerabilidad obligatorio con políticas de bloqueo
- Consultar la firma de imágenes para todas las imágenes de producción
- Configurar políticas de retención para satisfacer los requisitos de retención de datos
- Utilice la integración LDAP/AD para el control centralizado de acceso
- Implementar reglas de segmentación de la red y cortafuegos
- Pruebas periódicas de recuperación de respaldo y desastres
- Documentar todos los controles y procedimientos de seguridad
Mejores prácticas para los despliegues de puertos multi-tenant
Prácticas óptimas de seguridad
- Siempre use HTTPS: Nunca corra Puerto sobre HTTP plano en producción
- Cambiar contraseñas predeterminadas: Inmediatamente cambiar la contraseña de administración después de la instalación
- Escaneo de vulnerabilidad: Configure automatic scan on push
- Firma de imagen de implementación: Requiere imágenes firmadas para despliegues de producción
- Use las cuentas de robot: Nunca utilice credenciales personales en los oleoductos CI/CD
- Actualizaciones de seguridad regulares: Mantener el puerto y sus componentes hasta la fecha
- Principio de mínimo privilegio: Conceder a los usuarios permisos mínimos necesarios
- Activar la tala de auditoría: Monitorear y revisar los registros regularmente
Prácticas óptimas operacionales
- Estrategia de respaldo de implementación: Respaldos automatizados regulares con procedimientos de restauración probados
- Uso de recursos de monitor: Almacenamiento de seguimiento, CPU, memoria y métricas de red
- Contribuciones de almacenamiento: Impedir que los proyectos individuales consuman un almacenamiento excesivo
- Configurar políticas de retención: Limpiar automáticamente imágenes antiguas o no utilizadas
- Colección de basura de horario: Limpieza regular para recuperar espacio de almacenamiento
- Procedimientos de documentos: Mantener documentación para operaciones comunes y solución de problemas
- Recuperación de desastres: Probando regularmente la restauración de copias de seguridad y los procedimientos de descomposición
- Planificación de la capital: Supervisar las tendencias de crecimiento y el plan de escalado
Prácticas óptimas de organización
- Convenciones de nombres: Establecer nombres consistentes para proyectos, repositorios y etiquetas
- Estructura de proyecto: Organiza proyectos por equipo, aplicación o medio ambiente
- Políticas de control del acceso: Definir políticas claras para quién puede acceder a lo que puede
- Estrategia de carga: Usar la versión semántica y etiquetas significativas
- Training and documentation: Asegurar que los equipos entiendan cómo utilizar Harbor eficazmente
- Gestión de cambios: Implementar procesos de aprobación para cambios de configuración
- Comunicación: Establecer canales para anunciar el mantenimiento y las actualizaciones
Integrando Puerto con su ecosistema de DevOps
CI/CD Integración de la tubería
Ejemplo de tubería de GitLab CI:
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
Integración Webhook
Configurar los dispositivos web para activar acciones cuando se empujan las imágenes:
- Navegue para proyectar "Webhooks"
- Haga clic en "NIT WEBHOOK"
- Configurar webhook:
- ]
- Eventos: Seleccione los eventos para desencadenar (push, pull, delete, scan completed)
- Autonización: Configurar la autentificación si es necesario
- Prueba el webhook
- Haga clic en "CONTINUE"
Repositorio de carga de helm
El puerto también puede servir como un repositorio de tablas 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
Futuro Proofing Your Harbor Deployment
Mantenerse en la actualidad con actualizaciones
Empezando con v2.15.0, los artefactos de liberación de puerto se firman criptográficamente utilizando Cosign para garantizar la autenticidad e integridad.
# 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
Consideraciones para el aumento de la escala
A medida que su organización crece, considere:
- Escalada horizontal: Deplorar múltiples instancias Portuarias con balance de carga
- Base de datos externa: Usar PostgreSQL gestionado para mejorar la escalabilidad y fiabilidad
- Redis External: Usar el clúster Redis gestionado o Redis para el caché
- Almacenamiento objetivo: Usar S3, Azure Blob o GCS para almacenamiento de imágenes en lugar de disco local
- Integración CDN: Usa CDN para la distribución global de imágenes
Casos de uso emergente
Harbor siempre ha sido compatible con OCI, lo que significa que puede almacenar y distribuir cualquier artefacto que se ajuste a la especificación de distribución de OCI, y la extensibilidad de la especificación de OCI significa que los modelos de IA ahora pueden aprovechar esa misma infraestructura con la misma seguridad, gobernanza y madurez operativa.
- Registro modelo AI/ML: Procesamiento y distribución de modelos de aprendizaje automático como artefactos OCI
- Módulos de la AMP: Distribución de módulos de la WebAssembly
- Proyecto de ley de materiales (SBOM):] Proteger y gestionar las OMP junto a imágenes
- Paquetes de política: Distribuir las políticas de OPA y otros artefactos de configuración
Conclusión
Construir un registro multi-tenant Docker con Harbor proporciona a las organizaciones una solución potente, segura y escalable para gestionar imágenes de contenedores en equipos, departamentos e incluso clientes. Harbor puentea la brecha como un registro de contenedores de código abierto, de grado empresarial que aporta seguridad, rendimiento y soberanía a la gestión de imágenes de contenedores, integrando perfectamente con los paradigmas operativos existentes y proporcionando una solución robusta para las necesidades modernas de gestión de imágenes de contenedores.
Mediante la implementación de las prácticas descritas en esta guía, desde la instalación y configuración adecuadas hasta el endurecimiento de seguridad, la configuración de múltiples niveles y las mejores prácticas operativas, puedes construir un despliegue de puerto listo para la producción que sirva a las necesidades de tu organización hoy, mientras que sigue siendo lo suficientemente flexible para adaptarse a los requisitos futuros.
Los principales participantes para el exitoso puerto multi-tenancy:
- Los proyectos son la base: Usa proyectos para crear espacios de nombres aislados para diferentes inquilinos
- La seguridad es primordial: Permite el análisis de vulnerabilidad, la firma de imágenes y la registro de auditorías completas
- La automatización es esencial: Usar cuentas de robots, dispositivos web e integración de API para flujos de trabajo CI/CD
- Plan de escala: Implementar la replicación, monitoreo y planificación de la capacidad desde el principio
- Manténte comprometido: Únete a la comunidad Portuaria, mantén la corriente con actualizaciones y vuelve a contribuir
Ya sea que usted está administrando contenedores para un pequeño equipo de desarrollo o operando una plataforma multi-tenant de gran escala que sirve a cientos de clientes, Harbor proporciona las características, flexibilidad y el apoyo comunitario necesario para tener éxito. Comience con los básicos, implemente las mejores prácticas de seguridad, y gradualmente adoptar características avanzadas a medida que sus necesidades evolucionan.
Para más información y recursos, visite el sitio web oficial de Puerto], explore el ]Repositorio de GitHub, únase a la comunidad en Slack, y consulte el amplio Documentación de los préstamos]. La comunidad Portuaria es activa, acogedora y lista para ayudarle a implementar.