Minikube에서 제공하는 Registry는 개발할 때 가볍게 사용하기에는 무리가 없지만, 개발이 복잡해지거나 관리해야 할 컨테이너가 많아지면 불편해지기 시작한다. 물론 클라우드 플랫폼을 서비스하는 회사들이 제공하는 컨테이너 레지스트리를 사용하면 기능면에서 편리하지만 이것저것 막 테스트 하기에는 비용 지출이 좀 생긴다. 이때 고려해 볼 만한 제품이 브로드콤에서 제공하는 Harbor이다.
Harbor는 도커에 설치하거나 쿠버네티스에 설치해서 사용하는데, 이번에는 지난번에 설치해 놓은 minikube에 설치해서 사용할 수 있도록 만들어 보기로 했다.
harbor registry도 default namespace를 사용하면 pod목록을 표시하면 나타나기 때문에 kube-xxx처럼 별도의 namespace를 만들고 생성한다.
kubectl create namespace harbor
쿠버네티스로 설치하기 위한 Helm Chart를 가져온다. 먼저 harbor용 helm 리포지토리를 추가하고 helm chart를 내려 받는다.
helm repo add harbor https://helm.goharbor.io
helm fetch harbor/harbor --untar
Harbor 공홈에 나와 있듯이 Helm을 사용해서 설치하기 위해서는 몇 가지 값을 변경해야 한다. harbor폴더로 가서 values.yaml 파일을 열고
나는 내 노트북에서 사용할 예정이므로 https를 사용하지 않기 위해 tls를 disable 했고
# values.yaml
...
# the port must be included in the command when pulling/pushing images.
# Refer to https://github.com/goharbor/harbor/issues/5291 for details.
enabled: false
# The source of the tls certificate. Set as "auto", "secret"
...
https를 사용하지 않으면 삭제하라고 한 ssl-redirect도 다 코멘트로 막고,
# values.yaml
...
# note different ingress controllers may require a different ssl-redirect annotation
# for Envoy, use ingress.kubernetes.io/force-ssl-redirect: "true" and remove the nginx lines below
# ingress.kubernetes.io/ssl-redirect: "true"
ingress.kubernetes.io/proxy-body-size: "0"
# nginx.ingress.kubernetes.io/ssl-redirect: "true"
nginx.ingress.kubernetes.io/proxy-body-size: "0"
# ingress-specific labels
labels: {}
...
내부 도메인명을 임의로 "harbor.internal"로 하고 "C:\Windows\System32\drivers\etc\hosts" 파일에 추가하고,
# C:\Windows\System32\drivers\etc\hosts
...
192.168.59.103 harbor.internal
values.yaml에 해당 도메인으로 모두 수정하고,
# values.yaml
...
ingress:
hosts:
core: harbor.internal
# core: core.harbor.domain
# set to the type of ingress controller if it has specific requirements.
# leave as `default` for most ingress controllers.
...
#
# If Harbor is deployed behind the proxy, set it as the URL of proxy
externalURL: http://harbor.internal
# The persistence is enabled by default and a default StorageClass
...
네트워크를 열기 위한 설정을 NodePort를 제외하고 LoadBalaner, ClusterIP는 코멘트로 막고,
# values.yaml
...
# loadBalancer:
# # The name of LoadBalancer service
# name: harbor
# # Set the IP if the LoadBalancer supports assigning IP
# IP: ""
# ports:
# # The service port Harbor listens on when serving HTTP
# httpPort: 80
# # The service port Harbor listens on when serving HTTPS
# httpsPort: 443
# # Annotations on the loadBalancer service
# annotations: {}
# # loadBalancer-specific labels
# labels: {}
# sourceRanges: []
...
helm install을 실행했다.
helm install harbor -f values.yaml . -n harbor
설치가 끝나고 ingress와 service를 확인해 보니
로 나와 registry는 외부 Port가 할당되지 않아 PortForard를 해줘야 하는 것 같이 보인다. 먼저 harbor.internal을 브라우저로 열어 보면
잘 연결이 되고, 5000번 포트는 연결이 되지 않는 것을 확인하고 PortForwarding을 해 주고 나니 연결이 되었다.
kubectl port-forward -n harbor service/harbor-registry 5000:5000
localhost:5000/v2/_catalog를 요청하니 Unauthorized에러가 나와 스택오버플로를 찾아보니, harbor에서는 /v2부터 아래와 같이 연결을 해야 한다고 한다.
TOKEN=$(echo -n '<your username>:<your password>' | base64)
curl -v -k -H "Authorization: Basic $TOKEN" http://<harbor registry server>/v2/_catalog
'윈도우 개발환경' 카테고리의 다른 글
FastAPI를 사용한 API 백엔드 개발; 2. Vagrant로 VirtualBox 서버 추가 (4) | 2024.11.28 |
---|---|
우분투 서버를 우분투 데스크탑으로 변환 후 네트워크로 연결 (0) | 2024.11.26 |
윈도우 쿠버네티스 개발환경 ; 2. MySQL 배포하기 (1) | 2024.11.17 |
엔비디아 Jetson Xavier; 5. VNC로 쉽게 연결하기 (1) | 2024.11.11 |
React Native로 PDF Viewer 앱 만들기; 1. React Native 개발 환경 설치 (2) | 2024.11.10 |