k8s위에서 Harbor 설정(ingress, Helm)

이현우·2022년 4월 29일
1

쿠버네티스

목록 보기
10/11

Helm을 이용한 Harbor 설치
expose.type에서 ingress를 이용하였음.

1. 사전 준비

2. 설치

크게 나눠보면 4가지 방법이 있다.
1. helm 레포지토리에서 수정 없이 인스톨 하여 사용하는 방법 (비추천)
2. helm 레포지토리에서 인스톨 명령어에 수정사항을 추가하여 사용하는 방법 (간단한 수정 내용에는 편함)
3. 수정이 필요한 부분만 yaml파일을 작성하여 오버라이드하는 방법 (4가지 방법 중 수정 및 적용이 가장 편하다 생각됨)
4. 전체 파일을 다운로드 받아 values.yaml파일을 수정하여 사용하는 방법 (이 포스트에서 사용한 방법)
위의 네 가지 방법 모두 values.yaml파일의 구조를 먼저 파악하는게 우선!

2.1 repo등록 및 압축파일 다운로드 및 NameSpace 생성

$ helm repo add harbor https://helm.goharbor.io

# 압축파일 다운로드
$ helm fetch harbor/harbor

# 압축 파일 해제
$ tar zxvf harbor-1.6.0.tgz

# namespace 생성
$ kubectl create ns harbor

2.2 values.yaml 수정

기본적으로 harbor의 values.yaml 파일의 주석은 설명이 잘 되어 있다.

  • expose.type : ingress로 설정
  • expose.ingress 수정
    • expose.ingress.hosts.core에 해당하는 부분에 사용할 도메인 명을 설정해주면 된다.
    • notary 역시 마찬가지
    • className은 nginx를 사용한다(ingress-nginx-contoller를 설치했기 때문)
    • expose.type을 ingress로 설정하면 설치할 때 ingress 부분의 설정이 들어간다.
    • 즉, expose의 clusterIP부분이나 nodePort, loadBalancer는 사용되지 않는다.

  • externalURL 수정
    • expose.ingress.hosts.core에 작성한 도메인에 https:// 를 붙여 작성해준다.
  • valuse.yaml 파일에서 수정할 부분은 생각보다 많지 않다. 또한 주석으로 해당 코드가 어떤 작업을 하는지나 언제 설정해야 하는지에 대해 잘 설명되어 있기에 천천히 읽어보며 필요한 부분을 수정해가도록 하자.
  • 만약 외부 접속이 안된다면 수정한 부분의 문제라기 보다 hosts의 등록이나 ingress-controller, metallb등 다른 서비스의 충돌 등에 문제일 확률이 높다.

2.3 설치 및 확인

  • 설치
$ helm install harbor -f values.yaml . -n harbor
  • ingress 확인
$ kubectl get ingress -n harbor

  • pods 확인
$ kubectl get pods -n harbor

2.4 hosts 등록

  • host 등록
127.0.0.1 minio.localhost.com
  • 해당 내용을 host에 등록해야함
  • host 파일은 C:\Windows\System32\drivers\etc 경로에 있음
  • 해당 경로에 수정을 하기 위해선 관리자 권한이 필요
  • 해당 파일을 복사한 뒤 다른 폴더에서 편집기(vi, vs code 등)를 통해 수정하여 붙여넣기 or 덮어쓰기 식으로 사용하면 편함.

3. 외부 접속

3.1 도메인 접속

  • 직접 정한 도메인(저는 https://harbor.localhost.com)으로 접속
    • 설정을 바꾸지 않았기에 초기 아이디는 admin, 비밀번호는 Harbor12345 이다.

  • 접속 완료!

4. 이슈

  • pods와 ingress모두 정상으로 작동하고 있었는데 막상 외부에서 도메인으로 접속하려니 404 not Found가 뜨는 문제가 있었다.
  • 라우팅이 제대로 되지 않는 문제 같아서 values.yaml파일을 열심히 수정해 보았지만 해결되지 않았다.
  • 문제는 ingress-controller 쪽에 있었고 기존에 설치되어 사용되지 않던 loadBalancer 타입의 treafik을 삭제해주고, ingress-nginx-controller를 재설치(기존의 ingress-nginx-controller가 NodePort타입으로 되어있던것도 문제였던거 같긴 하다.) 해주었더니 정상 작동 하였다.
profile
GitHub - https://github.com/jenu8628

0개의 댓글