🚀 요약
SUMMARY
신규 클러스터의 컨테이너 레지스트리로 Harbor를 골랐다. 예전에 GitLab Registry에서 GC가 제대로 안 돌아 스토리지가 계속 불어나고 UI도 답답했던 기억이 선정 기준을 만들었다. 직관적인 UI와 세밀한 권한 관리, 취약점 스캔까지 챙겨주는 Harbor가 그 기준에 맞았다.
💡 개요
클러스터를 새로 세우면서 컨테이너 레지스트리를 하나 정해야 했다. 그냥 아무거나 붙이는 대신, 이전에 GitLab Registry를 쓰며 불편했던 지점들을 그대로 요구사항으로 옮겨 적는 것부터 시작했다.
📋 선정 배경
GitLab Registry를 쓰며 데인 부분은 크게 둘이었다.
- 가비지 컬렉션(GC): 안 쓰는 이미지가 제대로 정리되지 않아 스토리지 용량이 야금야금 계속 늘었다.
- UI: 레지스트리 안에 뭐가 들었는지 GUI로 한눈에 파악하기가 어려웠다.
그래서 새 레지스트리에는 이런 걸 기대했다.
- 구조가 간결할 것
- GC가 알아서 잘 돌 것
- GUI로 직관적으로 관리할 수 있을 것
NOTE
고가용성(HA) 구성은 이번엔 접었다. 시간이 없기도 했고, 회사에서 다루는 이미지는 대부분 로컬에도 있고 Dockerfile로 정의돼 있어 레지스트리가 터져도 비교적 빨리 복구할 수 있다고 봤다. 급한 불부터 끄자는 판단이었다.
📊 비교
후보는 Harbor와 Gitea Registry 둘로 좁혔다. 이미지를 저장·관리하는 기본기는 둘 다 하지만, 지향점이 꽤 다르다.
| 기능 | Harbor | Gitea 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로 정했다. 이유는 이렇다.
- 요구사항 충족: GC와 직관적인 UI라는 기본 조건을 둘 다 만족했다. 애초에 이거 때문에 갈아탄 거라 여기서 이미 승부가 났다.
- 운영 편의성: 프로젝트별 용량 제한, 세밀한 권한 관리처럼 실제 운영에서 손이 가는 기능이 잘 구현돼 있었다.
- 보안: 내장 취약점 스캔으로 이미지 보안을 푸시 단계에서 미리 걸러낼 수 있다.
- 확장성: Helm 차트 저장소, OIDC 연동처럼 지금 당장은 아니어도 나중에 필요해질 기능이 이미 들어 있었다.