Harbor를 프로덕션 준비하기: 배포를 위한 필수 고려사항
Source: VMware Blog
Harbor는 정책 및 역할 기반 접근 제어(RBAC)를 통해 아티팩트를 보호하고, 이미지에 대한 취약점 스캔 및 신뢰할 수 있는 서명을 보장하는 오픈‑소스 컨테이너 레지스트리입니다. Harbor와 이를 가상 머신(VM) 및 쿠버네티스(K8s)에 배포하는 방법에 대한 자세한 내용은 시리즈의 1 및 2 파트를 참고하십시오.

Harbor 배포 자체는 간단하지만, 프로덕션 환경에 적합하도록 만들려면 여러 핵심 요소를 신중히 고려해야 합니다. 이 가이드는 Helm을 통해 쿠버네티스에 배포된 최신 Harbor(v2.14)를 중심으로 하며, 해당 배포에 대한 권장 사항을 제공합니다.
High Availability (HA) and Scalability
프로덕션 환경에서는 단일 장애 지점을 허용할 수 없습니다. Harbor의 고가용성을 구현하려면 다음 사항을 고려하십시오.
Deploy with an Ingress
Harbor 인스턴스 앞에 Ingress(예: Traefik) 타입의 쿠버네티스 Service를 설정해 트래픽을 분산하고 통합 진입점을 제공합니다. 인증서 관리는 cert‑manager를 사용합니다.
expose:
type: ingress # options: loadBalancer, ingress, clusterIP, nodePort
Run Multiple Harbor Instances
핵심 Harbor 컴포넌트(core, jobservice, portal, registry, trivy)의 복제본 수를 늘려冗余성을 확보합니다.
core:
replicas: 3
jobservice:
replicas: 3
portal:
replicas: 3
registry:
replicas: 3
trivy:
replicas: 3
exporter:
replicas: 3 # 선택 사항, 모니터링 가용성을 위해
nginx:
replicas: 3 # Ingress 사용 시 Ingress 가용성 향상
External PostgreSQL (Database HA)
Harbor에 내장된 PostgreSQL은 단일 노드 배포이며 프로덕션에서는 권장되지 않습니다. Patroni, CloudNativePG와 같은 고가용성 PostgreSQL 클러스터를 직접 배포하거나 관리형 서비스를 이용한 뒤, Harbor를 외부 DB에 연결합니다.
database:
type: external
external:
host: "192.168.0.1"
port: "5432"
username: "user"
password: "password"
coreDatabase: "registry"
existingSecret: "" # secret을 사용할 경우 키는 "password"여야 함
sslmode: "verify-full" # options: disable, require, verify-ca, verify-full
External Redis (Redis HA)
고가용성 Redis 클러스터(Redis Sentinel 또는 Redis Cluster) 또는 관리형 Redis 서비스를 배포하고, Harbor가 이를 사용하도록 설정합니다.
redis:
type: external
external:
addr: "192.168.0.2:6397"
sentinelMasterSet: ""
tlsOptions:
enable: true
username: ""
password: ""
Security Best Practices
보안은 모든 프로덕션 시스템, 특히 컨테이너 레지스트리에서 최우선 과제입니다.
Enable TLS/SSL
모든 Harbor 컴포넌트에 TLS/SSL을 반드시 활성화합니다. 자동 인증서 발급을 위해 cert‑manager와 연동합니다.
expose:
tls:
enabled: true
certSource: auto # cert-manager 사용 시 manual로 변경
auto:
commonName: ""
internalTLS:
enabled: true
strong_ssl_ciphers: true
certSource: "auto"
core:
secretName: ""
jobService:
secretName: ""
registry:
secretName: ""
portal:
secretName: ""
trivy:
secretName: ""
Configure RBAC and Identity Providers
쿠버네티스 RBAC를 활용해 Harbor 리소스 접근을 관리합니다. 배포 후 LDAP 또는 OIDC와 같은 엔터프라이즈 아이덴티티 제공자를 Harbor와 연동합니다. 공식 가이드를 참고하십시오.

Enable Vulnerability Scanning
Harbor는 기본적으로 Trivy를 사용합니다. 스캔 기능을 반드시 활성화합니다.
trivy:
enabled: true

Activate Content Trust
Harbor는 Cosign 및 Notation과 같은 최신 OCI 아티팩트 서명 메커니즘을 지원합니다. 프로젝트 수준에서 콘텐츠 트러스트를 UI 또는 Harbor API를 통해 강제 적용해 검증된 서명 이미지만 허용하도록 합니다.

Keep Harbor Updated
Harbor Helm 차트와 기반 쿠버네티스 컴포넌트를 정기적으로 업그레이드해 최신 보안 패치와 버그 수정 사항을 적용합니다.
helm repo update
helm upgrade harbor harbor/harbor -f values.yaml
Storage Considerations
효율적이고 안정적인 스토리지는 Harbor의 성능과 안정성에 필수적입니다.
- 여기에서는 공유 스토리지 백엔드, 성능 튜닝, 백업 전략 등 추가적인 스토리지 권장 사항을 상세히 다룰 예정입니다.