Post

k8s에 harbor 설치 하기

Architecture Overview of Harbor

0https://github.com/goharbor/website/raw/main/docs/img/architecture/architecture.png

Harbor는 OCI 호환 클라우드 네이티브 아티팩트 레지스트리로 진화했습니다. 이제 OCI 이미지와 OCI 이미지 인덱스를 지원합니다. OCI 이미지 인덱스는 하나 이상의 플랫폼을 위한 이미지 매니페스트 목록을 가리키는 더 높은 수준의 매니페스트입니다. 예를 들어, Docker 매니페스트 목록은 OCI 이미지 인덱스의 인기 있는 구현체입니다. Harbor는 OCI 뿐만아니라 Helm 차트까지 관리가 가능하다.

또한 이러한 아티팩트를 끌어오기, 밀어넣기, 삭제하기, 태그 지정하기, 복제하기 및 스캔하기도 가능합니다.

아래 다이어그램은 Harbor 레지스트리의 전체적인 아키텍처를 보여줍니다:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
+-------------------+
|                   |
|   Data Access     |
|      Layer        |
|                   |
+-------------------+
|                   |
|   Fundamental     |
|    Services       |
|                   |
+-------------------+
|                   |
|   Core            |
|                   |
+-------------------+

Data Access Layer는 다음과 같은 구성 요소로 구성됩니다:

  • k-v 저장소: Redis로 구성되며 데이터 캐시 기능을 제공하며 작업 서비스의 작업 메타데이터를 일시적으로 유지합니다.
  • 데이터 저장소: 레지스트리와 차트 뮤지엄의 백엔드 저장소로 데이터 지속성을 위해 여러 저장소를 지원합니다.
  • 데이터베이스: 프로젝트, 사용자, 역할, 복제 정책, 태그 보존 정책, 스캐너, 차트 및 이미지와 같은 Harbor 모델의 관련 메타데이터를 저장합니다. PostgreSQL을 사용합니다.

Fundamental Services는 다음과 같은 구성 요소로 구성됩니다:

  • Proxy: Nginx 서버로 구성된 리버스 프록시로 API 라우팅 기능을 제공합니다. Harbor의 핵심, 레지스트리, 웹 포털 및 토큰 서비스 등은 모두 이 리버스 프록시 뒤에 있습니다.

Core 서비스는 Harbor의 핵심 기능을 제공합니다. 이 서비스는 다음과 같은 주요 기능을 수행합니다:

  • API 서버: REST API 요청을 수락하고 ‘인증 및 권한 부여’, ‘미들웨어’, ‘API 핸들러’와 같은 하위 모듈에 의해 이러한 요청에 응답합니다.
  • 작업 서비스: 이미지 및 매니페스트 목록의 작업 메타데이터를 관리합니다. 작업은 이미지를 끌어오기, 밀어넣기, 삭제하기, 태그 지정하기, 복제하기 및 스캔하기와 같은 작업을 포함합니다. 작업 서비스는 작업 메타데이터를 Redis 데이터베이스에 일시적으로 저장합니다.
  • Garbage Collector: 레지스트리에서 사용하지 않는 이미지 및 매니페스트 목록을 정리하는 역할을 합니다. 이를 통해 저장 공간을 최적화하고 불필요한 데이터를 제거합니다.
  • 스캐너: 이미지를 스캔하여 보안 취약점을 탐지하고 보고서를 생성합니다. 스캐너는 이미지를 끌어오거나 밀어넣을 때 자동으로 실행됩니다.
  • 복제 서비스: 다른 Harbor 인스턴스로 이미지 및 매니페스트 목록을 복제합니다. 이를 통해 여러 지역 또는 클라우드 환경에서 이미지를 효율적으로 배포할 수 있습니다.

Helm으로 harbor 설치하기

사전 요구사항

아래 예는 openEBS hostPath를 storage로 사용하고 Loadbalancer가 설치된 상태를 기본으로한다. 사전에 metallb와 같은 Loadbalancer가 설치돼 있어야 한다.

1
2
3
4
5
6
7
8
k create ns harbor
k ns harbor

helm pull harbor/harbor --version=1.9.1
tar zxvf harbor-1.9.1.tgz
cd harbor-1.9.1
cp values.yaml my-values.yaml
vim my-values.yaml # loadBalancer IP는 cloud 환경에 맞게 변경

1

1
helm install harbor -f my-values.yaml .

설치 완료 후 상태

2

Harbor 이용하기

ui 접속

초기 아이디 암호: harbor / Harbor12345

docker 설정

harbor tls설정을 하거나 docker에 insecure-registry 추가

1
2
3
4
5
6
7
8
# /etc/docker/daemon.json
{
    "insecure-registries": [
        "harbor.myweb.io"
    ]
}

sudo systemctl restart docker
1
2
3
docker login harbor.myweb.io
docker tag nginx harbor.myweb.io/rdp/nginx:0.1
docker push harbor.myweb.io/rdp/nginx:0.1

Link

https://github.com/goharbor/harbor/wiki/Architecture-Overview-of-Harbor

This post is licensed under CC BY 4.0 by the author.