Hướng dẫn cài Harbor Registry
Mình sẽ cài Harbor Registry và sử dụng domain name là harbor.prod.viettq.com. Ở đây mình sẽ dùng lại cert đã gen trước đây (đang sử dụng để cấu hình SSL Terminate ở Haproxy) để không phải gen lại nữa. Các bạn có thể tham khảo các tạo cert ở đây: https://viblo.asia/p/k8s-phan-7-huong-dan-tao-tich-xanh-cho-ung-dung-tren-k8s-dung-openssl-djeZ1EP8ZWz
Tạo thư mục cài đặt và thư mục chứa dữ liệu
Mình tạo thư mục lưu các cấu hình cài đặt tại /harbor/harbor_registry và tạo riêng thư mục lưu data của registry tại /harbor/harbor_data. Lưu ý mình sẽ dùng user root để cài.
sudo -s
mkdir -p /harbor/harbor_data
mkdir -p /harbor/harbor_registry
cd /harbor/harbor_registry
curl -s https://api.github.com/repos/goharbor/harbor/releases/latest | grep browser_download_url | cut -d '"' -f 4 | grep '\.tgz$' | wget -i -
tar xvzf harbor-offline-installer*.tgz
cd harbor
cp harbor.yml.tmpl harbor.yml
Chuẩn bị certificate cho registry(Không cần cải cert cũng được. Dùng IP nếu private)
Tạo thư mục chứa Cert:
mkdir -p /harbor/harbor_registry/certs
cd /harbor/harbor_registry/certs
vi harbor.prod.viettq.com.key
vi harbor.prod.viettq.com.crt
2 file * .key và *.crt bên trên mình lấy từ file tạo theo hướng dẫn ở phần 7 nhé! Link tham khảo: https://viblo.asia/p/k8s-phan-7-huong-dan-tao-tich-xanh-cho-ung-dung-tren-k8s-dung-openssl-djeZ1EP8ZWz
Kết quả:
[sysadmin@vtq-cicd certs]$ ls -lrt
total 8
-rw-rw-r-- 1 sysadmin sysadmin 1679 Apr 23 06:10 harbor.prod.viettq.com.key
-rw-rw-r-- 1 sysadmin sysadmin 1354 Apr 23 06:10 harbor.prod.viettq.com.crt
Cấu hình file cài đặt harbor.yaml
Vào lại thư mục cài đặt để sửa file cài đặt từ template của Harbor:
cd /harbor/harbor_registry
cd harbor
cp harbor.yaml.example harbor.yaml
vi harbor.yaml
Các bạn cần update một số tham số như sau:
hostname: harbor.prod.viettq.com
certificate: /harbor/harbor_registry/certs/harbor.prod.viettq.com.crt
private_key: /harbor/harbor_registry/certs/harbor.prod.viettq.com.key
harbor_admin_password: Harbor_123
password: root_123
data_volume: /harbor/harbor_data
Đảm bảo User root có thể chạy dc lệnh docker-compose. Do mình cài docker-compose bằng user sysadmin nên user root không thấy được docker-compose trong path của nó thì phải xử lý thêm như sau:
[sysadmin@vtq-cicd harbor]$ sudo -s
[root@vtq-cicd harbor]# which docker-compose
/usr/bin/which: no docker-compose in (/sbin:/bin:/usr/sbin:/usr/bin)
[root@vtq-cicd harbor]# exit
[sysadmin@vtq-cicd harbor]$ which docker-compose
/usr/local/bin/docker-compose
[sysadmin@vtq-cicd harbor]$ sudo -s
[root@vtq-cicd harbor]# cp /usr/local/bin/docker-compose /usr/bin/
Cài đặt harbor registry
Sau khi cấu hình xong xuôi thì thực hiện cài đặt bằng 1 lệnh:
cd /harbor/harbor_registry/harbor
./install.sh
Kết quả khi chạy thành công sẽ có các container như sau:
[root@vtq-cicd harbor]# docker-compose ps
Name Command State Ports
------------------------------------------------------------------------------------------------------------------------------------------------
harbor-core /harbor/entrypoint.sh Up (healthy)
harbor-db /docker-entrypoint.sh 96 13 Up (healthy)
harbor-jobservice /harbor/entrypoint.sh Up (healthy)
harbor-log /bin/sh -c /usr/local/bin/ ... Up (healthy) 127.0.0.1:1514->10514/tcp
harbor-portal nginx -g daemon off; Up (healthy)
nginx nginx -g daemon off; Up (healthy) 0.0.0.0:80->8080/tcp,:::80->8080/tcp, 0.0.0.0:443->8443/tcp,:::443->8443/tcp
redis redis-server /etc/redis.conf Up (healthy)
registry /home/harbor/entrypoint.sh Up (healthy)
registryctl /home/harbor/start.sh Up (healthy)
Kết nối Web-UI của harbor
Bạn khai host trên client như sau:
192.168.10.20 harbor.prod.viettq.com
Sau đó vào địa chỉ https://harbor.prod.viettq.com. Sở dĩ mình khai host và kết nối theo domain là để sử dụng được cấu hình SSL:
Các bạn đăng nhập bằng user admin, pass như đã set ở file cấu hình bên trên.
Cấu hình project và phân quyền user
Vào mục Users --> NEW USER rồi nhập thông tin để tạo user. Mình tạo user/pass là demo/Demo_123 Vào Projects để tạo project và gán quyền cho user vừa tạo:
Gán quyền cho user demovào project này: Vào project demo, chọn Members --> +USER:
Cấu hình kết nối cho client (để pull/push image)
Khai báo host cho client:
192.168.10.20 harbor.prod.viettq.com
Tạo thư mục chứa cert trên client:
sudo -s
mkdir -p /etc/docker/certs.d/harbor.prod.viettq.com/
cd /etc/docker/certs.d/harbor.prod.viettq.com/
vi harbor.prod.viettq.com.crt
Trong đó nội dung file harbor.prod.viettq.com.crt chính là file mình tạo để cài đặt harbor như bước trên. Tag image cho registry này và push thử lên. Mình sẽ pull image hello-world từ github về tag và push lên Harbor Registry này:
[sysadmin@vtq-cicd harbor]$ docker pull hello-world
Using default tag: latest
latest: Pulling from library/hello-world
Digest: sha256:10d7d58d5ebd2a652f4d93fdd86da8f265f5318c6a73cc5b6a9798ff6d2b2e67
Status: Image is up to date for hello-world:latest
docker.io/library/hello-world:latest
[sysadmin@vtq-cicd harbor]$ docker tag hello-world:latest harbor.prod.viettq.com/demo/hello-world:latest
[sysadmin@vtq-cicd harbor]$ docker login harbor.prod.viettq.com
Username: demo
Password:
WARNING! Your password will be stored unencrypted in /home/sysadmin/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store
Login Succeeded
[sysadmin@vtq-cicd harbor]$ docker push harbor.prod.viettq.com/demo/hello-world:latest
The push refers to repository [harbor.prod.viettq.com/demo/hello-world]
e07ee1baac5f: Pushed
latest: digest: sha256:f54a58bc1aac5ea1a25d796ae155dc228b3f0e11d046ae276b39c4bf2f13d8c4 size: 525
Như vậy là đã push được docker image lên harbor registry rồi. Lưu ý trước khi push thì các bạn phải thực hiện lệnh docker login và nhập thông tin user của harbor như mình đã tạo trước đó nhé!
Ngoài ra còn có Private Docker Registry nhưng cai này cài đặt đơn giản, gọn nhẹ. Và đi kèm với đó thì nó cũng có rất ít tính năng, không hỗ trợ phân quyền.. Nói chung nó làm đúng nhiệm vụ quản lý Docker Image thôi, đủ để bạn có thể dùng để pull/push image.
Cảm ơn bạn đã trả lời.