Configuración de Harbor como Registro de Artefactos para Contenedores

Introducción a Harbor

Harbor es un registro de código abierto diseñado para gestionar artefactos como imágenes de contenedores y gráficos de Helm. Implementa controles de seguridad mediante políticas, acceso basado en roles, escaneo de vulnerabilidades y firma de imágenes. Como proyecto graduado de la CNCF, Harbor facilita el cumplimiento normativo y la interoperabilidad en plataformas nativas de la nube como Kubernetes y Docker.

Recursos y Documentación

Para información detallada, consulte la documentación oficial de Harbor. Los paquetes de instalación están disponibles en el repositorio de GitHub, donde se pueden descargar versiones específicas.

Arquitectura del Sistema

La arquitectura de Harbor se divide en tres capas principales. Una capa de proxy basada en Nginx que redirige solicitudes de clientes variados. La capa funcional incluye componentes como el Portal de interfaz de usuario, el Core para lógica de negocio, JobService para tareas asíncronas, y módulos opcionales como Notary para firma de imágenes y ChartMuseum para gestión de gráficos. La capa de datos utiliza Redis para caché y colas, PostgreSQL para metadatos de la aplicación, y un almacenamiento persistente para los artefactos.

Despliegue mediante Docker Compose

Requisitos del Sistema

El entorno debe cumplir con requisitos mínimos de hardware: 2 CPUs y 4 GB de memoria, recomendándose 4 CPUs y 8 GB para producción. En cuanto a software, se necesita Docker Engine versión 20.10.10-ce o superior, Docker Compose v1.18.0+ o v2, y OpenSSL para gestión de certificados. Los puertos de red esenciales son 80 (HTTP), 443 (HTTPS) y 4443 (confienza de contenido), aunque pueden personalizarse.

Pasos de Instalación

Comience instalando wget y descargando el instalador offline de Harbor desde GitHub. Extraiga el paquete y navegue al directorio descomprimido.

apt-get update && apt-get install -y wget
wget https://github.com/goharbor/harbor/releases/download/v2.10.1/harbor-offline-installer-v2.10.1.tgz
tar -xzf harbor-offline-installer-v2.10.1.tgz
cd harbor

Para configurar Harbor, copie el archivo de plantilla y edítelo. Defina un hostname como una dirección IP o dominio, ajuste el puerto HTTP (por ejemplo, a 9090) y descomente o comente secciones según sea necesario, como la configuraicón HTTPS.

cp harbor.yml.tmpl harbor.yml
vi harbor.yml

Ejecute el script de instalación para desplegar Harbor. Verifique el estado de los contenedores con comandos de Docker Compose.

./install.sh
docker compose ps

Uso Básico

Acceda a la interfaz web mediante la dirección configurada, usando las credenciales predeterminadas (admin/Harbor12345). Cree usuarios y proyectos según sea necesario, estableciendo cuotas de almacenamiento si se requiere.

Empuje de Imágenes

Para probar el registro, extraiga una imagen de ejemplo como Redis, configúrela con parámetros personalizados, y etiquétela para el repositorio de Harbor. Modifique la configuración del daemon de Docker para permitir conexiones HTTP inseguras al puerto de Harbor. Inicie sesión en Harbor y empuje la imagen etiquetada.

docker pull redis:7.0
docker tag redis:7.0 10.0.0.5:9090/mi-proyecto/redis:7.0-custom
echo '{"insecure-registries":["10.0.0.5:9090"]}' > /etc/docker/daemon.json
systemctl restart docker
docker login 10.0.0.5:9090 -u admin
docker push 10.0.0.5:9090/mi-proyecto/redis:7.0-custom

Configuración HTTPS Opcional

Para entornos de producción, se recomienda configurar HTTPS. Genere certificados autofirmados mediante OpenSSL, creando una autoridad certificadora y un certificado de servidor. Ajuste los parámetros del certificado, como el nombre común, para reflejar la dirección IP o dominio de Harbor.

mkdir -p ~/certificados && cd ~/certificados
openssl genrsa -out clave-ca.key 4096
openssl req -x509 -new -nodes -sha512 -days 3650 \
  -subj "/C=ES/ST=Madrid/L=Madrid/O=MiOrg/CN=10.0.0.5" \
  -key clave-ca.key -out ca.crt
openssl genrsa -out clave-servidor.key 4096
openssl req -sha512 -new \
  -subj "/C=ES/ST=Madrid/L=Madrid/O=MiOrg/CN=10.0.0.5" \
  -key clave-servidor.key -out solicitud.csr
cat > extensiones.cnf <<eof basicconstraints="CA:FALSE" ca.crt="" clave-ca.key="" eof="" extensiones.cnf="" keyusage="digitalSignature,keyEncipherment" openssl="" servidor.crt="" solicitud.csr="" subjectaltname="IP:10.0.0.5" x509=""></eof>

Copie los certificados generados a los directorios correspondientes en Harbor y Docker. Convierta el certificado del servidor al formato correcto y establezca permisos adecuados. Luego, modifique la configuración de Harbor para habilitar HTTPS, especifique el puerto y las rutas a los certificados.

mkdir -p /data/cert && cp servidor.crt servidor.key /data/cert/
openssl x509 -inform PEM -in servidor.crt -out servidor.cert
mkdir -p /etc/docker/certs.d/10.0.0.5:9443
cp servidor.cert servidor.key ca.crt /etc/docker/certs.d/10.0.0.5:9443
chmod 600 clave-ca.key clave-servidor.key

Use el script prepare para regenerar la configuración de Nginx, detenga los contenedores existentes y vuelva a iniciar Harbor.

./prepare
docker compose down
docker compose up -d

Para clientes Docker que se conecten al registro HTTPS, copie los archivos de certificado al directorio de certificados del cliente y reinicie el daemon de Docker.

scp ca.crt servidor.cert servidor.key usuario@cliente:/etc/docker/certs.d/10.0.0.5:9443/
# En el cliente:
systemctl restart docker

Solución de Problemas Comunes

Tras un reinicio del servidor, si Harbor no se inicia correctamente, entre al directorio de instalación y ejecute nuevamente el script de configuración. Esto restaurará los servicios sin perder datos persistentes, ya que están almacenados en volúmenes montados.

cd /ruta/harbor
./install.sh

Etiquetas: Harbor Docker Docker Compose OpenSSL HTTPS

Publicado el 6-20 18:21