Container teknolojilerinin yaygınlaşmasıyla birlikte private registry ihtiyacı da arttı. Harbor, VMware tarafından geliştirilmeye başlanan ve Docker Registry'nin üzerine inşa edilen açık kaynak bir container registry çözümü. Kurumsal özellikleri, güvenlik tarama yetenekleri ve rol tabanlı erişim kontrolü ile üretim ortamlarında sıkça tercih ediliyor.
Temel Bileşenler
Harbor, birden fazla servisten oluşan bir mimariye sahip. PostgreSQL veritabanı kullanıcı ve proje bilgilerini saklıyor. Redis, job queue yönetiminden sorumlu. Core servisler arasında registry, core, portal, jobservice ve nginx bulunuyor. Nginx, reverse proxy görevi görüyor ve gelen istekleri ilgili servislere yönlendiriyor.
Trivy entegrasyonu sayesinde container image'ları güvenlik açıkları bakımından taranabiliyor. Replication motoru ise birden fazla Harbor instance'ı arasında image senkronizasyonu yapıyor. İmaj imzalama özelliği eski sürümlerde Notary servisiyle sunuluyordu; Notary güncel Harbor sürümlerinde deprecated edilip kaldırıldı.
Kurulum Öncesi Gereksinimler
Sistem gereksinimleri üretim ortamı için belirlenmiş. Minimum 2 CPU çekirdeği, 4 GB RAM ve 40 GB disk alanı öneriliyor. Kurulum için Docker Engine 20.10 ve üzeri, Docker Compose v2 ya da docker-compose v1.18 ve üzeri gerekiyor. Ayrıca OpenSSL ile imzalanmış bir TLS sertifikası hazır bulunmalı.
Ubuntu veya CentOS tabanlı sistemlerde kurulum benzer adımları takip ediyor. İlk olarak Docker ve Docker Compose kurulmalı. Docker kurulumu sonrası servis başlatılmalı ve kullanıcı docker grubuna eklenmelidir.
Harbor Kurulum Adımları
Resmi GitHub sayfasından en güncel sürüm indiriliyor. İndirilen arşiv dosyası çıkarılıyor ve kurulum dizinine geçiliyor. Örnek olarak 2.10 sürümü kullanılabilir:
wget https://github.com/goharbor/harbor/releases/download/v2.10.0/harbor-offline-installer-v2.10.0.tgz
tar xzf harbor-offline-installer-v2.10.0.tgz
cd harbor Kurulum paketi harbor.yml.tmpl şablonunu içerir; bu dosyanın harbor.yml adıyla kopyası alınır ve üzerinde düzenleme yapılır. hostname, harbor_admin_password ve veritabanı ayarları bu dosyada yapılıyor. TLS sertifikası için cert ve key dosyalarının yolları https bloğu altında belirtilmeli.
hostname: registry.example.com
harbor_admin_password: StrongAdminPass123!
https:
port: 443
certificate: /data/cert/server.crt
private_key: /data/cert/server.key
database:
password: DatabasePass456! Harbor, varsayılan olarak 443 portunu kullanıyor. Farklı bir port belirlenmek istenirse http ve https portları değiştirilebilir. Kurulum betiği çalıştırıldığında offline paketteki Docker imajları yükleniyor ve container'lar başlatılıyor.
sudo ./install.sh --with-trivy Bu komut Trivy güvenlik tarayıcısı servisini de kurar. 2.10 gibi eski sürümlerde --with-notary bayrağıyla Notary servisi de kurulabiliyordu; Notary kaldırıldığı için güncel install.sh bu bayrağı reddediyor. Kurulum tamamlandıktan sonra servisin durumu kontrol edilmeli.
docker compose ps
docker compose logs -f Temel Yapılandırma
Harbor web arayüzüne tarayıcı üzerinden erişiliyor. Varsayılan kullanıcı adı admin, şifre ise konfigürasyonda belirlenen değerdir. İlk girişte şifre değiştirilmesi öneriliyor.
Proje oluşturmak için Projects sekmesinden New Project butonuna tıklanır. Proje adı ve erişim seviyesi belirlenir. Private seçeneği seçildiğinde sadece proje üyeleri image çekebilir. Public seçildiğinde ise oturum açmamış kullanıcılar dahil herkes image çekebilir; dağıtımı bu şekilde yapmak istemiyorsanız proje private kalmalı.
Docker login işlemi için hostname kullanılmalıdır:
docker login registry.example.com
Username: admin
Password: ********** Image bir etiketle işaretlenerek Harbor'a push edilebilir:
docker tag myapp:latest registry.example.com/myproject/myapp:latest
docker push registry.example.com/myproject/myapp:latest Güvenlik Yapılandırması
TLS/SSL yapılandırması Harbor güvenliğinin temelini oluşturur. Üretim ortamlarında mutlaka geçerli bir sertifika kullanılmalıdır. Self-signed sertifika kullanılacaksa Docker daemon'ının sertifikaya güvenmesi gerekir:
mkdir -p /etc/docker/certs.d/registry.example.com
cp server.cert /etc/docker/certs.d/registry.example.com/
cp ca.crt /etc/docker/certs.d/registry.example.com/ Değişiklik sonrası Docker servisi yeniden başlatılmalı. RBAC sistemi proje bazlı yetki yönetimi sağlar. Her projeye üye eklenen kullanıcılara Limited Guest, Guest, Developer, Maintainer ve Project Admin rolleri verilebilir. Limited Guest yalnızca image çekebilir, logları ve diğer proje üyelerini göremez. Guest salt okunur erişime sahiptir. LDAP entegrasyonu ile kurumsal dizin servisi kullanılabilir.
Güvenlik taraması varsayılan kurulumda gelmez; Trivy, kurulum sırasında --with-trivy bayrağıyla eklenir. Taramanın push sonrası otomatik başlaması için proje ayarlarındaki Automatically scan images on push seçeneği işaretlenmeli. Prevent vulnerable images from running seçeneğiyle birlikte önem derecesi eşiği belirlenir; eşik seviyesinde ya da üzerinde zafiyet barındıran image'ların çekilmesi engellenir.
Network Güvenliği ve Erişim Kontrolü
Harbor sunucusunda firewall kuralları uygulanmalıdır. Sadece gerekli portlar açık olmalı:
ufw allow 22/tcp
ufw allow 443/tcp
ufw enable Docker daemon için authorization plugin kullanılabilir. Bu, kullanıcıların sadece yetkili oldukları image'ları çekmesini sağlar. Ayrıca container runtime güvenliği için seccomp ve AppArmor profilleri etkinleştirilebilir.
İzleme ve Denetim
Harbor, tüm bileşenlerin loglarını harbor.yml'de log bölümüyle belirlenen dizinde toplar, varsayılan konum /var/log/harbor altıdır. Proje bazlı işlem geçmişi web arayüzündeki Logs sekmesinden izlenebilir; kullanıcı adı ve tarih bazlı filtreleme yapılabiliyor.
Metrik toplamak istenirse harbor.yml içindeki metric ayarı etkinleştirilir, port ve path bu dosyadan ayarlanır. Exporter, core, jobservice ve registry bileşenleri Prometheus veri modeliyle metrikleri sunar. Bu veriler Grafana dashboard'ları ile görselleştirilebilir.
Yedekleme ve Kurtarma
Harbor'ın kalıcı verisi harbor.yml'deki data_volume ile belirlenen dizinde tutulur, varsayılan konum /data'dır. Düzenli yedekleme için bu dizinin tamamı alınmalıdır. Yedekleme betiği:
#!/bin/bash
BACKUP_DIR="/backup/harbor"
DATE=$(date +%Y%m%d)
mkdir -p $BACKUP_DIR
docker compose stop
tar czf $BACKUP_DIR/harbor-data-$DATE.tar.gz /data
docker compose start Restore işlemi için aynı sürümün kurulu olması ve veri dizininin değiştirilmesi gerekir.