
Install Harbor Image Registry on Ubuntu 22.04|24.04
Bir konteyner kayıt defteri, konteyner görüntülerini depolamak ve erişmek için kullanılan bir depo veya depolar koleksiyonu olarak tanımlanabilir. Konteyner tabanlı uygulama geliştirme için kullanılabilirler ve geliştiricilerin bulut tabanlı uygulamalar oluşturma ve sunma konusunda değerli zaman kazanmasını sağlarlar. Konteyner görüntülerini sistemler arasında paylaşırken aracı görevi görürler.
Konteyner görüntüleri, bir uygulamayı çalıştırmak için gereken kütüphanelerden ve sistem paketlerinden oluşur. Geliştiricilere taşınabilirlik ve çeviklik gibi çeşitli avantajlar sağlarlar. Konteyner görüntüleri, Buildah , kaniko , Img Image builder vb. gibi araçlar kullanılarak oluşturulabilir. Konteyner görüntüleri geliştirildikten sonra, bunları kaydedebileceğiniz, paylaşabileceğiniz ve daha sonra erişebileceğiniz bir yere ihtiyacınız olur. Bir konteyner kayıt defteri, görüntüleri uzak bir sisteme yükleyerek (iterek) ve indirerek (çekerek) depolama sağlar.
İki ana konteyner kayıt türü vardır:
- Genel kayıtlar : Bunlar, kayıtların mümkün olduğunca hızlı bir şekilde döndürülmesi ve çalıştırılması isteyen bireyler ve küçük ekipler tarafından kullanılır. Bunlar daha az güvenlidir ve büyük kuruluşlar için yama, gizlilik ve erişim denetimi gibi sorunlara neden olabilir.
- Özel kayıtlar : Gelişmiş güvenlik özellikleri sunarlar ve kurumsal kapsayıcı görüntü depolamasına güvenlik ve gizliliği dahil etmenin en iyi yolunu sağlarlar. Uzaktan veya şirket dışında barındırılabilirler. En popüler Özel Kayıtlar Google Kapsayıcı Kayıt Defteri, Amazon Elastik Kapsayıcı Kayıt Defteri (ECR) ve Azure Kapsayıcı Kayıt Defteri’dir.
Özel konteyner kayıtları tercih edilir çünkü kuruluşun görüntülere dahili olarak daha güvenli bir şekilde erişmesine olanak tanır. Çoklu kimlik doğrulama sistemleri konteyner görüntülerini doğrulamak için önlemler alır.
Harbor Container Image Registry, konteyner görüntülerini depolamak ve dağıtmak için kullanılan ücretsiz ve açık kaynaklı bir kurumsal sınıf konteyner kayıt defteridir. Politikalar ve rol tabanlı erişim denetimi kullanarak eserleri güvence altına alır. Ayrıca, güvenilir olarak imzalanmadan önce görüntülerin taranmasını ve güvenlik açıklarından arındırılmasını sağlar. Harbor, VMware tarafından geliştirildi ve daha sonra Cloud Native Computing Foundation’a (CNCF) devredildi. Harbor, daha sonra güvenlik sorunlarını iyileştirmek ve ortadan kaldırmak için geliştirilen Docker’ın kaynak kodundan geliştirilmiştir. Şu anda, kullanıcıların Docker, Podman, Kubernetes vb. gibi bulut tabanlı bilgi işlem platformları genelinde konteyner görüntülerini güvenli bir şekilde yönetmelerine yardımcı olan yüksek performans ve birlikte çalışabilirlik sağlar.
Harbor ile ilgili temel özellikler şunlardır:
- Helm Tablolarını Yönetin : Projelere göre izole edilmiş ve RBAC tarafından kontrol edilen Helm tablolarını yönetmeye yardımcı olur.
- LDAP grubuna göre rolü yönet : yöneticiler bir LDAP/AD grubunu Harbor’a aktarabilir ve ona proje rolleri atayabilir.
- Projeleri çoğalt : Görüntü çoğaltmayı destekler. Depoları bir Harbor örneğinden diğerine çoğaltmak mümkündür.
- Rol Tabanlı Erişim Kontrolü : Kullanıcılar ve depolar projeler halinde düzenlenir. Kullanıcılar farklı projelerdeki görüntüler için farklı izinlere sahip olabilir.
- Güvenlik Açığı Taraması : Clair’i kullanarak görüntüleri düzenli olarak tarar ve kullanıcıları güvenlik açıkları konusunda uyarır.
- Denetim : Depoya yapılan tüm işlemler takip edilir.
- RESTful API: Çoğu yönetimsel işlem için RESTful API’leri barındırır, dış sistemlerle entegrasyonu kolaydır.
- Grafiksel Kullanıcı Portalı : Kullanıcıların kolayca gezinebileceği, depoları arayabileceği ve projeleri yönetebileceği bir portal.
Ubuntu 22.04|20.04’e Harbor Image Registry’yi yükleyin
Bu kılavuzda, Ubuntu 22.04|20.04’te Harbor Container Image Registry’nin nasıl kurulacağını inceleyeceğiz Harbor, aşağıdakileri içeren 8 bileşenden oluşmaktadır:
- Redis : Oturum açma bilgilerini depolamak için kullanılan bellek içi veritabanı.
- PostgreSQL : Harbor’un kullandığı veritabanı.
- Beego : Harbor web servisinin inşa edildiği ve geliştirildiği açık kaynaklı bir web uygulaması çerçevesi.
- Chartmuseum : Dümen Haritalarını yönetmek için kullanılır.
- Docker : Docker imajlarını itmek ve çekmek için kullanılır.
- Helm : Helm grafiklerini yönetmek için
- Swagger-ui : RESTful API’yi çağırmak ve test etmek için kullanılır.
Sistem Gereksinimleri
- Minimum 2CPU 4GB RAM 40GB
- sunucuda 80,443 portlarının açık olması
- Kurulum esnasında makine internete açık olmalı
- Ubuntu 22.04/24.04 işletim sistemli bir makine
Öncelikle sunucuyu güncelleyip gerekli paketleri yükleyerek başlayalım:
sudo apt update && sudo apt -y full-upgrade sudo apt install apt-transport-https ca-certificates curl software-properties-common vim git |
Step1 -Docker ve Compose Kurulumu
Ubuntu 24.04 üzerine Docker ve Docker compose kurulumu için aşağıdaki komutları çalışıtıroyruz.
sudo apt update sudo apt install -y docker.io docker-compose |
Docker servisini kontrol ediyor makine açılışında otomatik devreye girmesi için servisi enable ediyoruz.
sudo systemctl start docker sudo systemctl enable docker sudo systemctl status docker |
sudo usermod -aG docker ubuntu newgrp docker sudo chmod 777 /var/run/docker.sock |
Versiyon kontrolü yapıyoruz.
docker version docker-compose version |
Step2-Harbor Registry installer download
#oturum açtığım kullanıcının home dizinine geçiyorum dosyaları buraya indireceim. root@ip-172-31-23-199:/home/ubuntu# cd ~ root@ip-172-31-23-199:~# pwd /root
Aşağıdaki komutu çalıştırıyorum.
LATEST_VERSION=$(curl -s https://api.github.com/repos/goharbor/harbor/releases/latest | grep tag_name | cut -d '"' -f 4) ONLINE_INSTALLER_URL="https://github.com/goharbor/harbor/releases/download/${LATEST_VERSION}/harbor-online-installer-${LATEST_VERSION}.tgz" wget ${ONLINE_INSTALLER_URL}
Arşivden çıkarıyoruz dosyamızı
tar zxvf harbor-online-installer-*.tgz |
Açılan dizine gidin ve yapılandırma dosyasını kopyalayın
cd harbor cp harbor.yml.tmpl harbor.yml nano harbor.yml |
Step3-SSL Sertifika yapılandırması
Burada Let’s Encrypt cerbot ajanını kuruyor ve SSL sertifikası için istekte bulunuyorum (eğer kendi sertifikanız varsa manuel şekilde de yükleyebilirsiniz).
sudo apt install certbot -y sudo certbot certonly --standalone -d "harbor.sbaylab.com" --preferred-challenges http --agree-tos -n -m "serdarbayram01@gmail.com" --keep-until-expiring
Domain : harbor.sbaylab.com
olacak şekilde yazıyorum ve doğrulama için bir mail adresi giriyorum
Bu sertifikanın alınabilmesi için harbor.sbaylab.com alan adının A kaydının harbor sunucunun public ip adresine “80” ve “443” portarından erişebilmesi gerekiyor.
Eğer DNS kaydı doğru yapılandırıldıysa aşağıdaki gibi bir çıktıyla başarılı şekilde sertifikanız oluşturulacak.
No VM guests are running outdated hypervisor (qemu) binaries on this host. Saving debug log to /var/log/letsencrypt/letsencrypt.log Account registered. Requesting a certificate for harbor.sbaylab.com Successfully received certificate. Certificate is saved at: /etc/letsencrypt/live/harbor.sbaylab.com/fullchain.pem Key is saved at: /etc/letsencrypt/live/harbor.sbaylab.com/privkey.pem This certificate expires on 2025-05-22. These files will be updated when the certificate renews. Certbot has set up a scheduled task to automatically renew this certificate in the background. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - If you like Certbot, please consider supporting our work by: * Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate * Donating to EFF: https://eff.org/donate-le - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Sertifika için gerekli .pem ve .cer dosyaları aşağıdaki dizin altında yer alıyor artık.
/etc/letsencrypt/live/harbor.sbaylab.com/fullchain.pem /etc/letsencrypt/live/harbor.sbaylab.com/privkey.pem |
Kendi kendine imzalanmış Local sertifikaları kullanma
Ayrıca Self-signed sertifikaları oluşturmak ve kullanmak da mümkündür . Ancak bu , Docker/Podman istemcisinden Harbor’a bağlanmaya çalışırken bilinmeyen CA sertifikasıyla ilgili bir soruna neden olabilir .
mkdir -p certs openssl req \ -newkey rsa:4096 -nodes -sha256 -keyout certs/harbor.key \ -addext "subjectAltName = DNS:harbor.computingforgeeks.com" \ -x509 -days 365 -out certs/harbor.crt
Bundan sonra sertifikaları /etc/ssl/certs/ dizinine kopyalayın ;
sudo cp certs/harbor.* /etc/ssl/certs/ |
Gerekli ayarları yapın(Edit Config File)
nano harbor.yml |
SSL için sertifika path aşağıdaki gibidir.
ls /etc/letsencrypt/live/harbor.sbaylab.com #Output aşağıdaki gibi olacak .cert.pem chain.pem fullchain.pem privkey.pem README
Aşağıdaki bölümleri ekran görüntüsündeki gibi düzenliyoruz parola bölümlerinde kendinize bir parola belirleyebilirsiniz.ben test domaini olarak “harbor.sbaylab.com” adresini kullanacağım.
hostname: harbor.sbaylab.com
SSL Certificate Path :
/etc/letsencrypt/live/harbor.sbaylab.com/cert.pem
/etc/letsencrypt/live/harbor.sbaylab.com/privkey.pem
harbor_admin_password:
password:
Ayrıca veritabanı parolasını, maksimum bağlantı sayısıyla birlikte yapılandırabilirsiniz:
# Harbor DB configuration database: # The password for the root user of Harbor DB. Change this before any production use. password: root123 # The maximum number of connections in the idle connection pool. If it <=0, no idle connections are retained. max_idle_conns: 100 # The maximum number of open connections to the database. If it <= 0, then there is no limit on the number of open connections. # Note: the default number of connections is 1024 for postgres of harbor. max_open_conns: 900
Ctrl+o diyerek değişiklikleri kayıt ediyoruz.
Adım 4 – install Harbor Container Registry
harbor.yml Yapılandırma dosyasını düzenledikten sonra, Harbor’ı kurmak için aşağıdaki komutu çalıştırın:
sudo ./install.sh --with-trivy
Bu komut sonrası çıktı aşağıdaki gibi olacaktır.
docker ps -a |
komutuyla kurulan containerları kontrol ediyoruz.
ip adresi yada host name üzerinden login olduğumuzda aşağıdaki gibi bir ekran bizi karşılayacak.
Default bilgiler
user : admin
Pass : Harbor12345
Trivy scannerın çalışırlığını kontrol ediyoruz.
Buraya kadar olan kısımda kurulumu başarıyla tamamladık.
Eğer kurulumda bazı containerlar up olmaz yada hataya düşerse harbor dizini içindeki docker compose ile tekrar sistemi ayağa kaldırabilirsiniz.
Aşağıdaki komutları uygulamanız yeterlidir.
harbor klasörü içerisine giderek docker compose dosyasını kullanabilrsiniz.
docker-compose down docker-compose up -d |
Harbor Hesap oluşturma
Administrator->Users Altına Menüsüne giderek imajlarımızı gönderirken kullanacağımız “push” adında bir hesap yaratıyorum.
oluşturduğum kullanıcıya admin yetkisi veriyorum.
Container image Registery(Remote Machine)
Docker imajı pushlayacağınız makinede aşağıdak tanımları yapmanız gerekiyor.
Artık Harbor Container Image Registry’deki görüntüleri çekip kullanabilirsiniz. HTTP kullandıysanız, Docker istemcinizde aşağıdaki ayarlamaları yapmanız gerekir.
sudo nano /etc/docker/daemon.json |
Dosyanın içerisine aşağıdaki tanımı ekliyoruz.
{ “insecure-registries”: [“harbor.sbaylab.com”] } |
Docker servisimizi restart ediyoruz.
sudo systemctl restart docker |
Eğer localde bağlanıyorsanız DNS kaydınız doğru olmalı yada local DNS adresinizi imajı pushlayacağınız makineye aşağıdaki şekilde girmelisiniz.
$ sudo nano /etc/hosts #ip adresi olan yer harbor serverın ip adresi olmalı. |
Login to Harbor
##For Docker docker login <harbor_address>##For Podman with HTTPS podman login <harbor_address>##For Podman with HTTP podman login <harbor_address> –tls-verify=false |
Biz docker kullanıyoruz bu sebeple aşağıdaki gibi giriyoruz bilgilerimizi
docker login harbor.sbaylab.com |
Çıktımız aşağıdaki gibi olacaktır.
root@ip-172-31-36-145:/home/ubuntu# docker login harbor.sbaylab.com Authenticating with existing credentials... Stored credentials invalid or expired WARNING! Your password will be stored unencrypted in /root/.docker/config.json. Configure a credential helper to remove this warning. See https://docs.docker.com/engine/reference/commandline/login/#credential-storesUsername: push Password: WARNING! Your password will be stored unencrypted in /root/.docker/config.json. Configure a credential helper to remove this warning. See https://docs.docker.com/engine/reference/commandline/login/#credential-stores Login Succeeded root@ip-172-31-36-145:/home/ubuntu#
Kullanıcı adı ve şifreyi şu komutla da verebilirsiniz:
$ docker login harbor.sbaylab.com --username=admin --password=Harbor12345 WARNING! Using --password via the CLI is insecure. Use --password-stdin. WARNING! Your password will be stored unencrypted in /home/rocky9/.docker/config.json. Configure a credential helper to remove this warning. See https://docs.docker.com/engine/reference/commandline/login/#credentials-store Login Succeeded
Harbor sunucumuza bağlantımızı sağladık buraya kadar geldiysek artık Harbor sunucumuza container imajlarımızı gönderebiliriz.
Image Tag&Push
şimdi Jenkins serverım üzerinde bulunan bir imajımı Harbor sunucuma göndereceğim
root@ip-172-31-36-145:/home/ubuntu# docker image ls REPOSITORY TAG IMAGE ID CREATED SIZE serdarbayram/super-mario latest c34dde968d25 24 hours ago 679MB sonatype/nexus3 latest 1143ad0287a3 2 weeks ago 630MBnginx stable-alpine bb941add9a4c 2 weeks ago 47.2MB sonarqube lts-community 522e1399903e 4 weeks ago 604MB node 16.17.0-alpine 5dcd1f6157bd 2 years ago 115MB centos latest 5d0da3dc9764 3 years ago 231MB
Yukarıda göründüğü gibi bir kaç adet imaj yer alıyor repomda ben “serdarbayram/super-mario” isimli imajı göndereceğim.
Project Bölümüne geldiğiniz burada yarattığınız projeler yani yeni repository ler görünüyor default olarak gelen “Library” altına imajımı göndereceğim. Buraya New diyerek yeni bir proje açıp başka repostory lerde yaratabilirsiniz.
serdarbayram/supermario isimli imajımı harbor.sbaylab.com/library/supermario:latest olarak Tag liyorum.
docker tag serdarbayram/super-mario harbor.sbaylab.com/library/supermario:latest |
çıktımız aşağıdaki gibi olacak
root@ip-172-31-36-145:/home/ubuntu# docker image ls REPOSITORY TAG IMAGE ID CREATED SIZE serdarbayram/super-mario latest c34dde968d25 25 hours ago 679MB harbor.sbaylab.com/library/supermario latest c34dde968d25 25 hours ago 679MB
Artık imajımızı push layarak harbor serverımıza gönderebiliriz aşağıdaki komutu kullanıyoruz.
docker push harbor.sbaylab.com/library/supermario |
Sunucumuza gittiğimizde aşağıdaki gibi imajımızın harbor repomuza geldiğini göreceğiz.
Harbor imaj Scan
Harbor paketimizi kurarken Trivy scanner ı da beraberinde kurmuştuk şimdi imajımızı repomuz üzerinden taramadan geçirerek ne kadar güvenli olduğunu kontrol edeceğiz.
“Scan vulnarability” diyerek taramayı başlatıyoruz.
Tarama detaylarına baktığınızda aşağıda gördüğünüz gibi bir çok zaafiyet bulmuş ve hangi CVE kodunun etkilediği bilgileri yer alıyor.
Başarılı şekilde harbor kurulumunu yaparak imajlarımızı artık güvenlik kontrolünden geçirebilir yeni zaffiyetleri de bu ekranda taramalar yaparak görebiliriz.
Harbor kurulum kılavuzu makalesinin sonuna geldik umarım sizler içinde yararlı olmuştur.