Déploiement d'un registre privé Harbor haute disponibilité avec certificats TLS

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

Étiquettes: Harbor Docker TLS Helm trivy

Publié le 15 juin à 04h34