Cài đặt và cấu hình kho lưu trữ container Harbor trên Ubuntu 22.04

Harbor là một nền tảng quản lý registry container mã nguồn mở, được thiết kế để triển khai an toàn trong môi trường doanh nghiệp. Bài viết này hướng dẫn cài đặt Harbor phiên bản 2.7.0 trên hệ điều hành Ubuntu 22.04 với cấu hình HTTPS sử dụng chứng chỉ tự ký, tích hợp Docker Compose và quản lý dịch vụ qua systemd.

1. Chuẩn bị môi trường

  • Hệ điều hành: Ubuntu 22.04 LTS
  • Docker Engine: 20.10.17 hoặc mới hơn
  • Docker Compose: v2.16.0 (dạng binary)
  • Harbor: bản offline v2.7.0

2. Cài đặt Docker Compose

Truy cập trực tiếp vào máy chủ và thực thi lệnh sau để tải và cài đặt:

sudo curl -L "https://get.daocloud.io/docker/compose/releases/download/v2.16.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
docker-compose --version

3. Tải và giải nén Harbor

wget https://github.com/goharbor/harbor/releases/download/v2.7.0/harbor-offline-installer-v2.7.0.tgz
sudo mkdir -p /opt/harbor
tar -xzf harbor-offline-installer-v2.7.0.tgz -C /opt/harbor
cd /opt/harbor
cp harbor.yml.tmpl harbor.yml

4. Cấu hình cơ bản trong harbor.yml

Mở tập tin harbor.yml bằng trình soạn thảo (ví dụ: nano hoặc vim) và chỉnh sửa các mục sau:

hostname: registry.internal.local

http:
  port: 8080

https:
  port: 8443
  certificate: /opt/harbor/certs/registry.internal.local.crt
  private_key: /opt/harbor/certs/registry.internal.local.key

harbor_admin_password: Secur3P@ss2024

database:
  password: DbP@ss2024

data_volume: /opt/harbor/data

Lưu ý: Nếu không dùng HTTPS, hãy gỡ bỏ hoặc comment toàn bộ khối https và đảm bảo khối http được bật.

5. Tạo chứng chỉ TLS tự ký

Tạo thư mục lưu chứng chỉ:

sudo mkdir -p /opt/harbor/certs
cd /opt/harbor/certs

Tạo khóa CA và chứng chỉ gốc:

openssl genrsa -out ca.key 4096
openssl req -x509 -new -nodes -sha512 -days 3650 \
  -subj "/C=VN/ST=HCM/L=HCM/O=Internal/CN=registry.internal.local" \
  -key ca.key -out ca.crt

Tạo khóa và CSR cho máy chủ Harbor:

openssl genrsa -out registry.internal.local.key 4096
openssl req -sha512 -new \
  -subj "/C=VN/ST=HCM/L=HCM/O=Internal/CN=registry.internal.local" \
  -key registry.internal.local.key \
  -out registry.internal.local.csr

Tạo file mở rộng v3 (v3.ext) để hỗ trợ SAN (Subject Alternative Name):

cat > v3.ext <<-EOF
authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
extendedKeyUsage = serverAuth
subjectAltName = @alt_names
[alt_names]
DNS.1=registry.internal.local
DNS.2=localhost
IP.1=127.0.0.1
EOF

Ký chứng chỉ máy chủ bằng CA:

openssl x509 -req -sha512 -days 3650 \
  -extfile v3.ext \
  -CA ca.crt -CAkey ca.key -CAcreateserial \
  -in registry.internal.local.csr \
  -out registry.internal.local.crt

6. Triển khai Harbor

Chạy script cài đặt từ thư mục /opt/harbor:

sudo ./install.sh --with-notary --with-clair --with-chartmuseum

(Các tùy chọn như --with-notary có thể lược bỏ nếu không cần chức năng tương ứng.)

7. Thiết lập xác thực cho Docker client

Để Docker client tin tưởng registry HTTPS, sao chép chứng chỉ vào thư mục tin cậy:

sudo mkdir -p /etc/docker/certs.d/registry.internal.local:8443
sudo cp registry.internal.local.crt /etc/docker/certs.d/registry.internal.local:8443/ca.crt
sudo systemctl restart docker

Nếu muốn truy cập qua HTTP hoặc test nhanh, thêm vào /etc/docker/daemon.json:

{
  "insecure-registries": ["registry.internal.local:8080"]
}

8. Quản lý dịch vụ Harbor bằng systemd

Tạo unit file tại /etc/systemd/system/harbor.service:

[Unit]
Description=Harbor Container Registry
After=docker.service
Requires=docker.service

[Service]
Type=exec
Restart=on-failure
RestartSec=10
ExecStart=/usr/local/bin/docker-compose -f /opt/harbor/docker-compose.yml up
ExecStop=/usr/local/bin/docker-compose -f /opt/harbor/docker-compose.yml down

[Install]
WantedBy=multi-user.target

Kích hoạt và khởi chạy:

sudo systemctl daemon-reload
sudo systemctl enable harbor.service
sudo systemctl start harbor.service
sudo systemctl status harbor.service

9. Sử dụng Harbor để đẩy và kéo image

docker login registry.internal.local:8443 -u admin -p Secur3P@ss2024
docker pull nginx:alpine
docker tag nginx:alpine registry.internal.local:8443/library/nginx:alpine
docker push registry.internal.local:8443/library/nginx:alpine
docker pull registry.internal.local:8443/library/nginx:alpine

10. Cập nhật cấu hình và nâng cấp

Khi thay đổi harbor.yml, thực hiện tuần tự:

sudo docker-compose -f /opt/harbor/docker-compose.yml down
sudo ./prepare
sudo docker-compose -f /opt/harbor/docker-compose.yml up -d

11. Tích hợp với Helm (Chart Repository)

Nếu đã bật ChartMuseum trong Harbor, thêm repository Helm như sau:

helm repo add --ca-file /opt/harbor/certs/ca.crt \
  --cert-file /opt/harbor/certs/registry.internal.local.crt \
  --key-file /opt/harbor/certs/registry.internal.local.key \
  --username=admin --password=Secur3P@ss2024 \
  internal-harbor https://registry.internal.local:8443/chartrepo/library

Cài plugin đẩy chart:

helm plugin install https://github.com/chartmuseum/helm-push

Đẩy chart mẫu:

helm create mychart
helm cm-push ./mychart internal-harbor \
  --ca-file /opt/harbor/certs/ca.crt \
  --cert-file /opt/harbor/certs/registry.internal.local.crt \
  --key-file /opt/harbor/certs/registry.internal.local.key \
  --username=admin --password=Secur3P@ss2024

Thẻ: harbor docker-compose ubuntu22.04 https-certificate Helm

Đăng vào ngày 6 tháng 7 lúc 04:43