본문 바로가기
J-H-T

[Harbor - 2단계] Source / Destination / Endpoint / Replication Rule 쉽게 이해하기 - Harbor Native Replication 학습 시리즈

by METAVERSE STORY 2026. 8. 3.
반응형

 

 

📘 Harbor Native Replication 2단계

Source / Destination / Endpoint / Replication Rule 쉽게 이해하기

이제부터는 Harbor Replication의 실제 설정 구조로 들어가면 됩니다.
이번 단계의 핵심은 딱 4개입니다.

Source
Destination
Endpoint
Replication Rule
 

이 네 가지 관계만 정확히 이해하면 Harbor Replication 화면을 봐도 훨씬 덜 어렵습니다.


1. 전체 그림부터 보겠습니다

운영 Harbor의 이미지를 DR Harbor로 복제한다고 가정하겠습니다.

[운영센터]

Harbor A
harbor-prod.company.com
        │
        │ Replication
        ↓
Harbor B
harbor-dr.company.com

[DR센터]
 

여기서 역할은 다음과 같습니다.

용어의미
Source 복제할 원본
Destination 복제받을 대상
Endpoint 상대 Registry의 접속정보
Replication Rule 무엇을, 어디로, 언제 복제할지 정한 규칙

이제 하나씩 보겠습니다.


2. 📤 Source란?

Source = 원본 데이터가 있는 곳입니다.

예를 들어 운영 Harbor에 다음 이미지가 있다고 해보겠습니다.

Harbor A

project01/
 ├─ api:v1
 ├─ api:v2
 └─ web:v1
 

그리고 이것을 Harbor B로 복제한다면:

Harbor A
  ↑
Source
 

입니다.

즉,

"어디에 있는 이미지를 복제할 것인가?"

에 대한 답이 Source입니다.


3. 📥 Destination이란?

반대로:

"복제된 이미지를 어디에 저장할 것인가?"

가 Destination입니다.

Harbor A
Source
   │
   │ Replication
   ↓
Harbor B
Destination
 

예를 들어:

Source
harbor-prod.company.com

Destination
harbor-dr.company.com
 

입니다.

복제가 성공하면:

Harbor A

project01/api:v1

       ↓

Harbor B

project01/api:v1
 

처럼 동일한 Artifact가 생깁니다.


4. Source와 Destination은 고정인가?

아닙니다.

이 부분이 중요합니다.

Replication 방식에 따라 Source와 Destination 관점이 달라질 수 있습니다.

예를 들어 Push Replication이면:

Harbor A
Source
   │
   │ PUSH
   ↓
Harbor B
Destination
 

입니다.

반면 Harbor B에서 Pull Rule을 만들면:

Harbor A
Remote Source
   │
   │ PULL
   ↓
Harbor B
Local Destination
 

이 됩니다.

그래서 Harbor Replication을 볼 때는 항상:

"이 Rule을 어느 Harbor에서 만들었는가?"

를 같이 봐야 합니다.

이건 다음 3단계에서 Push/Pull을 설명할 때 더 자세히 다루겠습니다.


5. 🔌 Endpoint란?

이제 Harbor A가 Harbor B로 이미지를 보내려고 합니다.

그런데 Harbor A 입장에서는 Harbor B에 대해 최소한 이런 정보가 필요합니다.

주소
계정
비밀번호 또는 Secret
인증서 관련 정보
Registry 종류
 

예:

Name:
harbor-dr

URL:
https://harbor-dr.company.com

Username:
robot$replication

Password:
********
 

이 묶음을 Harbor에서는 Endpoint라고 생각하면 됩니다.

즉:

Endpoint = 원격 Registry 접속 프로파일

입니다.


6. 아주 쉽게 비유하면

회사 A가 회사 B에 택배를 보낸다고 생각해보겠습니다.

회사 A
 ↓
회사 B
 

회사 A는 회사 B의 정보를 알아야 합니다.

회사명
주소
담당자
연락처
출입 인증
 

Harbor도 똑같습니다.

Remote Registry Name
URL
Username
Password / Token
TLS 정보
 

이것이 Endpoint입니다.


7. Endpoint가 왜 필요한가?

Replication Rule에 매번 다음 정보를 직접 넣으면 번거롭습니다.

https://harbor-dr.company.com
robot$replication
Password
TLS 설정
 

그래서 먼저 Endpoint를 하나 등록해 둡니다.

Endpoint

Name: harbor-dr
URL : https://harbor-dr.company.com
Auth: robot account
 

그러면 Replication Rule에서는:

Destination Registry

harbor-dr
 

만 선택하면 됩니다.

즉:

Endpoint 등록
      ↓
Replication Rule에서 재사용
 

구조입니다.


8. 🔐 Endpoint 계정은 아무 계정이나 써도 되나?

기술적으로 권한이 충분한 계정을 사용할 수 있지만, 운영 환경에서는 보통 Robot Account 같은 전용 계정을 사용하는 것이 좋습니다.

예:

Harbor A
   │
   │ robot$replication
   ↓
Harbor B
 

이 계정에는 필요한 권한만 줍니다.

예를 들어 Push Replication이라면 Destination 측에서:

project01

Repository Push
Repository Pull
Artifact 관련 필요한 권한
 

등을 갖도록 설계합니다.

왜 admin 계정을 안 쓰는 게 좋을까요?

admin
= 너무 많은 권한
 

Replication만 필요한데 전체 관리자 권한을 주는 것은 보안 측면에서 좋지 않습니다.

이 부분은 이후 Robot Account 단계에서 별도로 자세히 다루겠습니다.


9. 📋 Replication Rule이란?

이제 핵심입니다.

Replication Rule = 복제 정책

입니다.

쉽게 표현하면:

어떤 Image를 + 어느 Registry로 + 어떤 조건으로 + 언제 복제할 것인가

를 정의합니다.

예:

Rule Name
prod-to-dr

Source
Local Harbor

Destination
harbor-dr Endpoint

Filter
project01/**

Trigger
Event Based
 

이것이 Replication Rule입니다.


10. Rule을 문장으로 바꾸면?

위 설정을 한국말로 바꾸면:

운영 Harbor에서 project01에 등록되는 Artifact를 DR Harbor로 Event 기반으로 자동 복제해라.

입니다.

즉 Rule은 하나의 명령문과 비슷합니다.

[무엇을]
project01/**

[어디서]
Harbor A

[어디로]
Harbor B

[언제]
Image Push Event 발생 시

[어떻게]
Push Replication
 

11. Replication Rule 내부에는 무엇이 있나?

보통 다음 항목들을 보게 됩니다.

Replication Rule

├─ Name
├─ Replication Mode
├─ Source / Destination Registry
├─ Resource Filter
│   ├─ Name
│   ├─ Tag
│   └─ Label
├─ Destination Namespace
├─ Trigger Mode
├─ Override
└─ Delete Remote Resources
 

처음에는 너무 많아 보이지만 크게 나누면 세 가지입니다.

A. 어디서 어디로?

Source
Destination
Endpoint
 

B. 무엇을?

Project
Repository
Tag
Artifact
 

C. 언제?

Manual
Scheduled
Event Based
 

입니다.


12. 실제 예제로 보겠습니다

운영 Harbor:

https://harbor-prod.company.com
 

DR Harbor:

https://harbor-dr.company.com
 

운영 Harbor에 다음 이미지가 있습니다.

project-ai/
 ├─ inference:v1
 ├─ inference:v2
 └─ trainer:v5
 

우리는 이것을 모두 DR에 복제하고 싶습니다.

Endpoint

먼저 운영 Harbor에:

Endpoint Name:
harbor-dr

URL:
https://harbor-dr.company.com
 

을 등록합니다.


Replication Rule

그다음:

Rule Name:
prod-ai-to-dr

Mode:
Push

Destination:
harbor-dr

Filter:
project-ai/**

Trigger:
Event Based
 

를 만듭니다.


13. 그러면 실제 동작은?

개발자가:

 
docker push harbor-prod.company.com/project-ai/inference:v3
 

를 실행합니다.

흐름은:

개발자

   ↓ docker push

Harbor A Registry

   ↓

project-ai/inference:v3 저장

   ↓

Event 발생

   ↓

Replication Rule 확인

   ↓

project-ai/** 조건 일치

   ↓

JobService가 Replication Job 실행

   ↓

Endpoint 정보 사용

   ↓

Harbor B 접속

   ↓

project-ai/inference:v3 Push

   ↓

복제 완료
 

가 됩니다.


14. Kubernetes Pod 구조와 연결하면

1.5단계에서 배운 내용을 연결해보겠습니다.

             Harbor A

         ┌──────────────┐
         │     Core     │
         └──────┬───────┘
                │
         Replication Rule
                │
                ↓
         ┌──────────────┐
         │  JobService  │
         └──────┬───────┘
                │
                │ Endpoint 정보
                ↓
     harbor-dr.company.com
                │
                ↓
         Harbor B Registry
                │
                ↓
             Storage
 

따라서:

  • Core → Replication 정책 관리
  • JobService → Replication 작업 수행
  • Registry → Image/Artifact 전송·수신
  • Endpoint → 상대 Harbor 접속정보

라고 연결해서 이해하면 됩니다.


15. Endpoint와 Destination의 차이가 헷갈릴 수 있습니다

초보 단계에서 가장 많이 헷갈리는 부분입니다.

예를 들어:

Destination
= Harbor B

Endpoint
= Harbor B에 접속하기 위한 정보
 

입니다.

비유하면:

Destination
= 친구 집

Endpoint
= 친구 집 주소 + 현관 비밀번호
 

라고 생각하면 아주 쉽습니다. 😄


16. Source와 Filter도 다릅니다

이것도 중요합니다.

Source가:

Harbor A
 

라고 해서 Harbor A의 모든 Image를 무조건 복제하는 것은 아닙니다.

Filter를 걸 수 있습니다.

예:

Harbor A

project-a
project-b
project-c
 

중에서:

project-a/**
 

만 복제할 수 있습니다.

그래서:

Source
= 어느 Registry인가?

Filter
= 그 Registry에서 무엇을 복제할 것인가?
 

입니다.


17. Namespace란?

Replication Rule 화면에서 Destination Namespace 같은 표현도 볼 수 있습니다.

Harbor에서는 대체로 Project 경로와 관련해서 이해하면 됩니다.

예를 들어 Source가:

Harbor A

project01/app:v1
 

인데 Destination에서는:

Harbor B

backup/project01/app:v1
 

같이 다른 경로 구조로 저장하고 싶을 수 있습니다.

이때 Destination Namespace 설정이 관련됩니다.

초보 단계에서는:

복제된 Repository를 Destination의 어느 Project/경로 아래 둘 것인지 정하는 옵션

정도로 이해하면 충분합니다.


18. Override란?

Destination에 이미 같은 Artifact/Tag가 있을 수 있습니다.

예를 들어:

Harbor B

project01/app:v1
 

이 이미 존재합니다.

그런데 Harbor A에서도:

project01/app:v1
 

을 복제하려고 합니다.

이때 기존 것을 덮어쓸 것인지 결정하는 옵션이 Override입니다.

개념적으로:

Override OFF

이미 있으면
→ 기존 유지 / Skip
 
Override ON

이미 있어도
→ Source 기준으로 갱신
 

정도로 이해하면 됩니다.

운영에서는 무조건 ON으로 두기보다 Image Tag 정책과 함께 봐야 합니다.

특히:

latest
prod
stable
 

같이 동일 Tag를 재사용한다면 더 신중해야 합니다.


19. Delete Remote Resources란?

조금 위험한 옵션입니다. ⚠️

예를 들어 Source에서:

project01/app:v1
 

을 삭제했습니다.

Rule 설정에 따라 Destination에서도:

project01/app:v1
 

을 삭제하도록 만들 수 있습니다.

즉:

Harbor A
app:v1 삭제

    ↓ Replication

Harbor B
app:v1 삭제
 

가 가능합니다.

DR 환경에서는 이 옵션을 아주 신중하게 사용해야 합니다.

왜냐하면 실수로 Source에서 이미지를 삭제했는데:

운영 삭제
   ↓
DR에서도 삭제
 

되면 DR의 의미가 약해질 수 있기 때문입니다.

그래서:

Replication과 Backup은 별개

라고 앞 단계에서 말씀드렸던 것입니다.


20. 네 가지 개념을 한 그림으로 정리

                  Source
            Harbor A / 운영센터
                     │
                     │
             project01/**
                     │
                     ↓
          ┌─────────────────────┐
          │  Replication Rule   │
          │                     │
          │ Mode : Push         │
          │ Filter: project01/**│
          │ Trigger: Event      │
          └──────────┬──────────┘
                     │
                     │
                  Endpoint
                     │
          ┌──────────┴──────────┐
          │ URL                  │
          │ Username             │
          │ Password / Secret    │
          │ TLS                  │
          └──────────┬──────────┘
                     │
                     ↓
                Destination
              Harbor B / DR센터
                     │
                     ↓
              project01/**
 

21. 제일 쉬운 비유 🎁

택배로 비유하면 완벽합니다.

Source
= 보내는 사람의 창고

Filter
= 어떤 물건을 보낼지

Replication Rule
= 배송 지시서

Endpoint
= 받는 곳 주소 + 출입정보

Destination
= 실제 물건을 받을 창고
 

예:

서울 창고
   │
   │ "노트북만 부산으로 보내라"
   │
   ↓
배송 지시서
   │
   │ 부산 창고 주소 확인
   ↓
부산 창고
 

Harbor로 바꾸면:

Harbor A
   │
   │ project-ai/** 복제
   ↓
Replication Rule
   │
   │ harbor-dr Endpoint
   ↓
Harbor B
 

입니다.


22. 실제 운영/DR 예제

제가 추천하는 기본적인 이해용 구성은 이런 모습입니다.

                  운영 K8s Cluster

                 Harbor PROD
                      │
       harbor-prod.company.com
                      │
                      │
              Native Replication
                      │
                      │
          ───────── WAN ─────────
                      │
                      ↓
                 Harbor DR
                      │
        harbor-dr.company.com

                   DR Cluster
 

그리고 Rule:

Name
prod-to-dr

Mode
Push

Source
Local PROD Harbor

Destination Endpoint
harbor-dr

Filter
project-prod/**

Trigger
Event Based

Override
환경에 맞게 결정

Delete Remote
초기에는 신중하게 / 보통 OFF부터 검토
 

이렇게 시작하면 구조를 이해하기 좋습니다.


⭐ 2단계에서 꼭 기억할 것

딱 네 문장만 기억하시면 됩니다.

① Source

Image가 현재 있는 Registry

Harbor A
 

② Destination

Image를 복제받을 Registry

Harbor B
 

③ Endpoint

상대 Harbor에 접속하기 위한 주소 + 인증정보

URL
ID
Secret
TLS
 

④ Replication Rule

무엇을 / 어디로 / 언제 복제할지 정한 정책

Source
   ↓
Filter
   ↓
Rule
   ↓
Endpoint
   ↓
Destination
 

🎯 여기까지 이해했다면

이제 다음 3단계가 굉장히 중요합니다.

Push Replication vs Pull Replication입니다.

겉으로 보면 둘 다:

Harbor A
   ↓
Harbor B
 

인데 실제로는 누가 연결을 시작하는지, 방화벽을 어느 방향으로 열어야 하는지, 운영센터↔DR센터에서 어떤 방식을 선택해야 하는지가 달라집니다.

특히 DR 구성에서는 이 차이가 설계에 직접 영향을 줍니다. 다음 3단계에서는 방화벽/네트워크 관점까지 포함해서 Push와 Pull을 그림으로 아주 쉽게 설명하면 좋습니다.

 

반응형

댓글