Harbor est un registre de conteneurs open source de niveau entreprise qui offre des fonctionnalités avancées telles que le contrôle d'accès basé sur les rôles (RBAC), l'intégration LDAP/AD, la journalisation d'audit et la numérisation des vulnérabilités. Cet article détaille la mise en place d'une infrastructure Harbor sécurisée via HTTPS.
Préparation de l'environnement
Installation de Docker
Il est recommandé d'allouer un espace disque suffisent pour le stockage des images. Installez le moteur Docker via le script officiel :
curl -fsSL https://get.docker.com | sh
systemctl enable --now docker
Installation de Docker Compose
Harbor s'appuie sur Docker Compose pour l'orchestration de ses services. Téléchargez la version binaire la plus récente :
COMPOSE_VERSION=$(curl -s https://api.github.com/repos/docker/compose/releases/latest | grep 'tag_name' | cut -d\" -f4)
curl -L "https://github.com/docker/compose/releases/download/${COMPOSE_VERSION}/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
docker-compose --version
Configuration des certificats TLS
Pour sécuriser les communications, générez une autorité de certification (CA) et des certificats pour vos nœuds. Créez un répertoire dédié :
mkdir -p /opt/registry/ssl
cd /opt/registry/ssl
Génération de la clé privée CA et du certificat :
openssl genrsa -out ca.key 4096
openssl req -x509 -new -nodes -sha512 -days 3650 \
-subj "/C=FR/ST=Paris/L=Paris/O=MyOrg/CN=registry.mydomain.local" \
-key ca.key -out ca.crt
Génération du certificat pour le serveur Harbor avec des Subject Alternative Names (SAN) :
openssl genrsa -out registry.mydomain.local.key 2048
openssl req -sha512 -new \
-subj "/C=FR/ST=Paris/L=Paris/O=MyOrg/CN=registry.mydomain.local" \
-key registry.mydomain.local.key \
-out registry.mydomain.local.csr
cat > v3.ext <<-EOF
authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
extendedKeyUsage = serverAuth
subjectAltName = @alt_names
[alt_names]
DNS.1=registry.mydomain.local
DNS.2=harbor-node-01
DNS.3=harbor-node-02
EOF
openssl x509 -req -sha512 -days 3650 \
-extfile v3.ext \
-CA ca.crt -CAkey ca.key -CAcreateserial \
-in registry.mydomain.local.csr \
-out registry.mydomain.local.crt
Déploiement de Harbor
Téléchargez l'installateur hors ligne de Harbor et extrayez l'archive :
cd /opt/registry
wget https://github.com/goharbor/harbor/releases/download/v2.8.0/harbor-offline-installer-v2.8.0.tgz
tar -xzf harbor-offline-installer-v2.8.0.tgz
cd harbor
Copiez le modèle de configuraton et modifiez-le pour activer HTTPS et définir les chemins des certificats :
cp harbor.yml.tmpl harbor.yml
Éditez harbor.yml avec les paramètres suivants :
hostname: registry.mydomain.local
https:
port: 443
certificate: /opt/registry/ssl/registry.mydomain.local.crt
private_key: /opt/registry/ssl/registry.mydomain.local.key
harbor_admin_password: SecureP@ssw0rd!
data_volume: /data/harbor
Préparez la configuration et lancez l'installation incluant le scanner de vulnérabilités Trivy :
./prepare --with-trivy
./install.sh
Configuration des clients
Distributoin des certificats CA
Pour éviter les erreurs de certification lors du pull/push d'images, le certificat CA doit être approuvé par tous les nœuds clients Docker.
mkdir -p /etc/docker/certs.d/registry.mydomain.local/
scp /opt/registry/ssl/ca.crt user@client-node:/etc/docker/certs.d/registry.mydomain.local/ca.crt
Authentification et test
Connectez-vous au registre :
docker login registry.mydomain.local
Cette action génère un fichier d'authentification ~/.docker/config.json contenant les jetons encodés.
Automatisation de la distribution
Utilisez un script pour propager les certificats et le fichier d'authentification sur plusieurs nœuds de production :
#!/bin/bash
NODES=("192.168.1.10" "192.168.1.11" "192.168.1.12")
SSH_USER="deploy"
for target in "${NODES[@]}"; do
echo "Configuration du nœud ${target}..."
ssh ${SSH_USER}@${target} "mkdir -p /etc/docker/certs.d/registry.mydomain.local"
scp /opt/registry/ssl/ca.crt ${SSH_USER}@${target}:/etc/docker/certs.d/registry.mydomain.local/ca.crt
scp -r ~/.docker ${SSH_USER}@${target}:~/
echo "Mise à jour terminée pour ${target}."
done
Fonctionnalités avancées
Gestion des charts Helm
Les versions récentes de Harbor prennent en charge nativement les charts Helm via la distribution OCI. Il n'est plus nécessaire d'installer ChartMuseum séparément.
helm registry login registry.mydomain.local
# Pousser un chart vers Harbor
helm package myapp-chart
helm push myapp-1.0.0.tgz oci://registry.mydomain.local/library
Analyse des vulnérabilités avec Trivy
Trivy est intégré par défaut lors de l'installation avec l'outil prepare. Il scanne automatiquement les images poussées vers le registre. Vous pouvez configurer les politiques de sécurité dans l'interface web de Harbor pour bloquer le déploiement d'images contenant des failles critiques.
Optimisation des performances de téléchargement
Si les téléchargements d'images sont lents, configurez un cache de proxy ou utilisez des miroirs Docker sur vos nœuds clients en modifiant le fichier /etc/docker/daemon.json :
{
"registry-mirrors": ["https://mirror.gcr.io"],
"insecure-registries": []
}
Redémarrez ensuite le service Docker :
systemctl restart docker