반응형

 



설치 및 테스트한 날짜: 2023년 4월 12일
Harbor version: v2.7.0

 

아래 문서에 준비 작업, 설정, 설치 과정이 자세히 설명되어 있다. 세부적인 설정이 필요하다면 아래 문서를 읽어보는 것이 좋다.

 

https://goharbor.io/docs/2.7.0/install-config/

 

Harbor – Harbor Installation and Configuration

Harbor Installation and Configuration

goharbor.io

 

 

1) 사전 준비 작업

아래 Web docs에 Harbor 운영에 필요한 HW 스펙 및 Software, Network port 정보가 있다.

 

https://goharbor.io/docs/2.7.0/install-config/installation-prereqs/

 

특별한 내용이 없으니까, 간단하게 읽고 패쑤~

 

 

2) Harbor Installer 다운로드 받기

아래 Web docs에 Harbor installer를 다운로드할 수 있는 절차가 설명되어 있다.

특별한 내용이 없으니까, 설명되어 있는 명령을 따라서 수행하면 된다.

 

  - 다운로드에 대한 설명 : https://goharbor.io/docs/2.7.0/install-config/download-installer/

  - 설치 파일 저장소:  https://github.com/goharbor/harbor/releases/tag/v2.7.0  (이 페이지의 제일 밑에 있는 링크를 사용)

  - 실제 다운로드한 파일: https://github.com/goharbor/harbor/releases/download/v2.7.0/harbor-offline-installer-v2.7.0.tgz

 

나는 여러 설치 파일 중에서 'harbor-offline-installer-v2.7.0.tgz' 파일을 다운로드 받았다.

그리고 이 tgz 압축 파일을 풀어준다.  (파일을 설정하고 실행하는 것은 뒤에서 다시 설명함)

 

3) Harbor 서버에 HTTPS Access하기 위한 인증서 만들기

OpenSSL 명령 도구를 잘 사용하는 사람이라면, 아래 Web docs의 예제 명령어를 조금 수정해서 수행하면 된다.

그런데 SSL 지식이 없거나 OpenSSL 명령 도구가 생소한 사람이라면, SSL을 공부하고 아래 Web docs 예제를 따라가는 것이 좋다.

 

https://goharbor.io/docs/2.7.0/install-config/configure-https/

 

내 경우, 위 문서의 예제 명령에서 "yourdomain.com" 부분만 실제 나의 internet domain name으로 변경하고 인증서를 만들었다.

 

 

4) 설정 파일 harbor.yaml 작성하기

위에서 다운로드한 'harbor-offline-installer-v2.7.0.tgz' 파일에 harbor.yml.tmpl 파일이 있다.

이 설정 파일을 내 상황에 맞게 편집하면 되는데, 솔직히 항목이 많고 설명을 읽어도 아리송한 부분이 있다.

내 경우는 전체 설정 항목 중에서 아래 예시와 같이 몇 개만 수정했다.

 

##
## 설정 Template 파일을 복사
##

$  cp  harbor.yml.tmpl  harbor.yml



##
## 설정 파일을 편집하기
##

$  vi  harbor.yml

... 중간 생략 ...

hostname: registry.sejong-world.kr

... 중간 생략 ...

https:
  port: 443
  certificate: /data/cert/sejong-world.kr.crt
  private_key: /data/cert/sejong-world.kr.key

harbor_admin_password: MyNewPass56789


$

 

 

 

5) 설치 Script 실행하기

아래 Web docs에 설명이 잘 되어 있어서 따라 하기만 해도 잘 설치된다.

 

https://goharbor.io/docs/2.7.0/install-config/run-installer-script/

 

단, 설치하는 방식에 따라 여러 옵션을 사용할 수 있는데 나는 Chart repository 서비스도 사용할 거라서

아래와 같이  --with-chartmuseum 옵션을 추가했다.

이 옵션으로 설치하면, container image registry와 chart repository 서비스를 모두 사용할 수 있다.

 

$ sudo ./install.sh --with-chartmuseum

 

 

위 옵션을 지정한 것 외에는 나머지 모든 설치 및 기동 종료 절차는 Web docs와 완전히 동일하게 수행했다.

문서의 설명이 간단했고, 따라만 해도 에러없이 설치가 술술 잘 되어서 부연 설명할 부분이 없다.

 

##
## Harbor 서버 종료하기  
##  (옵션 '-v'는 데이터 볼륨을 삭제하라는 뜻)
##

$  docker compose down -v


##
## Harbor 서버 시작하기 
##  (옵션 '-d'는 백그라운드에서 데몬 프로세스로 구동하라는 뜻)
##
$ docker compose up -d

 

 

 

 

 

 

 


 

반응형

 


 


설정 및 테스트한 날짜:  2023년 2월 7일

 

Harbor Registry  같은 private container image registry에 kubernetes가 접근하려면 kubernetes의 secret 리소스를 생성해줘야 한다.

kubernetes에 image registry의 credential(자격 증명)을 어떻게 등록하는지 알아보자~

 

 


설정에 관한 자세한 설명을 보고 싶다면, 아래 문서를 참고.
  참고 문서:   Private registry에서 image 받아오기

 

 

프라이빗 레지스트리에서 이미지 받아오기

이 페이지는 프라이빗 컨테이너 레지스트리나 리포지터리로부터 이미지를 받아오기 위해 시크릿(Secret)을 사용하는 파드를 생성하는 방법을 보여준다. 현재 많은 곳에서 프라이빗 레지스트리가

kubernetes.io

 

 

Harbor registry에 접근할 수 있는 credential을 등록하기 위해 아래의 예제를 따라서 실행한다. 

## regcred 라는 이름의 secret 리소스를 생성한다.

$  kubectl create secret docker-registry regcred --docker-server=registry.sejong.cluster --docker-username=myusername --docker-password=mypassword

## 위에서 생성한 regcred secret 리소스 내용을 확인한다.

$  kubectl get secret regcred --output=yaml

apiVersion: v1
kind: Secret
metadata:
  ...
  name: regcred
  ...
data:
  .dockerconfigjson: eyJodHRwczovL2luZGV4L ... J0QUl6RTIifX0=
type: kubernetes.io/dockerconfigjson

$

## 참고 정보:
##   - .dockerconfigjson 필드는 registry 자격 증명 값의 base64 인코딩한 결과이다.
##   - .dockerconfigjson 필드의 값을 눈으로 볼 수 있도록 base64 decoding한다. (아래와 같이)

$ kubectl get secret regcred --output="jsonpath={.data.\.dockerconfigjson}" | base64 --decode

{"auths":{"registry.sejong.cluster":{"username":"myusername","password":"mypassword","auth":"c3R...zE2"}}}

$

## 위 출력 내용 중에서 'auth' 값을 아래와 같이 base64 decoding한다.

$  echo "c3R...zE2" | base64 --decode

myusername:mypassword

$

 

Kubernetes master node, worker node에 Insecure registry를 등록한다.

만약, 10개의 node가 있다면 10개 모두 동일하게 작업해줘야 한다. (아~  귀찮아 ㅠㅠ)

참고로, OKD 또는 Red Hat OCP를 사용한다면 아래처럼 kubernetes node에 직접 접속해서 수작업으로 설정하지 않아도 된다.
$  vi /etc/crio/crio.conf

...

insecure_registries = [
"registry.sejong.cluster"
]

...

$  systemctl restart crio

$  systemctl status crio

 

 

설정 작업이 끝났으면, 테스트~

 

아래와 같은 예제 Pod를 구동하여 Image pulling이 잘 되는지 확인한다.

 

 

$  cat my-pod-example.yaml

apiVersion: v1
kind: Pod
metadata:
  name: almighty
  labels:
    app: almighty
spec:
  terminationGracePeriodSeconds: 3
  containers:
  - name: almighty
    image: registry.sejong.cluster/scope/almighty:0.2.4
       
$   kubectl apply -f my-pod-example.yaml

pod/almighty created

$  kubectl get pod

NAME           READY   STATUS    RESTARTS   AGE
pod/almighty   1/1     Running   0          3s

$

 

Great !!!  잘 동작한다.

 

 


 

블로그 작성자: sejong.jeonjo@gmail.com

 

+ Recent posts