🚀 요약

SUMMARY

신규 클러스터의 컨테이너 레지스트리로 Harbor를 골랐다. 예전에 GitLab Registry에서 GC가 제대로 안 돌아 스토리지가 계속 불어나고 UI도 답답했던 기억이 선정 기준을 만들었다. 직관적인 UI와 세밀한 권한 관리, 취약점 스캔까지 챙겨주는 Harbor가 그 기준에 맞았다.

💡 개요

클러스터를 새로 세우면서 컨테이너 레지스트리를 하나 정해야 했다. 그냥 아무거나 붙이는 대신, 이전에 GitLab Registry를 쓰며 불편했던 지점들을 그대로 요구사항으로 옮겨 적는 것부터 시작했다.

📋 선정 배경

GitLab Registry를 쓰며 데인 부분은 크게 둘이었다.

  • 가비지 컬렉션(GC): 안 쓰는 이미지가 제대로 정리되지 않아 스토리지 용량이 야금야금 계속 늘었다.
  • UI: 레지스트리 안에 뭐가 들었는지 GUI로 한눈에 파악하기가 어려웠다.

그래서 새 레지스트리에는 이런 걸 기대했다.

  • 구조가 간결할 것
  • GC가 알아서 잘 돌 것
  • GUI로 직관적으로 관리할 수 있을 것

NOTE

고가용성(HA) 구성은 이번엔 접었다. 시간이 없기도 했고, 회사에서 다루는 이미지는 대부분 로컬에도 있고 Dockerfile로 정의돼 있어 레지스트리가 터져도 비교적 빨리 복구할 수 있다고 봤다. 급한 불부터 끄자는 판단이었다.

📊 비교

후보는 HarborGitea Registry 둘로 좁혔다. 이미지를 저장·관리하는 기본기는 둘 다 하지만, 지향점이 꽤 다르다.

기능HarborGitea Registry
저장소 관리프로젝트 단위 독립 관리Gitea 저장소에 종속
UI전용 웹 UI (직관적)Gitea UI에 통합 (제한적)
권한 관리세분화된 RBAC저장소 수준의 기본 권한
보안취약점 스캐너 내장 (Trivy)외부 도구 연동 필요
스토리지 효율GC, 이미지 중복 제거GC, 이미지 중복 제거
인증OIDC, LDAP 연동Gitea 자체 인증
지원 아티팩트컨테이너 이미지, Helm 차트컨테이너 이미지 외 다양한 패키지

Gitea Registry는 매력이 분명하다. Gitea 설정에서 켜기만 하면 끝이고, 소스 코드와 이미지·npm·Maven 패키지를 한곳에서 관리할 수 있다. 이미 Gitea를 쓰고 있고 레지스트리에 큰 걸 바라지 않는다면 이만한 게 없다. 다만 권한이 Gitea 저장소 권한을 그대로 물려받고, 레지스트리 전용 관리 화면 없이 딱 기본기에 집중하는 물건이라, 내가 겪은 GitLab의 아쉬움(직관적 관리, 세밀한 권한)을 그대로 해결해 주진 못했다.

Harbor는 반대로, 레지스트리에 있으면 좋겠다 싶은 걸 대부분 갖췄다. 전용 웹 UI로 이미지 라이프사이클·권한·복제 정책을 프로젝트 단위로 관리하고, Trivy 스캐너가 내장돼 있어 이미지 푸시 시 취약점을 자동 검사하고 문제 있는 이미지의 배포를 막는 정책도 걸 수 있다. 프로젝트별 리소스 쿼터, 감사 로그, OIDC/LDAP 연동 같은 운영 기능도 붙어 있다. 가벼움을 원하면 Gitea, 관리와 보안을 원하면 Harbor라는 그림이었고, 내 요구사항은 후자에 가까웠다.

✅ 선정 사유

Harbor로 정했다. 이유는 이렇다.

  1. 요구사항 충족: GC와 직관적인 UI라는 기본 조건을 둘 다 만족했다. 애초에 이거 때문에 갈아탄 거라 여기서 이미 승부가 났다.
  2. 운영 편의성: 프로젝트별 용량 제한, 세밀한 권한 관리처럼 실제 운영에서 손이 가는 기능이 잘 구현돼 있었다.
  3. 보안: 내장 취약점 스캔으로 이미지 보안을 푸시 단계에서 미리 걸러낼 수 있다.
  4. 확장성: Helm 차트 저장소, OIDC 연동처럼 지금 당장은 아니어도 나중에 필요해질 기능이 이미 들어 있었다.

🔗 참고