Harbor, açık kaynaklı bir Docker registry yöneticisidir ve büyük ölçekli Docker image’larını güvenli ve yönetilebilir bir şekilde saklamak için geliştirilmiştir. Harbor, Docker Registry’nin üstüne eklenen bir dizi özellik sunarak, enterprise düzeyde image yönetimi ve güvenlik sağlar.
Başlıca Özellikler
- Kullanıcı ve Erişim Yönetimi
- Rol Tabanlı Erişim Kontrolü (RBAC): Kullanıcılara ve gruplara çeşitli yetkiler atayarak, hangi projelere erişim sağlayabileceklerini ve hangi işlemleri yapabileceklerini yönetir.
- Proje ve Repository Yönetimi
- Projeler: Docker image’larını organize etmek için projeler oluşturur. Her proje altında bir veya daha fazla repository (depo) barındırabilir.
- Repository (Depo) Yönetimi: Image’ları yönetir, tag’leri kontrol eder ve görüntüleme yetenekleri sunar.
- Güvenlik Özellikleri
- Image Tarama: Yüklenen Docker image’larını güvenlik açıkları açısından tarar ve raporlar. Bu, zayıf noktaları hızlı bir şekilde tespit etmeye yardımcı olur.
- Güvenli İletişim: HTTPS destekleyerek veri iletimini güvence altına alır.
- Yüksek Erişilebilirlik ve Ölçeklenebilirlik
- Klonlama ve Dağıtım: Büyük veri merkezlerinde veya bulut ortamlarında yük dengelemesi ve yüksek erişilebilirlik sağlar.
- Çoklu Veri Merkezi Desteği: Birden fazla Harbor instance’ını yönetme yeteneği sunar.
- CI/CD Entegrasyonu
- DevOps Süreçleriyle Entegrasyon: CI/CD pipeline’larına entegre edilerek, otomatik olarak Docker image’larını build eder ve dağıtır.
- Kapsamlı Yönetim Araçları
- Web UI: Kullanıcı dostu bir web arayüzü sunarak, Docker image’larının yönetimini ve gözden geçirilmesini kolaylaştırır.
- API ve CLI: Yönetim ve entegrasyon için kapsamlı API ve komut satırı araçları sağlar.
Harbor Avantajları:
- Güvenlik: Güvenlik açıklarını tarayarak, potansiyel riskleri minimize eder.
- Yönetilebilirlik: Kullanıcı ve erişim yönetimini kolaylaştırır, projeleri ve repository’leri organize eder.
- Performans: Büyük ölçekli ortamlar için yüksek performans ve ölçeklenebilirlik sunar.
- Entegrasyon: CI/CD süreçleri ve diğer araçlarla entegrasyon yeteneği sağlar.
Adım Adım Harbor Kurulumu
1-) Docker Kurulumu:
Paket listelerini güncelleyelim:
sudo apt update
Docker indiriyoruz:
apt install docker-ce
Docker aktif hale getiriyoruz:
sudo systemctl start docker
sudo systemctl enable docker
2-) Docker Compose Kurulumu:
sudo curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
Yetki verelim:
sudo chmod +x /usr/local/bin/docker-compose
Harbor’u indirelim.
https://github.com/goharbor/harbor/releases/download/v2.7.3/harbor-offline-installer-v2.7.3.tgz
tar xvf harbor-offline-installer-v2.7.3.tgz
cp harbor/harbor.yml.tmpl harbor.yml
Harboru local kullanım için yapılandırıyoruz:
nano harbor/harbor.yml
Local kullanım için olması gereken ayarlar:
hostname
: Burası ana makinenizin IP adresini almalıdır.http.port
: SSL olmadan 80. portu kullanacak şekilde yapılandırın.
Harbor Ekranına erişme:
Harbor giriş işlemleri:
Harbor’a image yüklemek için öncelikle login olmamız gerekir ancak sunucumuzun terminalinde “docker login” komutunu çalıştırırsak bu doğrudan DockerHub’a login olmaya çalışır. Ancak biz image’larımız DockerHub yerine Harbor’a yüklemek istediğimiz için Harbor’a login olmamız gerekir.
Eğer SSL sertifikası olmadan kurulum yaptıysanız, login olma işlemi esnasında http: server gave HTTP response to HTTPS client hatası almamız olasıdır. İşte bu hatayı çözebilmek için;
📌Docker yapılandırma dosyasını (exp: /lib/systemd/system/docker.service) bir metin düzenleyici ile açıp ExecStart ile başlayan satırın sonuna aşağıdaki ibare eklenerek
--insecure-registry=http://<harbor_adresi>
👨💻 sudo systemctl daemon-reload
👨💻 sudo systemctl restart docker
ve devamında komutlarını çalıştırarak sorunu çözebilirsiniz.
📌 Eğer bu işlemler sonunda Harbor arayüzüne erişim sorunu yaşarsanız harbor klasörüne giderek sudo ./install.sh komutunu yeniden çalıştırmanız gerekebilir.
Harborda pull ve push işlemleri için login olmamız gerekmektedir. Kullanıcı adı ve şifre işlemlerinden sonra başarılı bir şekilde giriş yapılıyor.
Proje Oluşturma
Proje oluşturarak, o projeye ait imaj dosyalarımızı yükleyebiliriz. Projelere RBAC (Rol Tabanlı Erişim Kontrolu) sağlayabiliriz.
Buradan Yeni Proje alanına tıklayarak yeni proje oluşturacağız.
Proje adını giriyoruz. Erişim seviyesini genel bıraktığınız taktirde login işlemi gerçekleşmeden imaj dosyaları pull edilebilir hale gelecektir fakat Genel işaretlenmezse oturum isteyecektir.
İmaj Dosyası Push etme & Pull Etme
Öncelikle imajımızı taglamamız gerekiyor.
docker tag backendimage:latest localhost/backend/backendimage:latest
localhost ⇒ Harborumuzun çalıştığı yer
localhost/backend ⇒ Harbor üzerinden oluşturduğumuz proje adı.
localhost/backend/backendimage:latest ⇒ Harborumuza push ettiğimiz İmage dosyamız
Taglama işleminden sonra push edebiliriz.
docker push localhost/backend/backendimage:latest
Evet. İmaj dosyamız geldi.
Projelere Kullanıcı ekleme & Yetki Tanımlaması
Projelerimiz bu şekilde dahil edildi.
Buradan herhangi bir projeye girerek, kullanıcı eklemesi yapacağız. Kullanıcılar kısmından Kullanıcı Ekle butonuna basarak kullanıcı ekleyebiliriz.
Ekleyeceğimiz kullanıcı için buradan rol belirleyebiliriz.
Robot Accounts
Harbor’da Robot Accounts (Robot Hesapları), otomatikleştirilmiş işlemler yapmak için kullanılan, yetkilendirilmiş hesaplar oluşturmanı sağlar. Bu hesaplar, belirli görevleri gerçekleştirmek için API üzerinden Harbor ile etkileşimde bulunabilir, bu da özellikle CI/CD (Continuous Integration/Continuous Deployment) süreçlerinde oldukça faydalıdır.
Robot Accounts Özellikleri:
- Otomasyon: Robot hesapları, insan müdahalesine gerek kalmadan belirli işlemleri (örneğin, imaj çekme, imaj yükleme, silme gibi) yapabilir. Bu özellik, CI/CD boru hatalarında veya otomatik yedekleme işlemlerinde kullanışlıdır.
- İzinler: Her robot hesabına belirli projeler için belirli izinler verilebilir. Bu, güvenliği artırır çünkü her robot hesabının sadece gerekli izinlere sahip olmasını sağlar.
- API Erişimi: Robot hesapları API anahtarları aracılığıyla Harbor API’sine erişebilir. Bu, manuel giriş gerektirmeden çeşitli işlemlerin otomatik olarak gerçekleştirilmesine olanak tanır.
- Şifre ve Anahtar: Robot hesapları bir kullanıcı adı ve şifre yerine API anahtarıyla tanımlanır. Bu anahtar, CI/CD araçları veya script’ler tarafından kullanılabilir.
Kullanım Senaryoları:
- CI/CD Boru Hatları: Bir CI/CD aracı, robot hesabını kullanarak belirli bir proje için Harbor’dan imaj çekebilir veya imajı yükleyebilir.
- Otomatik Yedekleme: Harbor’da bulunan imajları belirli aralıklarla yedeklemek için robot hesapları kullanılabilir.
- Günlük İşlemler: Bir script, belirli bir projede eski Docker imajlarını temizlemek için robot hesabını kullanabilir.
Bu özellik sayesinde, otomatik işlemler sırasında güvenliği artırarak Harbor’ı daha verimli bir şekilde kullanabilirsin.
Registries
Registries Kısmının İşlevleri:
- Diğer Kayıt Defterlerine Bağlanma: Harbor, Docker Hub, Google Container Registry (GCR), Amazon Elastic Container Registry (ECR) gibi popüler Docker kayıt defterlerine bağlanabilir. Bu sayede, bu kayıt defterlerinde bulunan imajları Harbor’a çekebilir veya Harbor’daki imajları bu kayıt defterlerine itebilirsin.
- İmaj Senkronizasyonu: Farklı kayıt defterleri arasında imajları senkronize edebilirsin. Örneğin, bir imajı önce Harbor’a itebilir ve ardından bu imajı başka bir Docker kayıt defterine senkronize edebilirsin. Bu, dağıtık sistemlerde veya çoklu bulut ortamlarında imaj yönetimini kolaylaştırır.
- Harbor İçi ve Dışı İmaj Yönetimi: Registries kısmını kullanarak, Harbor’daki projelerini dışarıdaki kayıt defterleriyle entegre edebilir ve bu imajları Harbor üzerinden yönetebilirsin. Bu sayede imajları farklı ortamlar arasında taşımak veya yedeklemek daha kolay hale gelir.
- Otomatik Çekme (Pull) ve İtme (Push): Belirli aralıklarla otomatik olarak dış kayıt defterlerinden imajları çekmek veya Harbor’dan bu kayıt defterlerine imajları itmek için zamanlanmış görevler oluşturabilirsin.
Kullanım Senaryoları:
- Çoklu Bulut Ortamları: Birden fazla bulut sağlayıcısında çalışan uygulamalar için imajların senkronizasyonu gerekebilir. Registries kısmı, imajları farklı bulut ortamlarına kolayca taşımana olanak tanır.
- Kapsamlı Yedekleme: Bir kayıt defterindeki önemli imajları Harbor’a çekerek yedekleyebilir ve daha güvenli bir ortamda saklayabilirsin.
- CI/CD İş Akışları: CI/CD boru hattında kullanılan imajları bir kayıt defterinden Harbor’a çekip, test ve üretim süreçlerinde kullanabilirsin.
Registries kısmı, imaj yönetimini merkezi bir noktadan yap