티스토리 뷰
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 등)
- 단점:
- 에어갭 환경 불가
- 벤더 종속
- 적합 환경: 퍼블릭 클라우드 기반의 쿠버네티스 클러스터
추천 요약
에어갭, 온프레미스 | ✅ 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 등)가 있다면, 해당 도구 기준으로 구체적인 예제를 도와드릴 수 있어요. 원하시나요?
'Skill > 기반기술' 카테고리의 다른 글
Rag:Retrieval-Augmented Generation 검색증강생성 (0) | 2025.05.02 |
---|---|
CI/CD : 지속적 통합/지속적 배포 (0) | 2025.05.02 |
etcd(distributed Key-Value store) 란 (0) | 2025.04.30 |
왜 localhost 접속하는 ip 가 0:0:0:0:0:0:0:1 으로 보이나? (0) | 2025.04.05 |
web.xml 설정 (0) | 2025.04.03 |
- Total
- Today
- Yesterday
- caniuse
- ul li로 테이블
- springboot
- setter
- $.extend
- @ExceptionHandler
- sumifs
- DatePicker
- 전후방탐색
- $.each
- element위치
- JQuery
- Javascript
- border-collapse
- 진열사랑
- 정규식
- 프로젝트명변경
- draw.io
- excel
- devtools
- lombok
- CSS
- PostgreSQL
- Keycode
- 여러 컬럼 update
- object key
- oracle
- spring
- getter
- QueryDSL
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |