Cài đặt và quản trị Harbor Registry trên Linux

Harbor là một registry mã nguồn mở dành riêng cho Docker và OCI, được thiết kế để triển khai nội bộ với các tính năng bảo mật nâng cao như kiểm soát truy cập theo vai trò (RBAC), quét lỗ hổng bảo mật, sao lưu – phục hồi dữ liệu và hỗ trợ giao thức HTTPS bắt buộc.

Yêu cầu hệ thống tối thiểu

  • CPU: 4 lõi
  • Bộ nhớ RAM: 8 GB
  • Dung lượng đĩa: ≥ 160 GB (ưu tiên SSD cho hiệu năng I/O)
  • Hệ điều hành: RHEL/CentOS 9 hoặc tương đương

Cài đặt phụ thuộc nền tảng

Trước khi triển khai Harbor, cần cài đặt Docker Engine và công cụ quản lý container đa dịch vụ:

sudo tee /etc/yum.repos.d/docker-ce.repo << 'EOF'
[docker-ce-stable]
name=Docker CE Stable - $basearch
baseurl=https://mirrors.aliyun.com/docker-ce/linux/rhel/9/x86_64/stable
enabled=1
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/docker-ce/linux/rhel/gpg
EOF

sudo dnf clean all
sudo dnf install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin
sudo systemctl enable --now docker
docker --version && docker-compose version

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

Sử dụng phiên bản offline để đảm bảo tính ổn định và không phụ thuộc vào kết nối mạng trong quá trình cài đặt:

cd /opt
curl -LO https://github.com/goharbor/harbor/releases/download/v2.12.1/harbor-offline-installer-v2.12.1.tgz
tar -xzf harbor-offline-installer-v2.12.1.tgz

Cấu hình HTTPS cho Harbor

Tạo thư mục lưu chứng chỉ SSL và sao chép cặp khóa/cert vào đúng vị trí:

sudo mkdir -p /data/harbor/cert
sudo cp /tmp/server.crt /tmp/server.key /data/harbor/cert/

Chỉnh sửa tập tin cấu hình chính:

cd /opt/harbor
cp harbor.yml.tmpl harbor.yml

Mở harbor.yml bằng trình soạn thảo và cập nhật các giá trị sau:

hostname: reg.example.local
https:
  port: 443
  certificate: /data/harbor/cert/server.crt
  private_key: /data/harbor/cert/server.key

Kích hoạt giám sát Prometheus (tùy chọn)

Nếu cần tích hợp với hệ thống giám sát hiện có, bật endpoint metrics:

metric:
  enabled: true
  port: 9090
  path: /metrics

Khởi tạo môi trường và triển khai

Chạy script chuẩn bị cấu hình và khởi động toàn bộ stack:

sudo ./prepare --with-trivy
sudo ./install.sh --with-trivy

Kiểm tra hoạt động

  • Truy cập giao diện web tại: https://reg.example.local
  • Đăng nhập CLI bằng tài khoản mặc định (admin/Harbor12345)
docker login reg.example.local

Thử nghiệm đẩy – kéo ảnh

  1. Tạo dự án demo-app trong giao diện Harbor (đặt chế độ private)
  2. Kéo ảnh mẫu từ Docker Hub:
    docker pull alpine:latest
  3. Gán nhãn mới theo định dạng registry:
    docker tag alpine:latest reg.example.local/demo-app/alpine:3.20
  4. Đẩy ảnh lên registry nội bộ:
    docker push reg.example.local/demo-app/alpine:3.20
  5. Xác minh khả năng kéo ảnh từ máy khác:
    docker pull reg.example.local/demo-app/alpine:3.20

Cập nhật cấu hình sau triển khai

Khi cần thay đổi thông số như tên miền, cổng hoặc chính sách bảo mật:

cd /opt/harbor
sudo docker compose down -v
# Chỉnh sửa harbor.yml
sudo ./prepare --with-trivy
sudo docker compose up -d

Nâng cấp phiên bản Harbor

Quy trình nâng cấp yêu cầu sao lưu dữ liệu trước khi tiến hành:

# Dừng dịch vụ
cd /opt/harbor && sudo docker compose down

# Sao lưu cấu hình và dữ liệu
sudo tar -zcf /backup/harbor-config-$(date +%Y%m%d).tar.gz /opt/harbor/harbor.yml
sudo tar -zcf /backup/harbor-data-$(date +%Y%m%d).tar.gz /data/database /data/registry

# Tải phiên bản mới và chạy migrator
wget https://github.com/goharbor/harbor/releases/download/v2.12.2/harbor-offline-installer-v2.12.2.tgz
tar -xzf harbor-offline-installer-v2.12.2.tgz

# Cập nhật cấu hình tương thích với phiên bản mới
docker run -it --rm \
  -v /opt/harbor/harbor.yml:/harbor-migration/harbor-cfg/harbor.yml \
  goharbor/harbor-migrator:v2.12.2 --cfg up

# Triển khai lại
cd /opt/harbor && sudo ./install.sh --with-trivy

Tích hợp với Kubernetes

Để cluster Kubernetes có thể kéo ảnh từ Harbor một cách an toàn, cần tạo Secret chứa thông tin xác thực:

kubectl create secret docker-registry harbor-cred \
  --namespace default \
  --docker-server=reg.example.local \
  --docker-username=admin \
  --docker-password=Harbor12345 \
  --docker-email=admin@example.local

Sau đó liên kết Secret với ServiceAccount:

kubectl patch serviceaccount default \
  -p "{\"imagePullSecrets\": [{\"name\": \"harbor-cred\"}]}"

Với cấu hình này, mọi Pod trong namespace default sẽ tự động sử dụng thông tin đăng nhập đã lưu khi kéo ảnh từ Harbor.

Lưu ý vận hành

  • Luôn duy trì bản sao lưu định kỳ của thư mục /data và tập tin harbor.yml
  • Không chỉnh sửa trực tiếp cấu hình qua giao diện web — chỉ dùng file YAML làm nguồn gốc
  • Các phiên bản Harbor từ v2.0 trở đi yêu cầu docker-compose phiên bản ≥ v2.0 hoặc plugin tích hợp sẵn
  • Chức năng quét lỗ hổng (Trivy) cần thêm tài nguyên CPU và bộ nhớ — nên phân bổ ít nhất 2 GB RAM riêng cho container scanner

Thẻ: harbor container-registry docker Kubernetes ssl-configuration

Đăng vào ngày 28 tháng 8 lúc 08:58