Table of Contents

Dans le monde containerizzato d'aujourd'hui, la gestion de plusieurs images Docker est essentielle pour les organisations de toutes tailles. À mesure que les entreprises étendent leurs déploiements de conteneurs, la nécessité d'un registre de conteneurs robuste, sécurisé et riche en fonctionnalités devient primordiale. Harbor, un projet gradué CNCF avec plus de 30 000 étoiles GitHub, est le registre de conteneurs natif de cloud open-source le plus largement adopté.

Qu'est-ce que Harbor et pourquoi le choisir?

Harbor est un registre open source qui assure la sécurité des artefacts avec des politiques et un contrôle d'accès basé sur le rôle, assure que les images sont numérisées et exemptes de vulnérabilités, et signe les images comme confiance. Harbor étend la distribution open source Docker en ajoutant les fonctionnalités habituellement requises par les utilisateurs comme la sécurité, l'identité et la gestion.

Port libre de VMware en 2016, il a rejoint le CNCF en juillet 2018 et a obtenu son diplôme en juin 2020, ce qui en fait le premier registre libre à avoir obtenu son diplôme.Cette étape reflète à la fois sa maturité et la force de son soutien communautaire.

Caractéristiques clés qui définissent Harbor Apart

Harbor se distingue des registres Docker de base et même des alternatives commerciales par plusieurs capacités de qualité d'entreprise:

  • Multi-tenance par le biais de projets:[ Harbor organise le contenu en projets, chaque projet obtenant ses propres politiques de RBAC, les paramètres de numérisation, les limites de quota et les règles de conservation des étiquettes
  • Scannage de vulnérabilité de construction: Le port comprend des politiques de balayage sur le push avec des moteurs rechargeables, y compris Trivy, Clair et Anchore, qui bloquent les images vulnérables avant le déploiement
  • Image Signing and Content Trust:[ Le port supporte la signature d'artefacts avec Cosign et Notation pour la sécurité de la chaîne d'approvisionnement, plus les politiques de confiance du contenu qui font appliquer uniquement les images signées peuvent être tirées
  • Réplication multi-registres:[ Harbor synchronise les images entre les centres de données, les régions nuageuses ou les environnements hybrides avec des filtres basés sur les politiques sur les dépôts, les étiquettes et les étiquettes
  • Contrôle d'accès complet:[ L'authentification se branche sur LDAP, Active Directory, OIDC ou la base de données intégrée
  • Comptes de robots pour l'automatisation: Les comptes robots donnent aux pipelines CI/CD un accès non humain avec des autorisations et des dates d'expiration
  • Complete Audit Trail: Vérification trace qui a poussé, tiré, supprimé ou scanné des artefacts

Quand choisir Harbor plutôt que des alternatives

Les organisations gèrent Harbor lorsqu'elles ont besoin d'un registre privé de conteneurs avec des contrôles de sécurité qui hébergent des registres pour ou tout simplement ne pas offrir, avec des environnements sous contrôle aérien, des industries réglementées et des configurations multi-cloud étant des cas d'utilisation typiques.

Par rapport à Docker Hub, Harbor offre des fonctions de numérisation de vulnérabilité intégrée, de signature d'image, de RBAC, de logage d'audit et de réplication multi-registry – fonctionnalités qui nécessitent des plans Docker Hub payés ou sont indisponibles.

Comprendre l'architecture multi-locataires de Harbor

Avant de plonger dans l'installation, il est essentiel de comprendre comment Harbor met en œuvre des multi-ténacités et comment cette architecture soutient l'isolement organisationnel et la sécurité.

Projets en tant que limites de locataires

Les objets au sein du port appartiennent à un projet, et ce regroupement permet d'accorder des paramètres et des permissions pour des ensembles d'objets, par opposition à un niveau purement mondial. Les projets servent d'unité fondamentale de multi-ténanie à Harbor, agissant comme espaces de noms isolés qui séparent les images de conteneurs, les cartes Helm et d'autres objets OCI par équipe, département ou client.

Les capacités multi-locataires de Harbor comprennent des projets agissant comme espaces de noms qui isolent les modèles par équipe, environnement ou cas d'utilisation, ainsi que le RBAC à grain fin pour contrôler qui peut pousser, tirer ou administrer des artefacts. Cette isolation basée sur le projet garantit que différents locataires ne peuvent pas accéder aux artefacts de l'autre sans autorisation explicite.

Contrôle d'accès axé sur les rôles (CARAR)

Les utilisateurs accèdent à différents dépôts par le biais de « projets » et un utilisateur peut avoir une autorisation différente pour les images ou les graphiques Helm dans le cadre d'un projet. Harbor implémente un système RBAC sophistiqué avec des rôles prédéfinis qui peuvent être attribués au niveau du projet:

  • Invité: Accès en lecture seule à la vue et à la traction des artefacts
  • Dévelopeur: Autorisations de lecture-écriture pour pousser et tirer des images
  • Maintainer: Peut gérer les membres du projet et configurer les paramètres du projet
  • Admin de projet: Contrôle complet du projet, y compris les capacités de lecture-écriture-configure

Ce modèle de permission granulaire permet aux organisations de mettre en oeuvre le principe du moins de privilèges, en veillant à ce que les utilisateurs et les systèmes automatisés n'aient accès qu'aux ressources dont ils ont besoin.

Intégration de l'authentification

Dans les cas les plus simples, les utilisateurs peuvent être créés par Harbor lui-même et gérés en interne, mais cela ne s'échelle pas particulièrement bien, donc Harbor offre également l'intégration dans d'autres services populaires tels que OIDC, Active Directory et LDAP. Cette flexibilité permet aux organisations de tirer parti de l'infrastructure de gestion d'identité existante, de réduire les frais généraux administratifs et d'assurer des politiques d'accès cohérentes entre les systèmes.

Préalables et exigences du système

Avant d'installer Harbor, assurez-vous que votre environnement répond aux exigences nécessaires pour un déploiement prêt à la production.

Exigences relatives au matériel

Pour un déploiement de port de production prenant en charge plusieurs locataires, il faut tenir compte des spécifications minimales suivantes :

  • CPU: 4 carottes minimum (8+ carottes recommandées pour les environnements à forte circulation)
  • Mémoire: 8 Go de RAM minimum (16+ GB recommandé)
  • Storage:[ Dépend du volume d'image; commencer par 100 Go et planifier la croissance
  • Réseau:[ Connectivité réseau stable avec une bande passante suffisante pour les opérations de poussée/pull d'image

Prérequis logiciels

Harbor nécessite les composants logiciels suivants:

  • Système d'exploitation:[ Distribution Linux (Ubuntu 20.04+, CentOS 7+, RHEL 7+ ou similaire)
  • Moteur à double sens: Version 20.10.0 ou plus
  • Compose de Docker: Version 1.29.0 ou plus (pour la méthode d'installation de Docker Compose)
  • Kubernetes: Version 1.20+ (si elle est déployée via Helm)
  • OpenSSL:[ Pour générer des certificats SSL/TLS

Configuration du réseau et du domaine

Pour un déploiement de production, vous aurez besoin :

  • Un nom de domaine entièrement qualifié (FQDN) pointant vers votre serveur Harbor
  • Certificats SSL/TLS (autosignés pour les essais, CA signés pour la production)
  • Ports pare-feu ouverts : 80 (HTTP), 443 (HTTPS) et en option 4443 (Notariat)

Installation du port : guide étape par étape

Harbor peut être installé sur n'importe quel environnement Kubernetes ou sur un système avec support Docker. Ce guide couvre les deux méthodes d'installation, en commençant par l'approche Docker Compose pour la simplicité, suivie par le déploiement Kubernetes à l'aide de cartes Helm.

Méthode 1: Installation du port avec Docker Compose

Docker Compose offre la voie la plus rapide pour faire fonctionner Harbor, ce qui le rend idéal pour les environnements de développement et les déploiements plus petits.

Étape 1: Installer Docker et Docker Compose

Tout d'abord, assurez-vous que Docker et Docker Compose sont installés sur votre système. Sur Ubuntu, vous pouvez les installer avec les commandes suivantes:

# 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

Étape 2: Télécharger Harbor

Télécharger les binaires de la version Harbor et suivre le Guide de configuration Installation & pour installer Harbor. Vous pouvez télécharger la dernière version Harbor depuis le dépôt officiel 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

Étape 3: Configurer le port

Harbor utilise un fichier de configuration YAML qui doit être personnalisé pour votre environnement :

# Copy the template configuration file
cp harbor.yml.tmpl harbor.yml

# Edit the configuration file
nano harbor.yml

Paramètres de configuration clés à modifier:

# 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

Étape 4: Générer des certificats SSL (facultatif mais recommandé)

Pour les déploiements de production, utilisez des certificats signés CA. Pour les tests, vous pouvez générer des certificats autosignés :

# 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

Étape 5: Installez le port avec Trivy Scanner

Trivy est le scanner par défaut depuis Harbor v2.2. Pour installer Harbor avec le scanner de vulnérabilité Trivy activé:

# Run the installation script with Trivy
sudo ./install.sh --with-trivy

# Verify all containers are running
docker compose ps

Vous devriez voir la sortie montrant tous les services Harbor en cours, y compris port-core, port-portal, port-db, registre, trivy-adaptateur, et autres.

Étape 6 : Interface Web d'accès au port

Une fois l'installation terminée, vous devriez pouvoir accéder à l'interface utilisateur Harbor dans votre navigateur Web à https://harbor.yourdomain.com et vous connecter avec l'utilisateur administrateur et le mot de passe que vous avez défini.

Méthode 2: Installation d'un port sur Kubernetes avec Helm

Si vous souhaitez déployer Harbor sur Kubernetes, veuillez utiliser le graphique du port. Le déploiement Kubernetes offre une meilleure évolutivité, une disponibilité élevée et une intégration avec les écosystèmes cloud-natifs.

Étape 1: Ajouter un dépôt de casque de port

# 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

Étape 2: Créer un fichier de valeurs Helm

Créez un fichier de valeurs personnalisées pour configurer votre déploiement 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

Étape 3: Installer Harbor 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

Configuration de multi-tenance dans le port

Avec Harbor installé, la prochaine étape est la configuration de plusieurs locataires pour soutenir plusieurs équipes, départements ou clients au sein de votre organisation.

Création de projets pour les locataires

Vous pouvez créer plusieurs projets dans le port pour séparer les artefacts stockés par différentes équipes ou sous-organisations au sein d'une entreprise. Les projets peuvent être créés via l'interface web du port ou programmatiquement via l'API.

Création de projets via l'interface Web

Pour créer un projet par le portail Harbor :

  1. Connectez-vous à Harbor en tant qu'administrateur
  2. Cliquez sur "Projets" dans le menu de navigation de gauche
  3. Cliquez sur le bouton "NOUVEAU PROJET"
  4. Configurez les paramètres du projet :
    • Nom du projet :Utilisez un nom descriptif (p. ex., « face à l'équipe », « client-acme »)
    • Niveau d'accès: Choisissez «Public» (toute personne peut tirer) ou «Privé» (exige l'authentification)
    • Contingent de stockage:[ Fixer une limite pour empêcher tout locataire de consommer un stockage excessif
    • Proxy Cache:[ Configurer le projet en option comme cache mandataire pour les registres externes
  5. Cliquez sur "OK" pour créer le projet

Création de projets via l'API

Pour la création de projet automatisée ou les opérations en vrac, utilisez l'API REST de port :

# 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 .

Configuration des paramètres de niveau projet

Chaque projet dans Harbor peut être configuré indépendamment avec des paramètres qui font respecter les politiques de sécurité et les limites de ressources.

Contingents de stockage

Les quotas de stockage empêchent les locataires de consommer un espace disque excessif:

  1. Naviguez vers le projet
  2. Cliquez sur l'onglet "Configuration"
  3. Dans le cadre de la «Gestion des ressources», fixer le quota de stockage (par exemple 100 Go)
  4. Cliquez sur "Enregistrer"

Politiques de numérisation de vulnérabilité

Configurer la numérisation automatique de vulnérabilité pour les images poussées vers le projet :

  1. Aller au projet "Configuration"
  2. Activer "Scanner automatiquement les images en poussant"
  3. Définir « Prévenir les images vulnérables de l'exécution » pour bloquer les images présentant des vulnérabilités critiques
  4. Configurer le seuil de gravité (p. ex., bloquer les images avec des vulnérabilités « élevées » ou « critiques »)

Politiques de conservation des étiquettes

Les politiques de conservation nettoient automatiquement les images anciennes ou inutilisées pour gérer efficacement le stockage :

  1. Naviguez dans l'onglet « Politique » du projet
  2. Cliquez sur "Ajouter une règle" sous la rubrique Conservation des étiquettes
  3. Configurer les critères de rétention :
    • Répertoire de correspondance des dépôts (p. ex., «** » pour tous les dépôts)
    • Règle de conservation (p. ex., « conserver les 10 artefacts les plus récents poussés »)
    • Modèle de correspondance des étiquettes (p. ex., exclure les étiquettes « plus récentes » et « production »)
  4. Cliquez sur "Ajouter" puis "Démarrer maintenant" pour tester la politique

Confiance du contenu et signature d'image

Activer la confiance en contenu pour s'assurer que seules les images signées peuvent être tirées :

  1. Dans le projet "Configuration", activez "Activer la confiance dans le contenu"
  2. Cela exige que les images soient signées en utilisant Docker Content Trust ou Cosign
  3. Les images non signées seront rejetées lorsque les utilisateurs tenteront de les tirer

Gestion de l'accès et des autorisations des utilisateurs

Pour être efficaces, les locataires doivent gérer soigneusement l'accès des utilisateurs et les permissions pour s'assurer que les locataires n'ont accès qu'aux ressources qu'ils ont désignées.

Stratégies de gestion des utilisateurs

Harbor prend en charge plusieurs moteurs d'authentification, vous permettant de choisir l'approche qui convient le mieux à l'infrastructure de gestion de l'identité de votre organisation.

Gestion des utilisateurs locaux

Pour les petits déploiements ou les tests, vous pouvez créer des utilisateurs directement dans Harbor:

  1. Connexion en tant qu'administrateur
  2. Naviguez vers "Administration" → "Utilisateurs"
  3. Cliquez sur "NOUVEAU UTILISATEUR"
  4. Remplir les détails de l'utilisateur (nom d'utilisateur, courriel, nom complet, mot de passe)
  5. Cliquez sur "OK"

LDAP/Intégration active du répertoire

Pour les déploiements d'entreprise, intégrer Harbor à votre LDAP ou Active Directory existant :

  1. Naviguez vers "Administration" → "Configuration" → "Authentification"
  2. Sélectionnez "LDAP" comme mode d'authentification
  3. Configurer les paramètres LDAP :
    • LDAP URL : ldap://ldap.yourdomain.com :389
    • LDAP Recherche DN: cn=admin,dc=votredomaine,dc=com
    • LDAP Base DN: dc=votredomaine,dc=com
    • LDAP Filtre: (objetClass=person)
    • [FLT:][FLT:][FLT:][FLT:][FLT:][FLT:][FLT:][FLT:][FLT:FLT:FLT:FLT:FLT:FLT:FLT:FLT:FLT:FLT:F/FLT:F/FLT:FLT:FLT:FLT:FLT:FLT:FLT:FLT:FLT:F/FLT:F/F/F/F/F/F/F/F/F/F/F/F/F/F/F/F/F/F/F/F/F/F/F/F/F/F/F/F/F/F/F/F/F/F/F/F/F/F/F/F/F/F/F/F/F/F/F/F/F/F
    • LDAP Portée: Sous-arbre
  4. Tester la connexion
  5. Cliquez sur "Enregistrer"

Intégration de l'OIDC

Pour les fournisseurs d'identité modernes comme Okta, Auth0 ou Keycloak:

  1. Dans les paramètres "Authentification", sélectionnez "OIDC"
  2. Configurer les paramètres de l'OIDC :
    • Nom du fournisseur de l'OIDC :[ Nom du fournisseur
    • OIDC Fin de l'article: https://your-idp.com
    • Identifiant du client de l'OIDC:[Identificateur du client
    • Scénario client de l'OIDC:
    • OIDC Portée: openid,profil,email
  3. Vérifier et enregistrer

Affectation des utilisateurs aux projets

Une fois les utilisateurs authentifiés, assignez-les aux projets ayant des rôles appropriés :

  1. Naviguez vers le projet
  2. Cliquez sur l'onglet "Membres"
  3. Cliquez sur "USER" ou "GROUP" pour ajouter des membres
  4. Rechercher l'utilisateur ou le groupe
  5. Sélectionnez le rôle approprié :
    • Invité : Accès en lecture seule pour tirer des images
    • Dévelopeur: Peut pousser et tirer des images
    • Maintainer:[ Peut gérer les membres du projet et configurer les paramètres
    • Admin de projet: Contrôle complet du projet
  6. Cliquez sur "OK"

Comptes robots pour l'intégration CI/CD

Les comptes robot sont des comptes de service dans le port avec des permissions spécifiques, utilisés pour des opérations automatisées comme les pipelines CI/CD poussant ou tirant des images sans exiger des références humaines.

Pour créer un compte robot :

  1. Naviguez vers le projet
  2. Cliquez sur l'onglet « Comptes de robots »
  3. Cliquez sur « NOUVEAU COMPTE ROBOT »
  4. Configurer le compte robot :
    • Nom : Nom descriptif (p. ex., «ci-pipeline-bot»)
    • Délai d'expiration:[ Définissez une date d'expiration pour la sécurité
    • Permissions:[ Sélectionnez des dépôts et des actions spécifiques (pousser, tirer, supprimer)
  5. Cliquez sur "ADD"
  6. Copiez immédiatement le jeton généré (il ne sera plus affiché)

Utilisez le compte robot dans votre 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}

Caractéristiques de sécurité pour les environnements multi-locataires

La sécurité est primordiale dans les environnements multi-locataires où plusieurs équipes ou clients partagent l'infrastructure. Harbor fournit des fonctionnalités de sécurité complètes pour protéger votre chaîne d'approvisionnement de conteneurs.

Analyse de vulnérabilité

En utilisant des scanners d'images populaires, comme Trivy, les images peuvent être automatiquement numérisées pour détecter les vulnérabilités connues, et les résultats de ces scanners peuvent être exploités pour empêcher la traction d'objets avec des problèmes de sécurité non traités.

Configuration de la numérisation automatique

Activer la numérisation automatique au niveau du système ou du projet :

  1. Pour la numérisation à l'échelle du système : "Administration" → "Services d'interrogation" → Configurer les paramètres de Trivy
  2. Pour la numérisation au niveau du projet : Projet → "Configuration" → Activer "Scanner automatiquement les images en poussant"
  3. Configurer les scans programmés pour re-scanner les images existantes pour les vulnérabilités nouvellement découvertes

Politiques de prévention de la vulnérabilité

Configurer les politiques visant à empêcher le déploiement d'images vulnérables:

  1. Dans le projet "Configuration", activez "Prévenir les images vulnérables de courir"
  2. Fixer le seuil de gravité (p. ex., «élevé» ou «critique»)
  3. Les images présentant des vulnérabilités à ou au-dessus de ce seuil ne peuvent pas être tirées

Affichage des résultats de l'analyse

Pour voir les résultats de l'analyse de vulnérabilité :

  1. Naviguez vers le projet et le dépôt
  2. Cliquez sur un artefact/étiquette
  3. Voir l'onglet "Vulnérabilités" pour les résultats détaillés de l'analyse
  4. Examiner les détails de l'EAC, les niveaux de sévérité et les corrections disponibles

La signature d'image et la confiance du contenu

Harbor prend en charge la signature des images de conteneurs en utilisant Docker Content Trust (le levier notaire) pour garantir l'authenticité et la provenance, et des politiques qui empêchent les images non signées d'être déployées peuvent également être activées.

Fiducie pour le contenu

Pour permettre la confiance en contenu pour un projet :

  1. Naviguez dans le projet "Configuration"
  2. Activer "Activer la confiance en contenu"
  3. Activer "Prévenir les images non signées d'être tirées"

Signer des images avec 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

Signature avec cosignat

Pour les workflows de signature modernes, utilisez 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

Vérification Enregistrement et conformité

Toutes les opérations des dépôts sont suivies au moyen de registres. Harbor tient des registres de vérification complets qui permettent de suivre toutes les activités des utilisateurs, ce qui facilite le respect des exigences de conformité et les enquêtes sur les incidents de sécurité.

Affichage des journaux d'audit

  1. Naviguez vers "Administration" → "Logs"
  2. Filtrer les journaux par :
    • Nom d'utilisateur
    • Type d'opération (pousser, tirer, supprimer, créer, etc.)
    • Type de ressource (projet, dépôt, artefact)
    • Période
  3. Registres d'exportation pour analyse ou archivage externe

Intégration avec les systèmes SIEM

Pour la conformité des entreprises, intégrer les journaux Harbor à votre système 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

Sécurité du réseau et contrôle d'accès

Configuration de HTTPS

Utilisez toujours HTTPS en production pour chiffrer les données en transit :

  1. Obtenez des certificats SSL/TLS d'une CA de confiance (Encryptons, DigiCert, etc.)
  2. Configurez port.yml avec les chemins de certification
  3. Redémarrer le port

Configuration des pare-feu

Restreindre l'accès au port en utilisant les règles du pare-feu:

# 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

Réplication d'images pour déploiements multi-site

Les images et les graphiques peuvent être reproduits (synchronisés) entre plusieurs instances de registre basées sur des politiques utilisant des filtres (dépôt, étiquette et étiquette), et Harbor récupère automatiquement une réplication s'il rencontre des erreurs, qui peuvent être utilisées pour aider l'équilibrage de charge, atteindre une disponibilité élevée et faciliter les déploiements multi-centres dans des scénarios hybrides et multi-cloud.

Configuration des points d'extrémité de la réplication

Les cibles de réplication comprennent d'autres instances portuaires, Docker Hub, AWS ECR, Google GCR/GAR, Azure ACR et tout registre conforme au BEC.

Pour configurer un paramètre de réplication :

  1. Naviguez vers "Administration" → "Registres"
  2. Cliquez sur "NOUVELLES ENDPOINT"
  3. Configurer les détails du paramètre:
    • Provider: Sélectionnez le type de registre (Harbor, Docker Hub, AWS ECR, etc.)
    • Nom: Nom descriptif du paramètre
    • URL du point de fin: URL du registre
    • Accès ID/Secret:[ Pouvoirs d'authentification
  4. Tester la connexion
  5. Cliquez sur "OK"

Création de règles de réplication

Définir des politiques de réplication pour synchroniser automatiquement les images :

  1. Naviguez vers "Administration" → "Réplications"
  2. Cliquez sur "NOUVELLE RÈGLE DE RÉPLICATION"
  3. Configurer la règle :
    • Nom : Nom de la règle descriptive
    • Mode de réplication:[ Pousser (à distance) ou tirer (à distance)
    • Registre source:[ Sélectionner la source
    • Registre de destination: Sélectionner le paramètre cible
    • Mode de trigage:[ Manuel, programmé ou basé sur un événement
    • Filtres: Préciser quels dépôts, étiquettes ou étiquettes doivent être reproduits
  4. Cliquez sur "SAVE"

Cas d'utilisation pour la réplication

  • Récupération des catastrophes:[ Réplique des images critiques à une instance Harbor secondaire dans une région différente
  • Distribution géographique: Synchroniser les images vers les registres régionaux pour accélérer les temps de tirage
  • Hybrid Cloud:[ Réplique entre les registres du port et du cloud sur site
  • Développement/séparation de la production: Promouvoir les images de dev aux registres de production

Travailler avec le port: flux de travail pratiques

Une fois Harbor configuré pour les multi-tenanciers, les équipes peuvent commencer à l'utiliser pour leurs workflows de conteneurs.

Pousser des images vers le port

Pour pousser une image vers 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

Tirer des images du port

# 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

Utilisation de Harbor avec Kubernetes

Pour tirer des images de Harbor dans Kubernetes, créez un secret de tirage d'image :

# 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 procuration pour les registres externes

La fonction de cache proxy de Harbor permet à Harbor d'agir comme proxy de cache pour les registres externes, réduisant l'utilisation de la bande passante et améliorant les performances de traction.

Pour configurer un projet de cache proxy :

  1. Créer un nouveau projet
  2. Sélectionnez "Proxy Cache" comme type de projet
  3. Choisissez le registre cible (Docker Hub, Quay.io, etc.)
  4. Configurer les identifiants si nécessaire
  5. Tirer les images dans le port en utilisant le chemin de cache 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

Soutien et reprise après sinistre

La protection de votre déploiement Harbor et de ses données est essentielle à la continuité des activités.

Sauvegarde des données portuaires

Harbor utilise une base de données pour stocker ses données, et par défaut, il utilise une base de données PostgreSQL qui est gérée par Docker.

Pour soutenir 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 sauvegarde automatisé

#!/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"

Prévoyez ce script avec cron :

# Run backup daily at 2 AM
0 2 * * * /usr/local/bin/harbor-backup.sh >> /var/log/harbor-backup.log 2>&1

Restauration depuis la sauvegarde

# 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

Surveillance et optimisation des performances

Surveillance de la santé et des performances du port assure un fonctionnement optimal et aide à identifier les problèmes avant qu'ils n'aient des répercussions sur les utilisateurs.

Surveillance de la santé dans les ports

Harbor expose les paramètres de contrôle de santé :

# 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"}
 ]
}

Prométhée métrique

Harbor expose les mesures Prométhée pour la surveillance:

# Enable metrics in harbor.yml
metric:
 enabled: true
 port: 9090
 path: /metrics

# Scrape metrics with Prometheus
curl http://harbor.yourdomain.com:9090/metrics

Conseils pour l'optimisation des performances

  • Utiliser le stockage SSD:[ Stocker les données de port sur les disques SSD rapides pour une meilleure performance d'E/S
  • Configurer Redis en cache :[ S'assurer que Redis dispose de la mémoire suffisante
  • Tayonnage de la base de données: Optimisez les paramètres PostgreSQLTM pour votre charge de travail
  • Enrayer la collecte des ordures :[ Planifier la collecte régulière des ordures pour récupérer l'entreposage
  • Utiliser le cache mandataire:[ Réduire les tirages externes de registre en encachant les images fréquemment utilisées
  • Réplication de l'exécution:[ Distribuer la charge sur plusieurs instances portuaires

Collecte des ordures

La collecte des ordures est le processus de récupération de l'espace de stockage en enlevant les blobs et les artefacts non référencés qui ne sont plus nécessaires.

Pour faire fonctionner la collecte des ordures :

  1. Naviguez vers "Administration" → "Collection de jardins"
  2. Cliquez sur "GC NOW" pour une collecte immédiate
  3. Ou programmer la collecte régulière des ordures (p. ex., hebdomadaire à 2 h du matin)

Dépannage de problèmes communs

Impossible de pousser les images

Symptômes: "refusé: l'accès demandé à la ressource est refusé" erreur

Solutions:

  • Vérifier que l'utilisateur a un rôle de développeur ou plus important dans le projet
  • Vérifier que le quota de stockage du projet n'a pas été dépassé
  • S'assurer que l'utilisateur est authentifié :
  • Vérifier le nom du projet dans la balise image correspond au projet existant

Erreurs de certificat SSL

Symptômes: Erreur "x509: certificat signé par une autorité inconnue"

Solutions:

  • Ajouter le certificat CA de Harbor aux certificats de confiance de Docker
  • Pour les certificats autosignés, copiez le certificat d'AC à
  • Redémarrer le démon Docker:

Pousser/Pousser lentement l'image

Symptômes:[ Les opérations d'image prennent un temps excessif

Solutions:

  • Vérifier la bande passante et la latence du réseau
  • Vérifier les performances des E/S de stockage
  • Augmenter les téléchargements/téléchargements simultanés maximums de Docker de démon
  • Envisager d'utiliser la réplication du port pour les équipes géographiquement réparties
  • Activer le cache proxy pour les images externes fréquemment tirées

Problèmes de connexion à la base de données

Symptômes: L'interface utilisateur de port affiche des erreurs ou ne charge pas

Solutions:

  • Vérifier l'état du conteneur de la base de données:
  • Vérifier les identifiants de base de données dans port.yml
  • Vérifier les journaux de base de données:
  • S'assurer que la base de données dispose de ressources suffisantes (CPU, mémoire, disque)

Scénarios avancés multi-tenances

Distribution des conteneurs face au client

Harbor peut être utilisé pour distribuer des logiciels conteneurisés à des clients externes:

  • Créer des projets distincts pour chaque client
  • Utiliser des comptes robot avec des dates d'expiration pour l'accès au client
  • Mettre en œuvre les notifications de webhook lorsque de nouvelles versions sont disponibles
  • Configurer la réplication vers des registres spécifiques au client si nécessaire
  • Utiliser les quotas de projet pour gérer le stockage par client

Déploiement multi-régions

Pour les organisations mondiales, déployer Harbor dans plusieurs régions :

  • Déployer des instances portuaires dans chaque grande région (États-Unis, UE, APAC)
  • Configurer la réplication bidirectionnelle entre les instances
  • Utiliser l'équilibrage de charge basé sur DNS pour diriger les utilisateurs vers l'instance la plus proche
  • Mettre en œuvre une authentification cohérente LDAP/OIDC dans toutes les instances
  • Centraliser la surveillance et l'enregistrement pour tous les cas

Exigences réglementaires et de conformité

Pour les industries réglementées (soins de santé, finances, gouvernement):

  • Activer l'enregistrement complet des audits
  • Mettre en œuvre une analyse de vulnérabilité obligatoire avec des politiques de blocage
  • Exiger la signature d'image pour toutes les images de production
  • Configurer les politiques de conservation pour répondre aux exigences de conservation des données
  • Utiliser l'intégration LDAP/AD pour le contrôle centralisé de l'accès
  • Mettre en œuvre les règles de segmentation et de pare-feu du réseau
  • Essais réguliers de secours et de reprise après sinistre
  • Documenter tous les contrôles et procédures de sécurité

Meilleures pratiques pour les déploiements de ports multi-locataires

Pratiques exemplaires en matière de sécurité

  • Utilisez toujours HTTPS: Ne jamais exécuter Harbor sur HTTP en production
  • Modifier les mots de passe par défaut: Modifiez immédiatement le mot de passe de l'administrateur après l'installation
  • Activer la numérisation de vulnérabilité:[ Configurer la numérisation automatique sur la poussée
  • Signature d'image d'exécution :[ Exiger des images signées pour les déploiements de production
  • Utiliser des comptes robots:[ N'utilisez jamais de justificatifs personnels dans les pipelines CI/CD
  • Mises à jour de sécurité régulières: Gardez Harbor et ses composants à jour
  • Principe de moindre privilège :[ Accorder aux utilisateurs des autorisations minimales nécessaires
  • Enregistrement de vérification :[ Surveiller et examiner régulièrement les registres

Pratiques exemplaires opérationnelles

  • Stratégie de sauvegarde d'application:[ Sauvegardes automatisées régulières avec procédures de restauration testées
  • Utilisation de la ressource de veille: Stockage de la piste, processeur, mémoire et paramètres réseau
  • Taux de stockage fixes:[ Empêcher les projets individuels de consommer un stockage excessif
  • Configurer les politiques de rétention:[ Nettoyer automatiquement les images anciennes ou inutilisées
  • Collecte des ordures à l'annexe :[ Nettoyage régulier pour récupérer l'espace de stockage
  • Procédures de documentation: Maintenez la documentation pour les opérations communes et le dépannage
  • Test de reprise après sinistre:[ Tester régulièrement les procédures de restauration et de défectuosité de sauvegarde
  • Planification des capacités:[ Surveiller les tendances de croissance et planifier l'échelle

Pratiques exemplaires de l'organisation

  • Conventions de naming:[ Établir des noms cohérents pour les projets, les dépôts et les étiquettes
  • Structure du projet: Organiser les projets par équipe, application ou environnement
  • Politiques de contrôle d'accès:[ Définir des politiques claires pour qui peut accéder à ce
  • Stratégie d'étiquetage:[ Utiliser la version sémantique et les étiquettes significatives
  • Formation et documentation:[ S'assurer que les équipes comprennent comment utiliser Harbor efficacement
  • Gestion des changements: Mettre en oeuvre des processus d'approbation pour les changements de configuration
  • Communication:[ Établir des canaux pour annoncer la maintenance et les mises à jour

Intégrer le port à votre écosystème DevOps

Intégration des pipelines CI/CD

Exemple de pipeline d'IC GitLab :

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

Intégration de Webhook

Configurer les webhooks pour déclencher des actions lorsque les images sont poussées :

  1. Naviguez vers le projet "Webhooks"
  2. Cliquez sur "NOUVELLE HÔCHE WEB"
  3. Configurer webhook:
    • URL du point de fin:URL du récepteur webhook
    • Événements: Sélectionner les événements à déclencher (pousser, tirer, supprimer, scanner terminé)
    • Authentification: Configurer l'authentification si nécessaire
  4. Testez le webhook
  5. Cliquez sur "Continuer"

Dépôt de cartes Helm

Harbor peut également servir de dépôt de cartes 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

Déploiement futur de votre port

Rester à jour avec les mises à jour

À partir de v2.15.0, les artefacts de sortie Harbor sont signés cryptographiquement en utilisant Cosign pour assurer l'authenticité et l'intégrité.

# 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

Considérations relatives à l'élargissement

À mesure que votre organisation grandit, songez à :

  • Écaillage horizontal:[ Déployer plusieurs instances portuaires avec équilibre de charge
  • Base de données externe:[ Utiliser PostgreSQLGGGG pour une meilleure évolutivité et fiabilité
  • Redis externe:[ Utiliser un cluster dirigé Redis ou Redis pour la mise en cache
  • Stockage d'objets:[ Utilisez S3, Azure Blob ou GCS pour le stockage d'images au lieu du disque local
  • Intégration du CDN:[ Utiliser le CDN pour la distribution d'images globale

Cas d'utilisations émergentes

Harbor a toujours été conforme à la norme OCI, ce qui signifie qu'il peut stocker et distribuer tout artefact conforme à la spécification de distribution OCI, et l'extension de la spécification OCI signifie que les modèles d'IA peuvent maintenant exploiter cette même infrastructure avec la même sécurité, gouvernance et maturité opérationnelle.

  • Registre de modèles AI/ML:[ Stockage et distribution de modèles d'apprentissage automatique comme artefacts du BEC
  • modules de l'AMAS: Distribution des modules d'assemblage Web
  • Software Bill of Materials (SBOM):[ Stocker et gérer les SBOM en même temps que les images
  • Paquets de politiques:[ Distribuer les politiques de l'OPA et d'autres artefacts de configuration

Conclusion

Construire un registre Docker multi-tenu avec Harbor fournit aux organisations une solution puissante, sécurisée et évolutive pour gérer les images de conteneurs entre les équipes, les départements, et même les clients. Harbor comble l'écart en tant que registre de conteneurs open source, de qualité entreprise qui apporte la sécurité, la performance et la souveraineté à la gestion de l'image de conteneurs, en s'intégrant parfaitement aux paradigmes opérationnels existants et en fournissant une solution robuste pour les besoins modernes de gestion de l'image de conteneurs.

En mettant en œuvre les pratiques décrites dans ce guide – de l'installation et de la configuration adéquates à la consolidation de la sécurité, à la mise en place de plusieurs logements et aux meilleures pratiques opérationnelles – vous pouvez construire un déploiement Harbor prêt à la production qui répond aux besoins de votre organisation aujourd'hui tout en restant suffisamment flexible pour s'adapter aux besoins futurs.

Principaux choix pour réussir le multi-ténace Harbor:

  • Les projets sont la fondation: Utilisez des projets pour créer des espaces de noms isolés pour différents locataires
  • La sécurité est primordiale:[ Activer la numérisation de vulnérabilité, la signature d'image et la tenue d'un journal d'audit complet
  • L'automatisation est essentielle :[ Utilisez des comptes robot, des webhooks et l'intégration des API pour les flux de travail CI/CD
  • Plan d'échelle:[ Mettre en oeuvre la reproduction, la surveillance et la planification des capacités dès le début
  • Restez engagé:[ Rejoignez la communauté Harbor, restez à jour avec les mises à jour et contribuez en retour

Que vous gériez des conteneurs pour une petite équipe de développement ou que vous exploitiez une plateforme multi-locataire à grande échelle qui dessert des centaines de clients, Harbor fournit les fonctionnalités, la flexibilité et le soutien communautaire nécessaires pour réussir.

Pour plus d'informations et de ressources, visitez le site officiel du port, explorez le dépôt GitHub, rejoignez la communauté sur Slack et consultez la documentation globale Harbor. La communauté du port est active, accueillante et prête à vous aider à réussir avec le déploiement de votre registre de conteneurs.