Search
Duplicate
📒

[Kubernetes Infra] 13-1. Harbor

상태
완료
수업
Kubernetes Infra
주제
4 more properties
참고

Harbor 설치

NOTE
Harbor는 온프레미스 환경에서 컨테이너 이미지 저장소로 활용되는 솔루션이다!
하버 실습 과제 목록
하버는 2020년 CNCF를 졸업한 프로젝트로서 다른 인큐베이팅 프로젝트에 비해 성숙도가 높아 다양한 고객 사례로 안전성과 사용성을 검증받았다. 하버에서 제공해주는 기능은 다음과 같다.
역할 기반 접근 제어
이미지 취약점 스캐닝
이미지 서명

하버 설치 - 헬름

NOTE
helm repo add harbor https://helm.goharbor.io helm repo update helm pull harbor/harbor --untar cp values.yaml my-values.yaml
Bash
복사
설치코드
type: loadBalancer auto: commonName: "harbor.myweb.io" loadBalancer: IP: "192.168.32.75" externalURL: https://harbor.myweb.io persistence: persistentVolumeClaim: registry: storageClass: "openebs-hostpath"
YAML
복사
my-values.yaml
# 기본 StorageClass 지정 kubectl patch storageclass openebs-hostpath -p '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"true"}}}' helm install harbor -f my-values.yaml . # 각 노드에 해줘야함 echo "192.168.32.75 harbor.myweb.io" | sudo tee -a /etc/hosts > /dev/null
Bash
복사
설치 완료

하버 이미지 업로드

NOTE
sudo docker pull nginx sudo docker pull busybox sudo docker images # docker sudo crictl images # containerd sudo docker tag busybox harbor.myweb.io/erp/busybox:0.1 sudo docker login harbor.myweb.io # 에러발생! (설정추가) sudo docker push harbor.myweb.io/erp/busybox:0.1
Bash
복사
베이스 이미지 pull
{ "insecure-registries": ["harbor.myweb.io"] }
JSON
복사
/etc/docker/daemon.json
sudo systemctl restart docker
Bash
복사
containerd/docker 재시작
성공!

하버 이미지 쿠버네티스 사용

NOTE
apiVersion: apps/v1 kind: Deployment metadata: name: busybox labels: app: busybox spec: replicas: 1 selector: matchLabels: app: busybox # POD label과 일치 template: metadata: labels: app: busybox # Selector label과 일치 spec: containers: - name: busybox # image: busybox image: harbor.myweb.io/erp/busybox:0.1 command: - "/bin/sh" - "-c" - "sleep inf"
YAML
복사
하버의 이미지를 가져온다
version = 2 [plugins."io.containerd.grpc.v1.cri".registry] [plugins."io.containerd.grpc.v1.cri".registry.mirrors] [plugins."io.containerd.grpc.v1.cri".registry.mirrors."docker.io"] endpoint = ["https://registry-1.docker.io"] [plugins."io.containerd.grpc.v1.cri".registry.configs] [plugins."io.containerd.grpc.v1.cri".registry.configs."harbor.myweb.io".tls] insecure_skip_verify = true
YAML
복사
/etc/containerd/config.toml/
sudo systemctl restart containerd sudo systemctl status containerd
Bash
복사
containerd 재시작
성공 이미지

하버 이미지 보안스캔

NOTE
이미지의 보안 취약점을 확인하기 위해서 하버에서는 Trivy이미지 스캐닝 도구를 사용해서 자동으로 보안 취약점을 확인할 수 있다.
Vulnerabilities
자동보안 활성화
sudo docker tag nginx harbor.myweb.io/erp/nginx:0.1 sudo docker push harbor.myweb.io/erp/nginx:0.1
Shell
복사

Harbor 레지스트리 인증을 위한 시크릿 생성 방법

NOTE
1.
Docker Config Json 생성: Docker 인증 정보를 포함하는 config.json 파일을 생성합니다. 이 파일은 Docker CLI를 사용하여 Harbor 레지스트리에 로그인할 때 생성되며, 일반적으로 사용자의 홈 디렉토리에 있는 .docker 폴더 내에 위치합니다.
2.
쿠버네티스 시크릿 생성: 생성된 config.json 파일을 바탕으로 쿠버네티스 시크릿을 생성합니다. 이 시크릿은 쿠버네티스 클러스터 내에서 Harbor 레지스트리에 접근할 때 사용됩니다.
bashCopy code kubectl create secret generic harbor-creds \ --from-file=.dockerconfigjson=path/to/your/config.json \ --type=kubernetes.io/dockerconfigjson
Shell
복사
여기서 harbor-creds는 생성할 시크릿의 이름이며, path/to/your/config.json은 실제 config.json 파일의 경로를 가리킵니다.
3.
시크릿 사용: 생성된 시크릿을 파드 정의 내에서 이미지를 가져올 때 참조하도록 설정합니다. 이를 통해 파드가 Harbor 레지스트리에서 안전하게 이미지를 가져올 수 있습니다.
yamlCopy code apiVersion: v1 kind: Pod metadata: name: example-pod spec: containers: - name: example-container image: your-harbor-registry.com/your-image imagePullSecrets: - name: harbor-creds
YAML
복사
이 과정을 통해, 쿠버네티스 클러스터는 Harbor 컨테이너 레지스트리에 저장된 이미지를 안전하게 가져오고, Harbor를 통해 컨테이너 이미지의 저장 및 배포를 관리할 수 있습니다. 이 방법은 Harbor 뿐만 아니라 Docker Hub, Google Container Registry(GCR), Amazon Elastic Container Registry(ECR) 등 다른 컨테이너 레지스트리에도 동일하게 적용될 수 있습니다.