Private Registry Nexus vs Harobr

진웅·2025년 6월 24일

DEVOPS

목록 보기
1/3

🐳 Harbor vs Nexus Repository: 상세 비교 분석

🏆 Harbor가 Nexus보다 우수한 영역

1. 🔐 보안 및 취약점 스캐닝

Harbor 🛡️

보안 기능:
  - Trivy 통합 취약점 스캐닝 (기본 내장)
  - Clair 스캐너 지원
  - 정책 기반 이미지 배포 차단
  - CVE 데이터베이스 자동 업데이트
  - 취약점 심각도별 분류 및 알림
  - 스캔 결과 웹 UI에서 시각화
  - 자동 스캔 스케줄링
  - 화이트리스트 기반 취약점 예외 처리

Nexus ⚠️

보안 기능:
  - 기본 취약점 스캐닝 없음
  - 서드파티 도구 연동 필요 (추가 비용)
  - 제한적인 정책 엔진
  - 수동적인 보안 검사 프로세스

2. 🎨 사용자 경험 (UX/UI)

Harbor 🌟

UI/UX 장점:
  - 현대적이고 직관적인 웹 UI
  - 컨테이너 레지스트리 전용 최적화
  - 이미지 레이어 시각화
  - Dockerfile 분석 결과 표시
  - 실시간 스캔 진행 상황 표시
  - 모바일 친화적 반응형 디자인
  - 다크모드 지원
  - 빠른 검색 및 필터링

Nexus 📊

UI/UX 특징:
  - 범용 아티팩트 관리 중심 UI
  - 컨테이너 기능은 부가적
  - 복잡한 설정 메뉴 구조
  - 상대적으로 느린 반응 속도

3. 🚀 Kubernetes 네이티브 통합

Harbor 🎯

K8s 통합:
  - Helm Chart 공식 지원
  - Kubernetes RBAC 네이티브 연동
  - Service Mesh 지원 (Istio)
  - OCI 아티팩트 지원 (Helm Chart, CNAB)
  - Kubernetes Admission Controller
  - Harbor Operator 제공
  - Multi-cluster 복제 지원

Nexus 🔧

K8s 통합:
  - 기본적인 Docker Registry 기능
  - 제한적인 Kubernetes 통합
  - 복잡한 설정 필요
  - 별도 도구 의존성 높음

4. 🔄 복제 및 고가용성

Harbor 🌐

복제 기능:
  - 멀티 마스터 복제 지원
  - Cross-region 복제
  - 선택적 복제 (프로젝트/태그별)
  - 복제 상태 실시간 모니터링
  - 자동 failover 지원
  - 대역폭 제한 설정
  - 암호화된 복제 채널

Nexus 📡

복제 기능:
  - 제한적인 복제 기능
  - 복잡한 설정 과정
  - 수동 모니터링 필요
  - Pro 버전에서만 고급 기능 제공

5. 💰 비용 효율성

Harbor 💝

비용 구조:
  - 완전 무료 오픈소스
  - 엔터프라이즈 기능 기본 포함
  - 커뮤니티 지원 활발
  - CNCF 프로젝트로 지속성 보장
  - 벤더 락인 없음

Nexus 💳

비용 구조:
  - OSS 버전 기능 제한
  - Pro 버전 라이선스 비용
  - 고급 기능 유료화
  - 상업적 지원 의존도 높음

📊 기능별 상세 비교

🔍 취약점 스캐닝 비교

기능HarborNexus OSSNexus Pro
내장 스캐너✅ Trivy/Clair❌ 없음🔶 제한적
자동 스캔✅ 스케줄링❌ 없음✅ 있음
정책 기반 차단✅ 강력함❌ 없음✅ 있음
CVE 상세 정보✅ 풍부함❌ 없음🔶 기본적
수정 가이드✅ 제공❌ 없음🔶 제한적

🏗️ 아키텍처 비교

Harbor 아키텍처

graph TB
    A[Harbor Portal] --> B[Harbor Core]
    B --> C[Registry]
    B --> D[Trivy Scanner]
    B --> E[Chart Museum]
    B --> F[Job Service]
    F --> G[Replication]
    F --> H[Garbage Collection]
    I[PostgreSQL] --> B
    J[Redis] --> B

Harbor 배포 예시

# harbor-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: harbor-core
spec:
  replicas: 2
  selector:
    matchLabels:
      app: harbor-core
  template:
    metadata:
      labels:
        app: harbor-core
    spec:
      containers:
      - name: core
        image: goharbor/harbor-core:v2.9.0
        env:
        - name: CORE_SECRET
          valueFrom:
            secretKeyRef:
              name: harbor-secret
              key: secret
        ports:
        - containerPort: 8080
        volumeMounts:
        - name: config
          mountPath: /etc/core/app.conf
        livenessProbe:
          httpGet:
            path: /api/v2.0/ping
            port: 8080
          initialDelaySeconds: 300
        readinessProbe:
          httpGet:
            path: /api/v2.0/ping
            port: 8080
          initialDelaySeconds: 20
---
apiVersion: v1
kind: Service
metadata:
  name: harbor-core
spec:
  selector:
    app: harbor-core
  ports:
  - port: 80
    targetPort: 8080

🛡️ 보안 정책 설정 예시

Harbor 보안 정책

# harbor-security-policy.yaml
apiVersion: v1
kind: ConfigMap
metadata:
  name: harbor-security-policy
data:
  policy.yaml: |
    policies:
      - name: "vulnerability-policy"
        description: "Block images with high severity vulnerabilities"
        rules:
          - rule_type: "vulnerability"
            parameters:
              severity: "high"
            action: "block"
      
      - name: "content-trust"
        description: "Require signed images"
        rules:
          - rule_type: "signature"
            parameters:
              required: true
            action: "block"
      
      - name: "scan-policy"
        description: "Auto scan on push"
        rules:
          - rule_type: "scan_on_push"
            parameters:
              enabled: true

📈 성능 비교

메트릭HarborNexus
이미지 푸시 속도🟢 빠름🟡 보통
이미지 풀 속도🟢 빠름🟡 보통
웹 UI 응답속도🟢 빠름🔴 느림
메모리 사용량🟢 최적화🟡 높음
스토리지 효율성🟢 우수🟡 보통

🔗 생태계 통합

Harbor 통합 생태계

주요 통합:
  CI/CD:
    - Jenkins Harbor Plugin
    - GitLab CI/CD 네이티브 지원
    - GitHub Actions
    - Tekton Pipelines
  
  보안 도구:
    - Trivy (기본 내장)
    - Clair
    - Anchore (연동 가능)
    - Falco 런타임 보안
  
  모니터링:
    - Prometheus 메트릭 내장
    - Grafana 대시보드
    - ELK Stack 로그 연동
  
  클라우드:
    - AWS ECR 복제
    - Azure ACR 복제
    - GCR 복제
    - 멀티 클라우드 지원

🚀 실제 사용 시나리오

시나리오 1: DevSecOps 파이프라인

Harbor 구현

# GitLab CI/CD with Harbor
stages:
  - build
  - security-scan
  - deploy

variables:
  HARBOR_REGISTRY: "harbor.company.com"
  PROJECT_NAME: "production"

build:
  stage: build
  script:
    - docker build -t $HARBOR_REGISTRY/$PROJECT_NAME/$CI_PROJECT_NAME:$CI_COMMIT_SHA .
    - docker push $HARBOR_REGISTRY/$PROJECT_NAME/$CI_PROJECT_NAME:$CI_COMMIT_SHA

security-scan:
  stage: security-scan
  script:
    - |
      # Harbor API로 스캔 트리거
      curl -X POST \
        -H "Authorization: Basic $(echo -n admin:password | base64)" \
        "$HARBOR_REGISTRY/api/v2.0/projects/$PROJECT_NAME/repositories/$CI_PROJECT_NAME/artifacts/$CI_COMMIT_SHA/scan"
    
    - |
      # 스캔 결과 확인
      SCAN_STATUS=""
      while [ "$SCAN_STATUS" != "Success" ]; do
        sleep 10
        SCAN_STATUS=$(curl -s \
          -H "Authorization: Basic $(echo -n admin:password | base64)" \
          "$HARBOR_REGISTRY/api/v2.0/projects/$PROJECT_NAME/repositories/$CI_PROJECT_NAME/artifacts/$CI_COMMIT_SHA" \
          | jq -r '.scan_overview."application/vnd.scanner.adapter.vuln.report.harbor+json; version=1.0".scan_status')
        echo "Scan status: $SCAN_STATUS"
      done
    
    - |
      # 취약점 확인
      HIGH_VULNS=$(curl -s \
        -H "Authorization: Basic $(echo -n admin:password | base64)" \
        "$HARBOR_REGISTRY/api/v2.0/projects/$PROJECT_NAME/repositories/$CI_PROJECT_NAME/artifacts/$CI_COMMIT_SHA" \
        | jq '.scan_overview."application/vnd.scanner.adapter.vuln.report.harbor+json; version=1.0".summary.total.high')
      
      if [ "$HIGH_VULNS" -gt 0 ]; then
        echo "High severity vulnerabilities found: $HIGH_VULNS"
        exit 1
      fi

deploy:
  stage: deploy
  script:
    - kubectl set image deployment/app container=$HARBOR_REGISTRY/$PROJECT_NAME/$CI_PROJECT_NAME:$CI_COMMIT_SHA
  only:
    - main

시나리오 2: 멀티 리전 복제

Harbor 복제 설정

# harbor-replication-rule.yaml
apiVersion: v1
kind: ConfigMap
metadata:
  name: harbor-replication-config
data:
  replication.json: |
    {
      "name": "prod-to-dr-replication",
      "description": "Replicate production images to DR site",
      "src_registry": {
        "type": "harbor",
        "url": "https://harbor-prod.company.com",
        "credential": {
          "access_key": "admin",
          "access_secret": "password"
        }
      },
      "dest_registry": {
        "type": "harbor",
        "url": "https://harbor-dr.company.com",
        "credential": {
          "access_key": "admin",
          "access_secret": "password"
        }
      },
      "filters": [
        {
          "type": "name",
          "value": "production/**"
        },
        {
          "type": "tag",
          "value": "v*"
        }
      ],
      "trigger": {
        "type": "event_based"
      },
      "replicate_deletion": true,
      "override": false,
      "enabled": true
    }

💡 마이그레이션 가이드

Nexus에서 Harbor로 마이그레이션

#!/bin/bash
# nexus-to-harbor-migration.sh

NEXUS_URL="nexus.company.com:8082"
HARBOR_URL="harbor.company.com"
NEXUS_REPO="docker-repo"
HARBOR_PROJECT="migrated"

echo "🚀 Nexus to Harbor 마이그레이션 시작..."

# 1. Nexus에서 이미지 목록 가져오기
echo "📋 Nexus 이미지 목록 수집 중..."
IMAGES=$(curl -s -u admin:password \
  "http://$NEXUS_URL/service/rest/v1/search?repository=$NEXUS_REPO&format=docker" \
  | jq -r '.items[].name')

# 2. 각 이미지를 Harbor로 마이그레이션
for IMAGE in $IMAGES; do
    echo "🔄 마이그레이션 중: $IMAGE"
    
    # Nexus에서 풀
    docker pull $NEXUS_URL/$IMAGE
    
    # Harbor로 태그 변경
    docker tag $NEXUS_URL/$IMAGE $HARBOR_URL/$HARBOR_PROJECT/$IMAGE
    
    # Harbor로 푸시
    docker push $HARBOR_URL/$HARBOR_PROJECT/$IMAGE
    
    # 로컬 이미지 정리
    docker rmi $NEXUS_URL/$IMAGE
    docker rmi $HARBOR_URL/$HARBOR_PROJECT/$IMAGE
    
    echo "✅ 완료: $IMAGE"
done

echo "🎉 마이그레이션 완료!"

📋 선택 기준 요약

Harbor를 선택해야 하는 경우 ✅

  • 컨테이너 중심 환경
  • 보안이 최우선인 환경
  • Kubernetes 네이티브 환경
  • 오픈소스 우선 정책
  • 멀티 클라우드 전략
  • DevSecOps 구현 필요

Nexus를 고려할 수 있는 경우 🤔

  • 다양한 아티팩트 관리 필요 (Maven, npm, NuGet 등)
  • 기존 Nexus 인프라 활용
  • Sonatype 상업 지원 필요
  • Java 생태계 중심

🎯 결론

Harbor는 컨테이너 레지스트리 전용으로 설계되어 다음 영역에서 Nexus보다 월등한 장점을 제공합니다:

  1. 🛡️ 보안: 내장 취약점 스캐닝과 정책 기반 차단
  2. 🚀 성능: 컨테이너 최적화된 아키텍처
  3. 🎨 UX: 직관적이고 현대적인 사용자 인터페이스
  4. 🔗 통합: Kubernetes 및 클라우드 네이티브 생태계
  5. 💰 비용: 완전 무료 오픈소스
  6. 🌐 확장성: 멀티 리전 복제와 고가용성

컨테이너 중심 환경이라면 Harbor가 명확한 선택입니다!

profile
bytebliss

0개의 댓글