참고
Harbor 설치
하버 설치 - 헬름
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 재시작
성공 이미지
하버 이미지 보안스캔
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) 등 다른 컨테이너 레지스트리에도 동일하게 적용될 수 있습니다.