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