티스토리 뷰

Skill/기반기술

harbor - Registry

진열사랑 2025. 5. 2. 09:16

Harbor는 CNCF(Cloud Native Computing Foundation) 프로젝트로, Docker 이미지를 저장, 서명, 스캔, 관리할 수 있는 **컨테이너 이미지 레지스트리(Registry)**입니다. Harbor는 보안, 감사, 역할 기반 접근 제어(RBAC), 이미지 스캔, 복제 등 기능이 강화된 엔터프라이즈급 레지스트리입니다.

  • Private Registry

보통 hub.docker.com에서 제공하거나 오픈소스 프로젝트에서 제공하는 컨테이너 이미지는 인터넷이 되는 모든 곳에서 풀을 받아 사용이 가능하다. 이러한 컨테이너 이미지를 제공해주는 레지스트리를 Public Registry라고 한다. 하지만, 회사와 같이 프로젝트가 오픈되지 않아야 하는 환경에서는 회사 환경 내부에서만 접근이 가능해야 하고, 큰 회사의 경우에는 특정 부서에서만 특정 이미지를 푸쉬하거나 풀 할 수 있도록 권한을 제어해야 한다. 이렇게 특정 환경에서만 접근이 가능해야 하는 레지스트리를 Private Registry라고 한다.

 

  • Harbor 기능

Harbor는 대표적인 Private registry 오픈소스이며, 컨테이너 이미지 저장 외에도 여러가지의 기능을 제공하고 있다.

  • 컨테이너 이미지에 대한 보안 및 취약점 분석
  • RBAC (Role based access control)
  • 정책 기반 복제 (Replication)
  • 여러 방식의 인증기능 제공 (LDAP / AD / OIDC)
  • 이미지 삭제 및 가비지 컬렉션을 통해 주기적으로 리소스 확보
  • Web 기반의 GUI
  • 감사(Audit)기능 제공
  • RESTful API 제공
  • docker-compose, helm 등 여러가지 배포 방식 제공

 

  • Helm으로 설치

Harbor 설치 방법 중 Helm을 사용하여 쿠버네티스로 harbor를 쉽게 설치할 수 있다. 먼저 helm repo를 등록하고 기본 values.yaml을 받자.

 

# harbor를 배포할 네임스페이스 생성

$ kubectl create ns harbor

 

# helm repo 등록

$ helm repo add harbor https://helm.goharbor.io

 

$ curl O "https://raw.githubusercontent.com/goharbor/harbor-helm/main/values.yaml

 

Harbor와 경쟁 구도에 있는 오픈소스 대안

Harbor는 아래와 같은 오픈소스 도구들과 경쟁 구도에 있습니다:


1. Docker Distribution (formerly Docker Registry)

  • 설명: Docker에서 공식적으로 제공하는 기본 Registry 서버.
  • 경쟁 포인트: 가장 기본적이고 널리 사용되지만, Harbor에 비해 보안, UI, 스캐닝, 복제 등의 기능이 부족함.
  • Harbor보다 부족한 점: UI 없음, RBAC 없음, 스캐닝 없음, 감사 로그 없음.

2. Quay (Red Hat 소유)

  • 설명: Red Hat이 인수한 CoreOS의 오픈소스 이미지 레지스트리. Red Hat Quay라는 상용 버전도 있음.
  • 경쟁 포인트: UI 지원, 이미지 스캐닝, 역할 기반 접근 제어 지원.
  • Harbor와의 차이점:
    • Quay는 Clair라는 이미지 보안 스캐너를 통합.
    • Quay는 일부 고급 기능이 유료 버전에 포함됨.

4. Dragonfly

  • 설명: Alibaba에서 만든 P2P 기반 이미지 전송 및 캐시 시스템. 엄밀히 말하면 레지스트리가 아니라 전송 최적화 솔루션.
  • Harbor와의 차이: 역할이 다르지만, 이미지 전달 측면에서 보완/경쟁 가능.

5. CRI-O + local registry (Kubernetes 환경)

  • 설명: 단순한 자체 Registry를 사용하는 환경.
  • 경쟁 포인트: 간단하고 통합이 쉬움.
  • 단점: Harbor의 고급 기능이 없음 (보안, RBAC 등).

정리: 경쟁 오픈소스 비교표


 

기능 Harbor Quay Docker Registry Portus Dragonfly
UI 제공
RBAC
이미지 서명 및 스캐닝
복제 (Replication)
유지보수 상태 활발함 활발 활발 종료됨 활발함
 

궁극적으로, Harbor는 엔터프라이즈에 특화된 오픈소스 레지스트리로, 경쟁 오픈소스보다 보안과 기능 면에서 우위에 있는 경우가 많습니다.

 

Kubernetes 환경에서는 컨테이너 이미지 레지스트리는 다음 요소들을 중심으로 고려해야 합니다:

  • 보안 (RBAC, 이미지 서명/스캔, TLS)
  • CI/CD 연동
  • 프라이빗 레지스트리 지원
  • 에어갭(내부망) 환경 지원 여부
  • 사용 편의성 및 UI
  • 복제 및 멀티 클러스터 전략

Kubernetes 환경에 추천할 만한 Registry


1. Harbor

  • 장점:
    • Kubernetes 및 Helm과의 연동 우수
    • 이미지 서명(Cosign) 및 취약점 스캐닝(Trivy, Clair)
    • LDAP/OIDC 통합, RBAC, 감사 로그
    • 복제(Replication) 및 멀티 레지스트리 구성
    • Helm Chart 저장소 지원
    • Air-gapped 환경에 강함
  • 적합 환경: 보안 요구사항 높은 기업, 에어갭 환경, 멀티 클러스터 사용 시

2. Red Hat Quay (오픈소스 및 상용)

  • 장점:
    • Kubernetes 친화적
    • Clair 기반 취약점 스캐닝
    • HA 및 레지스트리 미러링 지원
  • 단점:
    • 오픈소스 버전은 다소 복잡함
    • 일부 기능은 상용 버전에만 있음

⚠️ 3. Docker Distribution (기본 Registry)

  • 장점: 매우 단순하고 빠른 배포 가능
  • 단점:
    • 보안, UI, RBAC, 스캐닝 없음
    • 운영 편의성 부족
  • 적합 환경: 테스트 환경, 단일 노드용

4. GitLab Container Registry

  • 장점:
    • GitLab CI/CD와 긴밀하게 연동
    • Kubernetes와 연동 시 유용 (Auto DevOps 등)
  • 단점:
    • GitLab 인스턴스 필요 (운영 부담)
  • 적합 환경: GitLab 기반 DevOps 파이프라인 구축 시

5. Amazon ECR / Google GAR / Azure ACR

  • 장점:
    • 클라우드 네이티브, IAM 연동
    • Kubernetes 클러스터와 바로 연동 가능 (EKS, GKE 등)
  • 단점:
    • 에어갭 환경 불가
    • 벤더 종속
  • 적합 환경: 퍼블릭 클라우드 기반의 쿠버네티스 클러스터

추천 요약

환경/요구사항추천 Registry
에어갭, 온프레미스 Harbor
오픈소스 DevOps 연동 ✅ Harbor, GitLab Registry
보안 및 감사 기능 중요 ✅ Harbor, Quay
퍼블릭 클라우드 환경 ✅ ECR, GAR, ACR
가벼운 테스트 목적 ⚠️ Docker Registry
 

 

harbor는 CI/CD연동을 어떻게 하나?


Harbor 자체는 CI/CD 도구가 아니지만, CI/CD 파이프라인과 자연스럽게 연동될 수 있도록 설계되어 있습니다. Harbor는 컨테이너 이미지 레지스트리 역할을 하므로, CI/CD 도구에서 빌드한 이미지를 Harbor에 푸시하고 Kubernetes에 배포하는 흐름이 일반적입니다.


✅ CI/CD에서 Harbor를 연동하는 방식

1. CI 도구에서 Docker 이미지 생성

  • 예: GitHub Actions, GitLab CI, Jenkins 등에서 docker build로 이미지 생성

2. Harbor에 로그인 후 이미지 푸시

docker login harbor.example.com
docker tag myapp:latest harbor.example.com/project/myapp:1.0.0
docker push harbor.example.com/project/myapp:1.0.0
  • CI 파이프라인 내에서 위 명령을 자동화함
  • Harbor는 HTTP/HTTPS 인증, RBAC, 토큰 등 보안 기능을 제공

3. Kubernetes에 배포

  • CI/CD 도구가 kubectl, Helm, ArgoCD 등을 이용해 배포
  • 이미지 경로는 Harbor 레지스트리의 URL 사용:
image: harbor.example.com/project/myapp:1.0.0


✅ 예: GitHub Actions에서 Harbor 연동

name: Build and Deploy

on:
  push:
    branches: [ main ]

jobs:
  build-and-push:
    runs-on: ubuntu-latest

    steps:
    - name: Checkout code
      uses: actions/checkout@v3

    - name: Login to Harbor
      run: echo "${{ secrets.HARBOR_PASSWORD }}" | docker login harbor.example.com -u ${{ secrets.HARBOR_USERNAME }} --password-stdin

    - name: Build Docker image
      run: docker build -t harbor.example.com/project/myapp:${{ github.sha }} .

    - name: Push image to Harbor
      run: docker push harbor.example.com/project/myapp:${{ github.sha }}

    - name: Deploy to Kubernetes
      run: |
        kubectl set image deployment/myapp myapp=harbor.example.com/project/myapp:${{ github.sha }}

✅ 보안 및 통합 포인트

  • Harbor Access Token: API 접근, OAuth/OIDC 연동 가능
  • Robot Account: CI/CD를 위한 최소 권한 계정 (권장)
  • Webhook: 이미지 푸시/삭제 이벤트 발생 시 자동 트리거 (예: ArgoCD 동기화)
  • Image Signing & Scanning: 배포 전 서명/스캔 통과 조건 설정 가능 (강제 배포 차단 가능)

✅ 고급 연동 예시

  • ArgoCD + Harbor:
    • GitOps 방식 배포
    • Harbor Webhook이 ArgoCD를 트리거하여 자동 배포
  • Harbor + Trivy/Clair:
    • 이미지 취약점 자동 스캐닝
    • 스캔 실패 시 CI 파이프라인에서 배포 차단 가능

Harbor는 CI/CD 툴과의 직접 통합이 아닌 이미지 저장소로서 중심 역할을 하며, 다양한 CI/CD 도구들과 쉽게 연동됩니다.

CI/CD 파이프라인 구축 시, Harbor에서 제공하는 Robot Account + HTTPS + RBAC + 취약점 스캐닝 + 서명 기능을 적절히 활용하는 것이 핵심입니다.

지금 사용 중인 CI 도구(GitLab, GitHub Actions 등)가 있다면, 해당 도구 기준으로 구체적인 예제를 도와드릴 수 있어요. 원하시나요?

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
글 보관함