Thiết lập Project và Repository cho Multi-Cloud
Bước đầu tiên là chuẩn bị các không gian lưu trữ (Project) trên cả Registry nguồn (Source) và Registry đích (Destination) để Harbor có thể ánh xạ và đồng bộ artifact.
Tạo Project mới trên Registry nguồn (ví dụ: Harbor AWS) và Project tương ứng trên Registry đích (ví dụ: Harbor Azure). Đảm bảo cả hai Project đều có cùng tên để dễ quản lý, hoặc thiết lập quy tắc ánh xạ tên sau này.
Truy cập giao diện web Harbor trên Registry nguồn, vào menu Projects, chọn Create Project.
Điền thông tin như sau: Project name là secure-multi-cloud-app, chọn Public hoặc Private tùy chính sách, và bật Enable auto-creation of repositories.
Kết quả mong đợi: Project secure-multi-cloud-app được tạo thành công trên Registry nguồn. Bạn có thể truy cập vào project này và thấy danh sách repository trống hoặc tự động tạo khi push image.
Lặp lại thao tác trên Registry đích (Azure). Tạo Project có cùng tên secure-multi-cloud-app và cùng các thiết lập quyền truy cập (Public/Private) như Registry nguồn.
Verify kết quả: Mở terminal, login vào cả hai registry bằng docker và kiểm tra quyền truy cập.
docker login harbor-aws.example.com -u admin -p password
docker login harbor-azure.example.com -u admin -p password
docker run --rm alpine curl -s https://harbor-aws.example.com/api/v2.0/projects/secure-multi-cloud-app
docker run --rm alpine curl -s https://harbor-azure.example.com/api/v2.0/projects/secure-multi-cloud-app
Kết quả mong đợi: Cả hai lệnh curl trả về JSON chứa thông tin project, xác nhận project tồn tại và cấu hình tương thích trên cả hai registry.
Cấu hình Webhook để kích hoạt Replication tự động
Để đạt được sự đồng bộ gần như thời gian thực (Push-based), ta cần cấu hình Webhook trên Registry nguồn để gửi sự kiện Push đến API của Harbor đích, kích hoạt job replication ngay lập tức.
Trên Registry nguồn (AWS), vào menu Projects -> chọn secure-multi-cloud-app -> tab Webhooks -> nhấn Create Webhook.
Điền thông tin cấu hình Webhook:
- Webhook Name: replication-trigger-to-azure
- URL:
https://harbor-azure.example.com/api/v2.0/replications
- Events: Chọn Push (chỉ kích hoạt khi đẩy image mới)
- Secret: Tạo một chuỗi bí mật ngẫu nhiên (ví dụ:
sk-rep-2024-xyz) và lưu lại. Đây là key để xác thực payload.
Kết quả mong đợi: Webhook được tạo và trạng thái là Active. Khi bạn push image mới vào project này, Harbor nguồn sẽ gửi POST request đến Harbor đích.
Trên Registry đích (Azure), ta cần tạo một Replication Rule nhưng ở chế độ On-demand hoặc Event-based (tùy phiên bản Harbor). Để đơn giản hóa với webhook, ta sẽ cấu hình Replication Rule ở chế độ Event-based (nếu Harbor 2.8+) hoặc dùng cron job để polling webhook log. Tuy nhiên, cách chuẩn nhất trong Harbor hiện đại là cấu hình Replication Rule trực tiếp với trigger Event-based.
Vào Registry đích (Azure) -> menu Replications -> Create Replication.
Cấu hình Rule:
- Name: aws-to-azure-auto
- Source Registry: Chọn registry Harbor AWS (đã cấu hình trong Project Registry)
- Destination Registry: Chọn registry Harbor Azure (Local)
- Trigger: Chọn Event-based (sẽ lắng nghe sự kiện từ webhook)
- Filter: Project name =
secure-multi-cloud-app
Kết quả mong đợi: Rule replication được tạo. Khi webhook từ AWS gửi sự kiện Push, Harbor Azure sẽ tự động chạy job đồng bộ artifact.
Xây dựng chiến lược Replication: Pull-based, Push-based và Schedule
Harbor hỗ trợ 3 chiến lược đồng bộ: Event-based (khi có sự kiện), Schedule-based (theo lịch), và Manual (tự động). Để kiểm soát chặt chẽ, ta sẽ cấu hình chi tiết từng loại trong cùng một rule.
Cấu hình chiến lược Pull-based (Tự động kéo theo lịch)
Chiến lược này dùng để đảm bảo backup định kỳ hoặc đồng bộ các image cũ mà không có sự kiện push mới.
Vào menu Replications trên Registry đích -> chọn Rule vừa tạo -> nhấn Edit.
Trong phần Trigger, thêm chiến lược Schedule-based.
Cấu hình Cron Expression: 0 0 * * * (Chạy mỗi ngày lúc 00:00).
Kết quả mong đợi: Harbor sẽ tự động chạy job kéo (pull) toàn bộ artifact mới từ Registry nguồn về Registry đích mỗi ngày.
Cấu hình chiến lược Push-based (Tự động đẩy)
Chiến lược này yêu cầu Registry nguồn phải có cấu hình Replication Rule với Source là Registry đích (nếu muốn đẩy từ đích về nguồn) hoặc dùng Webhook như đã làm ở phần trên. Ở đây ta sẽ cấu hình trực tiếp trên Registry nguồn để đẩy (Push) về đích.
Trên Registry nguồn (AWS) -> menu Replications -> Create Replication.
Cấu hình Rule:
- Name: aws-push-to-azure
- Source Registry: Harbor AWS (Local)
- Destination Registry: Harbor Azure (Remote)
- Trigger: Chọn Event-based (sẽ tự động kích hoạt khi có sự kiện Push trong project)
- Policy: Chọn Manual hoặc Automatic (Automatic là mặc định cho Event-based)
Trong phần Filter (Scope), chọn Project và nhập tên secure-multi-cloud-app.
Kết quả mong đợi: Khi bạn thực hiện lệnh docker push vào Harbor AWS, Harbor sẽ tự động tạo job replication để đẩy image đó sang Harbor Azure ngay lập tức.
Cấu hình bảo mật đường truyền (HTTPS) giữa các Registry
Để đảm bảo tính bảo mật trong môi trường Multi-Cloud, mọi giao tiếp giữa các Registry phải được mã hóa qua HTTPS. Harbor mặc định dùng HTTPS, nhưng cần cấu hình chứng chỉ SSL hợp lệ (không phải self-signed) hoặc cấu hình tin cậy (trust) cho self-signed nếu dùng trong nội bộ VPC.
Cấu hình Certificate Authority (CA) cho Registry đích
Nếu Registry đích (Azure) dùng chứng chỉ tự ký (self-signed), Registry nguồn (AWS) sẽ từ chối kết nối. Ta cần thêm CA certificate vào thư mục trust của Harbor nguồn.
Tải file CA của Registry đích về (ví dụ: azure-ca.crt).
Có file CA vào container Harbor của Registry nguồn (thường là container harbor-core hoặc harbor-jobservice).
docker cp azure-ca.crt harbor-aws-core:/usr/local/share/ca-certificates/harbor-azure.crt
docker exec -it harbor-aws-core update-ca-certificates
Kết quả mong đợi: Registry nguồn có thể thiết lập kết nối HTTPS an toàn với Registry đích mà không bị lỗi certificate verify failed.
Cấu hình Credential (Tài khoản) cho Replication
Trước khi cấu hình Rule Replication, Harbor cần biết tài khoản để kết nối sang Registry khác. Đây là bước quan trọng để xác thực (Authentication) qua đường truyền HTTPS.
Vào menu Projects -> chọn System Settings (cần quyền Admin) -> tab Registry.
Nhấn Add Registry.
Điền thông tin kết nối:
- Name: azure-registry
- Protocol: HTTPS
- Address:
harbor-azure.example.com
- Project: (Không cần chọn nếu chưa tạo project, hoặc để trống)
- Credential: Nhập Username (admin) và Password của Harbor Azure.
- Verify Remote Cert: Chọn Yes (nếu dùng CA hợp lệ) hoặc No (nếu dùng self-signed và đã cấu hình trust ở bước trên, nhưng tốt nhất nên Yes).
Kết quả mong đợi: Registry Azure được thêm vào danh sách Remote Registry. Khi chạy test connection, Harbor sẽ báo Connected.
Kiểm tra tính toàn vẹn của Artifact sau khi đồng bộ
Sau khi replication hoàn tất, cần đảm bảo artifact ở Registry đích giống hệt artifact ở Registry nguồn, không bị thay đổi hoặc hư hỏng trong quá trình truyền tải.
Kiểm tra Digest (Hash) của Image
Mỗi container image có một digest (SHA256) duy nhất xác định tính toàn vẹn. Nếu digest giống nhau, artifact là nguyên vẹn.
Trên Registry nguồn, pull image và lấy digest:
docker pull harbor-aws.example.com/secure-multi-cloud-app/my-app:v1.0
docker inspect harbor-aws.example.com/secure-multi-cloud-app/my-app:v1.0 | grep Digest
Ghi lại giá trị Digest (ví dụ: sha256:abc123...).
Trên Registry đích, pull image và so sánh digest:
docker pull harbor-azure.example.com/secure-multi-cloud-app/my-app:v1.0
docker inspect harbor-azure.example.com/secure-multi-cloud-app/my-app:v1.0 | grep Digest
Kết quả mong đợi: Giá trị Digest của image trên Registry Azure phải giống hệt 100% với giá trị trên Registry AWS. Nếu khác, artifact đã bị thay đổi hoặc replication lỗi.
Chạy lệnh verify trực tiếp qua API
Sử dụng API của Harbor để kiểm tra trạng thái replication và số lượng artifact đã đồng bộ.
curl -u admin:password https://harbor-aws.example.com/api/v2.0/replications | jq '.[] | select(.name=="aws-push-to-azure") | .stats'
Kiểm tra số lượng artifact đã được đồng bộ thành công (total và success).
Kết quả mong đợi: Số lượng artifact success bằng số lượng artifact total trong job replication cuối cùng, xác nhận toàn bộ artifact đã được đồng bộ an toàn và đầy đủ.
Điều hướng series:
Mục lục: Series: Series: Xây dựng nền tảng Secure Multi-Cloud Container Registry với Harbor, Notary và Policy Engine để kiểm soát phân phối artifact an toàn
« Phần 2: Triển khai Harbor Registry với kiến trúc High-Availability trên Kubernetes
Phần 4: Tích hợp Notary để ký mã hóa và xác thực nguồn gốc container image »