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