개요
Harbor는 오픈소스 이미지 레지스트리로 쿠버네티스와 같은 컨테이너 환경에서 중요한 인프라이니 만큼 가용성이 중요하다.
고객의 Harbor의 가용성 요구사항을 위해 아래 두 가지 방법을 고려하였다.
1. 고가용성(HA) 구성
2. 예비(DR) 하버 구성
첫 번째 방법은 Harbor의 HA(고가용성)을 구성하는 것이다.
Harbor는 컨테이너 형태의 docker-compose, Helm chart의 두 가지 설치만을 지원한다. 그렇기 때문에 Harbor에서 내부에서 사용되는 nginx와 같은 stateless 한 서비스들은 레플리카 수를 늘려 쉽게 이중화가 되지만, Harbor가 사용하는 Redis와 Postgres는 HA를 자체적으로 지원하지 않기 때문에 직접 구성하여 External Database의 형태로 연결시켜주어야 한다.
Redis(Sentinel / Cluster), Postgresql(PgPool,Operator등) 등의 HA구성 방식 종류에 따라 Harbor에서 연결을 지원하는지도 따져보아야 한다.
두 번째 방법은 예비 Harbor를 구성하는 것이다.
Harbor의 복제(Replications) 기능을 활용해서 레지스트리 간 이미지를 미러링한다. 그리고 앞단에 로드벨런서나 Proxy Cache 기능을 이용하여 고가용성을 확보하는 것이다. Harbor 외에도 ECR, GCR, Docker hub 등 다른 이미지 레지스트리에도 복제할 수 있다.
고객은 Redis나 Postgresql 등의 추가적인 구성의 복잡함과 운영의 어려움으로 인해 두 번째 방법을 채택하기로 했다.
Harbor Registries(레지스트리) 등록
먼저 Harbor에서 복제할 레지스트리를 등록해주어야 한다.
Administration > Regstries 메뉴로 들어가 New ENDPOINT를 누른다.
아래 필드 값들을 입력하고 TEST CONNECTION을 누른다.
- Provider: 이미지 레지스트리 프로바이더
- ECR, GCR, DockerHub 등 수많은 도커 이미지 레지스트리를 지원한다.
- Name: 등록할 레지스트리 이름
- Description: 설명
- Endpoint URL: 연결할 레지스트리 엔드포인트
- Coneection이 잘 되지 않는다면, Harbor core라는 컨테이너에서 연결할 레지스트리 간 통신이 잘 되어야 하기 때문에, 네트워크나 DNS 설정을 잘 살펴보자.
- AccessID: 연결할 레지스트리 계정 아이디
- AccessSecret: 연결할 레지스트리 계정 비밀번호
- Verifty Remote Cert: SSL 인증서 여부
이미지가 Health 상태로 잘 등록되었는지 확인하자
Harbor Replications(복제) 등록
Harbor Replications(복제) 기능에는 두 가지 모드가 있고, 모드에 따라 trigger 모드를 지원한다.
- Push-Based: 등록한 레지스트리에 이미지를 보내는 방식이다. ( Harbor -> 등록 레지스트리 )
- Event Based
- 이벤트 기반의 방식으로 Harbor에 이미지를 푸시할 경우 복제가 발생하는 것이다.
- Event Based
- Pull-Based: 등록한 레지스트리로부터 이미지를 가져오는 방식이다. ( Harbor <- 등록 레지스트리 )
- Manual
- 수동으로 복제하는 방식으로 Harbor의 UI 상에서 Replciation 버튼을 눌러 복제한다.
- Scheduled
- 크론탭 기반의 문자열을 기반으로 예약한 시간에 복제가 발생하는 방식이다.
- Manual
Event Based
Administartor > Replications 메뉴로 들어가 New Replication Rule을 생성한다.
주요 필드는 다음과 같다.
- Name: 생성할 복제룰의 이름
- Replication mode: 복제 모드
- Source resource filter: 복제할 이미지 필터링 조건
- Destination: 복제할 대상 이미지 레지스트리
- Trigger Mode: 복제가 발생하는 트리거 모드
Docker 명령어를 통해 Source Harbor에 이미지를 푸시해 보고 Target 레지스트리에 이미지가 잘 복제되는지 확인한다.
복제가 잘되었는지 Executions 메뉴를 통해 실행 로그를 확인할 수 있다.
event-based 경우 Source Harbor로 이미지를 푸시할 경우 복제가 발생하며, 푸시한 이미지만 복제가 된다.
Manual
Munual 방식은 직접 Web UI에서 Replication 버튼을 눌러 수동으로 복제한다.
Pull-based에 체크하고 Trigger Mode를 Manual로 설정한다.
pull-based 방식이기 때문에 Target 이미지 레지스트리로 이미지를 푸시하고 Source Harbor로 이미지를 가져와 복제가 잘 되는지 확인한다.
push-based 방식과 달리 pull-based 방식은 Target 이미지 레지스트리로 푸시된 모든 이미지를 가져오는 것을 볼 수 있다.
Scheduled
크론 표현식을 통해 시간을 설정하면 복제를 스케줄링할 수 있다.
테스트를 위하여 * * * * *( 매분마다)로 시간을 설정하겠다.
Manual 방식과 마찬가지로 설정한 시간마다 이미지가 잘 복제되는 것을 볼 수 있다.
결론
Harbor의 여러 복제 방식 중 용도와 목적에 맞게 잘 사용하면 좋을 것 같다.
나의 경우, 이미지가 push 될 때 동작하는 event-based 방식을 선택했다.
그리고, 이번 주제를 포스팅하면서 생각보다 Harbor의 좋은 기능들이 많다는 것을 알게 되었다.
기회가 된다면 다음에는 Trivy나 chart museum 기능도 적극적으로 활용해 보자.
'Infrastructure' 카테고리의 다른 글
Scouter APM 설치 및 기본 사용 + Scouter-Paper (0) | 2024.08.14 |
---|