Kamis, 21 November 2024

HARBOR-registry opensource

 

Instalasi Harbor Open Source Registry

Berkenalan dengan Registry Container
Perkembangan teknologi kontainer berkembang pesat, karena fleksibilitas, kemudahan, dan kecepatan yang ditawarkan untuk deploy aplikasi, aplikasi dan semua depedencies yang dibutuhkan untuk menjalankannya dibungkus dalam suatu image yang kemudian image tersebut akan dijalankan dalam kontainer. Penyimpanan image dari container ini biasa disebut dengan registryRegistry dapat berupa publik ataupun privat, salah satu aplikasi untuk membangun registry privat adalah Harbor, dengan menggunakan Harbor kita bisa membangun sendiri registry untuk penyimpanan image dari kontainer.

Penjelasan tentang Harbor
Harbor adalah project yang lulus dari CNCF (Cloud Native Computing Foundation) untuk image container registry, Harbor dapat digunakan untuk menyimpan dan mendistribusikan image yang dijalankan Docker. Docker adalah platform open source yang dapat digunakan untuk menjalankan kontainer.

Perancangan Sistem
Untuk menginstalasi Harbor kali ini digunakan VM yang sebelumnya saya gunakan sebagai master dari klaster Kubernetes, dengan spesifikasi

VCPU: 2 core
Memory: 2GB
Storage: 15GB

Untuk software yang diperlukan untuk menjalankan Harbor adalah Docker dan Docker-compose. Docker digunakan untuk menjalankan kontainer yang akan digunakan oleh Harbor, Docker-compose adalah tools yang digunakan untuk mengelola aplikasi multi-container.

Kebutuhan Non-fungsional
Untuk saat ini instalasi normal sudah cukup untuk menjalankan aplikasi Harbor

Instalasi Harbor dan Pembahasan Error
Pertama unduh dan ekstrak file Harbor dari GitHub Harbor

wget https://github.com/goharbor/harbor/releases/download/v2.6.1/harbor-offline-installer-v2.6.1.tgz
tar xzvf harbor-offline-installer-v2.6.1.tgz

Kemudian pindah ke folder Harbor dan salin filtemplate harbor.yml.tmpl lalu edit menggunakan teks editor nano

cd harbor
cp harbor.yml.tmpl harbor.yml
nano harbor.yml

Karena tidak akan menggunakan konfigurasi HTTPS maka perlu memberikan comment pada baris yang berhubungan dengan konfigurasi HTTPS

# https related config
# https:
  # https port for harbor, default is 443
  # port: 443
  # The path of cert and key files for nginx
  # certificate: /your/certificate/path
  # private_key: /your/private/key/path

Kedua install Docker dan Docker-compose

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu focal stable"

apt-get install docker-ce

sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
chmod u+x /usr/local/bin/docker-compose

Terakhir jalankan file ./install.sh untuk menginstal Harbor

Ketika melakukan instalasi Harbor berdasarkan langkah di atas terdapat beberapa masalah yang muncul.

Pertama masalah hostname. Pada file harbor.yml terdapat parameter untuk memasukan hostname, ketika hostname belum diganti dari reg.mydomain.com maka ketika menjalankan file install.sh akan menemui error untuk mengganti hostname. Solusi ganti dengan IP atau hostname dari VM yang digunakan untuk instalasi Harbor.
Kedua masalah port, default port dari HTTP adalah 80 dan ketika Harbor sudah terinstall tidak bisa diakses. Sewaktu mengecek running container menggunakan command docker ps menunjukkan IP 0.0.0.0 port 80 di-forward menuju port 8080.

Hal ketika mencoba mengakses dari luar menggunakan IP dan port 80 tidak bisa diakses. Namun ketika diakses dari internal VM IP 0.0.0.0:80 halaman Harbor dapat diakses, hal ini berarti Harbor telah berhasil diinstal namun masih ada kesalahan konfigurasi namun saya tidak tahu mengapa ini bisa terjadi, kemungkinan ada konflik setingan port atau web-server. Alhasil saya mencoba untuk mengubah setting port HTTP di Harbor menggunakan port 8099.

Untuk mengganti konfigurasi port pada Harbor, pertama stop container yang berjalan kemudian update file yaml Harbor dan jalankan script ./prepare untuk mengupdate konfigurasi Harbor dan jalankan lagi container.

docker-compose down -v
nano harbor.yml
./prepare
docker-compose up -d

Hasilnya sekarang Harbor sudah berjalan pada port yang ditentukan dan bisa diakses dari luar server.

Yeay, instalasi Harbor berhasil dilakukan.

Testing Pull and Push Image

Registry untuk menyimpan image sudah berhasil diinstal sekarang kita akan mencoba untuk pull image nginx:alpine

ctr image pull docker.io/library/nginx:alpine

Kemudian push image ke registry

ctr image push --platform linux/amd64 --plain-http -u admin:Harbor12345 10.2.2.10:8099/library/nginx:alpine

Hasilnya image tidak berhasil di-push karena tidak ditemukan, ternyata setelah membaca beberapa referensi image perlu di-tag terlebih dahulu sebelum melakukan push image.

ctr image tag docker.io/library/nginx:alpine 10.2.2.10:8099/library/nginx:alpine

Image berhasil di-push ke registry

Kesimpulan

  1. Private registry menggunakan Harbor berhasil diinstal, diperlukan Docker untuk menginstal aplikasi Harbor karena aplikasi tersebut berjalan di atas kontainer.
  2. Kesalahan konfigurasi port pada kontainer menyebabkan Harbor tidak bisa diakses dari luar server, untuk mengubah konfigurasi Harbor, update file harbor.yml dan kontainer perlu di-stop dan di-start kembali.
  3. Sebelum melakukan push image ke registry diperlukan tag untuk menandai image

Saran
Untuk menambah keamanan pada Aplikasi Harbor instalasi aplikasi dapat dilakukan dengan mengaktifkan konfigurasi lebih lanjut dengan menggunakan protokol HTTPS.

Referensi:
https://computingforgeeks.com/install-harbor-registry-centos-debian-ubuntu/
https://www.dreamit.ltd/2022/02/02/push-pull-images-without-docker/
Harbor Install Guide (ticket internal ditulis oleh Rizki Muhammad – Btech)

Kamis, 14 November 2024

HARBOR-centos7 OK

 

Harbor 2.7.0 Installation on Centos 7 using docker and docker compose.

https://medium.com/@perezmark.tomcat/harbor-2-7-0-installation-on-centos-7-using-docker-and-docker-compose-a912067563dd
Mark Perez

4 min read

Harbor is an open source registry that secures artifacts with policies and role-based access control, ensures images are scanned and free from vulnerabilities, and signs images as trusted. Harbor, a CNCF Graduated project, delivers compliance, performance, and interoperability to help you consistently and securely manage artifacts across cloud native compute platforms like Kubernetes and Docker.

Installation Process

The standard Harbor installation process involves the following stages:

  1. Make sure that your target host meets the Harbor Installation PrerequisitesHarbor docs | Harbor Installation Prerequisites (goharbor.io)
  2. Download the Harbor Installer
  3. Configure HTTPS Access to Harbor
  4. Configure the Harbor YML File
  5. Run the Installer Script

Prerequisites:

Docker Engine — Version 17.06.0-ce+ or higher

Docker Compose — docker-compose (v1.18.0+) or docker compose v2 (docker-compose-plugin)

Openssl — Latest is preferred.

CPU Minimun: 2 CPU, Recommended 4 CPU

MEM Minimun: 4 GB, Recommended 8 GB

DISK Minimun: 40 GB, Recommended 160 GB

Step 1: Provision Centos 7 VM

For this tutorial I provision a Centos 7 VM on GCP

Step 2: Install Docker & wget

In you VM

sudo curl https://get.docker.com | sh
sudo yum install wget -y

[root@harbor ~]# docker version
Client: Docker Engine - Community
Version: 20.10.23
API version: 1.41
Go version: go1.18.10
Git commit: 7155243
Built: Thu Jan 19 17:36:21 2023
OS/Arch: linux/amd64
Context: default
Experimental: true

Server: Docker Engine - Community
Engine:
Version: 20.10.23
API version: 1.41 (minimum version 1.12)
Go version: go1.18.10
Git commit: 6051f14
Built: Thu Jan 19 17:34:26 2023
OS/Arch: linux/amd64
Experimental: false
containerd:
Version: 1.6.16
GitCommit: 31aa4358a36870b21a992d3ad2bef29e1d693bec
runc:
Version: 1.1.4
GitCommit: v1.1.4-0-g5fd4c4d
docker-init:
Version: 0.19.0
GitCommit: de40ad0

Step 3: Install Docker Compose

sudo curl -SL https://github.com/docker/compose/releases/download/v2.15.1/docker-compose-linux-x86_64 -o /usr/local/bin/docker-compose

sudo chmod +x /usr/local/bin/docker-compose
[root@harbor ~]# docker compose version
Docker Compose version v2.15.1

Step 4: Install OpenSSL for Certificates

sudo yum install openssl -y 

Step 5: Download Harbor installer.

Releases · goharbor/harbor (github.com)

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

[root@harbor ~]# ll
total 12
-rw-r--r--. 1 root root 10987 Dec 19 02:43 harbor-online-installer-v2.7.0.tgz

Step 6: Create Certificates using openssl for HTTPS.

For the hostname I’m using my.harbor.com

mkdir -p cert
cd cert

openssl genrsa -out ca.key 4096

openssl req -x509 -new -nodes -sha512 -days 3650 \
-subj "/C=PH/ST=NCR/L=Manila/O=Any/OU=Personal/CN=my.harbor.com" \
-key ca.key \
-out ca.crt


openssl genrsa -out my.harbor.com.key 4096


openssl req -sha512 -new \
-subj "/C=CN/PH=NCR/L=Manila/O=Any/OU=Personal/CN=my.harbor.com" \
-key my.harbor.com.key \
-out my.harbor.com.csr


cat > v3.ext <<-EOF
authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
extendedKeyUsage = serverAuth
subjectAltName = @alt_names
[alt_names]
DNS.1=my.harbor.com
EOF




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

openssl x509 -inform PEM -in my.harbor.com.crt -out my.harbor.com.cert

[root@harbor ~]# ls cert
ca.crt ca.key ca.srl my.harbor.com.cert my.harbor.com.crt my.harbor.com.csr my.harbor.com.key v3.ext

Copy .crt and .key in folder /data/cert

mkdir -p /data/cert/
cp my.harbor.com.crt /data/cert/
cp my.harbor.com.key /data/cert/

[root@harbor ~]# ls /data/cert/
my.harbor.com.crt my.harbor.com.key

Copy .cert .key ca.crt to docker certs

Note: make sure that the name of the folder is same for your hostname and port.

mkdir -p /etc/docker/certs.d/my.harbor.com:8443/
cp my.harbor.com.cert /etc/docker/certs.d/my.harbor.com:8443/
cp my.harbor.com.key /etc/docker/certs.d/my.harbor.com:8443/
cp ca.crt /etc/docker/certs.d/my.harbor.com:8443/

[root@harbor ~]# ls /etc/docker/certs.d/my.harbor.com:8443/
ca.crt my.harbor.com.cert my.harbor.com.key

Step 7: Install Harbor

tar -xvf harbor-online-installer-v2.7.0.tgz
cd harbor

Edit harbor.yml template and rename it to harbor.yml

You can choose the port for the http and https.

hostname: my.harbor.com

# https related config
https:
# https port for harbor, default is 443
port: 8443
# The path of cert and key files for nginx
certificate: /data/cert/my.harbor.com.crt
private_key: /data/cert/my.harbor.com.key

harbor_admin_password: admin

inside the harbor folder

./prepare

docker compose up -d

then check if containers are up

[root@harbor ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
19755a629759 goharbor/harbor-jobservice:v2.7.0 "/harbor/entrypoint.…" 10 minutes ago Up 10 minutes (healthy) harbor-jobservice
d5999a3d4a20 goharbor/nginx-photon:v2.7.0 "nginx -g 'daemon of…" 10 minutes ago Up 10 minutes (healthy) 0.0.0.0:8443->8443/tcp, :::8443->8443/tcp, 0.0.0.0:8081->8080/tcp, :::8081->8080/tcp nginx
f2b8d084368f goharbor/harbor-core:v2.7.0 "/harbor/entrypoint.…" 10 minutes ago Up 10 minutes (healthy) harbor-core
355020aa5c04 goharbor/redis-photon:v2.7.0 "redis-server /etc/r…" 10 minutes ago Up 10 minutes (healthy) redis
97eec786f2dd goharbor/harbor-registryctl:v2.7.0 "/home/harbor/start.…" 10 minutes ago Up 10 minutes (healthy) registryctl
a365effeed86 goharbor/harbor-db:v2.7.0 "/docker-entrypoint.…" 10 minutes ago Up 10 minutes (healthy) harbor-db
c14d58a8b0b9 goharbor/registry-photon:v2.7.0 "/home/harbor/entryp…" 10 minutes ago Up 10 minutes (healthy) registry
1742ab1d2cc6 goharbor/harbor-portal:v2.7.0 "nginx -g 'daemon of…" 10 minutes ago Up 10 minutes (healthy) harbor-portal
7830bc74811c goharbor/harbor-log:v2.7.0 "/bin/sh -c /usr/loc…" 10 minutes ago Up 10 minutes (healthy) 127.0.0.1:1514->10514/tcp harbor-log

In your browser.

You can download the certificate you generated to enable https.

login using the credentials you provided in the harbor.yml file

Conclusion

In this tutorial, we’ve installed harbor centos 7 using docker and docker compose and configure HTTPS access.

=====================================================

mkdir -p cert

cd cert


openssl genrsa -out ca.key 4096


openssl req -x509 -new -nodes -sha512 -days 3650 \

 -subj "/C=PH/ST=NCR/L=Manila/O=Any/OU=Personal/CN=harbor.yogya.com" \

 -key ca.key \

 -out ca.crt

 

 

openssl genrsa -out harbor.yogya.com.key 4096

 

 

openssl req -sha512 -new \

    -subj "/C=CN/PH=NCR/L=Manila/O=Any/OU=Personal/CN=harbor.yogya.com" \

    -key harbor.yogya.com.key \

    -out harbor.yogya.com.csr

 

 

cat > v3.ext <<-EOF

authorityKeyIdentifier=keyid,issuer

basicConstraints=CA:FALSE

keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment

extendedKeyUsage = serverAuth

subjectAltName = @alt_names

[alt_names]

DNS.1=harbor.yogya.com

EOF



 

openssl x509 -req -sha512 -days 3650 \

    -extfile v3.ext \

    -CA ca.crt -CAkey ca.key -CAcreateserial \

    -in harbor.yogya.com.csr \

    -out harbor.yogya.com.crt


openssl x509 -inform PEM -in harbor.yogya.com.crt -out harbor.yogya.com.cert