Skip to main content
  1. Posts/

Setting Up Private Registry Using Harbor

·4 mins·
docker docker kubernetes
Table of Contents

Private Registry merupakan repositori untuk menyimpan dan mengelola image Docker pribadi. Dengan menggunakan private registry, Anda dapat mengontrol siapa yang memiliki akses ke image dan memastikan bahwa hanya pengguna berwenang saja yang dapat mengaksesnya. Hal ini sangat penting terutama jika Anda bekerja dengan data atau images sensitif yang tidak ingin dipublikasikan.

Harbor adalah registry open source yang dapat mengamankan image Anda sekaligus membantu mengelola image secara konsisten di seluruh platform komputasi cloud native seperti Kubernetes dan Docker.

Prerequisites
#

Sebelum memulai, pastikan server telah terinstall:

  • Docker engine version: 17.06.0+
  • Docker Compose version: 1.18.0+

Download the Harbor Installer
#

Terdapat 2 installer yang dapat Anda pilih:

  • Online installer: Mengunduh image harbor dari docker hub. Karena itu ukurannya kecil.
  • Offline installer: Image sudah ada di dalam archive sehingga harbor tetap dapat diinstall meski server tidak memiliki koneksi ke internet. Ukuran archive sekitar 600MB+

Panduan ini akan memakai Online installer untuk menginstall harbor.

wget https://github.com/goharbor/harbor/releases/download/v2.10.0/harbor-online-installer-v2.10.0.tgz

Extract archive dengan tar

tar -xaf harbor-online-installer-v2.10.0.tgz

Configure HTTPS Access to Harbor
#

Langkah ini opsional apabila Anda ingin menggunakan harbor pada lingkungan local. Namun jika Anda menginstall harbor di cloud server disarankan untuk menggunakan HTTPS agar terhindar dari serangan man-in-the-middle.

Berikut adalah cara membuat CA dengan OpenSSL lalu menggunakan CA tersebut untuk menandatangi sertifikat server dan sertifikat klien. Anda bisa juga menggunakan penyedia CA lain seperti Let’s Encrypt atau ZeroSSL.

Generate a Certificate Authority Certificate

Generate CA private key.

openssl genrsa -out ca.key 4096

Generate CA certificate.

openssl req -x509 -new -nodes -sha512 -days 365 \
 -subj "/C=ID/ST=Jakarta/L=Jakarta/O=example/OU=Personal/CN=SRV-CA" \
 -key ca.key \
 -out ca.crt

Generate Server Certificate

Generate private key. Ganti yourdomain.com dengan domain Anda.

openssl genrsa -out yourdomain.com.key 4096

Generate certificate signing request (CSR).

openssl req -x509 -new -nodes -sha512 -days 365 \
 -subj "/C=ID/ST=Jakarta/L=Jakarta/O=example/OU=Personal/CN=yourdomain.com" \
 -key ca.key \
 -out ca.crt

Generate x509 v3 extension file.

cat > v3.ext <<-EOF
authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
extendedKeyUsage = serverAuth
subjectAltName = @alt_names

[alt_names]
DNS.1=yourdomain.com
DNS.2=yourdomain
DNS.3=hostname
EOF

Selanjutnya gunakan v3.ext untuk menghasilkan sertifikat dari host harbor.

openssl x509 -req -sha512 -days 365 \
 -extfile v3.ext \
 -CA ca.crt -CAkey ca.key -CAcreateserial \
 -in yourdomain.com.csr \
 -out yourdomain.com.crt

Setelah sertifikat terbuat, selanjutnya copy sertifikat ke harbor dan docker agar dapat dikonfigurasi.

On Harbor host

cp yourdomain.com.crt /data/cert/
cp yourdomain.com.key /data/cert/

On Docker host

cp yourdomain.com.cert /etc/docker/certs.d/yourdomain.com/
cp yourdomain.com.key /etc/docker/certs.d/yourdomain.com/
cp ca.crt /etc/docker/certs.d/yourdomain.com/

Agar sertifikat dapat digunakan docker, convert terlebih dahulu dari .crt ke .cert

openssl x509 -inform PEM -in yourdomain.com.crt -out yourdomain.com.cert

Ini dikarenakan docker menafsir .crt sebagai sertifikat CA sedangkan .cert sebagai sertifikat klien.

Restart service docker.

systemctl restart docker

Configure Internal TLS communication between Harbor Component
#

Secara default, komunikasi internal antar komponen harbor (harbor-jobservice, harbor-portal, harbor-core, harbor-db, harbor-log, registry, registryctl) menggunakan protokol HTTP yang mungkin tidak cukup aman pada lingkungan produksi sehingga penggunaan HTTPS adalah praktik terbaik yang direkomendasikan sejak Harbor v2.0.

Anda bisa membuat sertifikat untuk setiap komponen harbor secara otomatis menggunakan prepare tool.

docker run -v /data/tls:/hostfs goharbor/prepare:v2.0 gencert -p ./

Configure the Harbor YML File
#

Contoh konfigurasi harbor.yml. Pastikan lokasi sertifikat untuk https dan internal_tls telah sesuai.

hostname: yourdomain.com

http:
  port: 80

https:
  port: 443
  certificate: /data/cert/yourdomain.com.crt
  private_key: /data/cert/yourdomain.com.key

internal_tls:
  enabled: true
  dir: /data/tls
  strong_ssl_ciphers: false

harbor_admin_password: Harbor12345

database:
  password: root123
  max_idle_conns: 100
  max_open_conns: 900
  conn_max_lifetime: 5m
  conn_max_idle_time: 0

data_volume: /data

trivy:
  ignore_unfixed: false
  skip_update: false
  offline_scan: false
  security_check: vuln
  insecure: false

jobservice:
  max_job_workers: 10
  job_loggers:
    - STD_OUTPUT
    - FILE
  logger_sweeper_duration: 1

notification:
  webhook_job_max_retry: 3
  webhook_job_http_client_timeout: 3

log:
  level: info
  local:
    rotate_count: 50
    rotate_size: 200M
    location: /var/log/harbor

_version: 2.10.0

proxy:
  http_proxy:
  https_proxy:
  no_proxy:
  components:
    - core
    - jobservice
    - trivy

upload_purging:
  enabled: true
  age: 168h
  interval: 24h
  dryrun: false

cache:
  enabled: false
  expire_hours: 24

Untuk detail setiap parameter dapat dicek melalui Configure the Harbor YML File

Run the Installer Script
#

Setelah mengonfigurasi file harbor.yml, Anda dapat memulai instalasi harbor dengan menjalankan skrip install.sh

sudo ./install.sh --with-trivy

Jika instalasi berhasil, selanjutnya buka browser dan akses webUI harbor melalui http://yourdomain.com.

Lakukan test push image dari host docker ke harbor.

docker login yourdomain.com
docker push yourdomain.com/library/myrepo:mytag

Related

Setup Kubernetes Cluster dengan Kubeadm dan cri-dockerd
·6 mins
kubernetes docker kubernetes
Setting Memory dan CPU di Docker
·1 min
docker docker
Configure Network Aliases Docker
·2 mins
docker docker
Using IPvlan network in Docker
·5 mins
docker docker
Using Host Network in Docker
·1 min
docker docker
Using Overlay Network in Docker
·2 mins
docker docker