하버
하버를 GitLab 프로젝트의 컨테이너 레지스트리로 사용할 수 있습니다.
하버는 Kubernetes 및 Docker와 같은 클라우드 네이티브 컴퓨팅 플랫폼 전반에 걸쳐 아티팩트를 관리하는 데 도움이 되는 오픈 소스 레지스트리입니다.
하버 통합은 GitLab CI/CD와 컨테이너 이미지 리포지토리가 필요할 경우 도움을 줄 수 있습니다.
필수 조건
하버 인스턴스에서 다음을 확인하십시오:
- 통합할 프로젝트가 생성되었습니다.
- 인증된 사용자가 하버 프로젝트에서 이미지를 풀, 푸시 및 편집할 수 있는 권한이 있습니다.
GitLab 구성
GitLab은 그룹 또는 프로젝트 수준에서 하버 프로젝트의 통합을 지원합니다. GitLab에서 다음 단계를 완료하십시오:
- 왼쪽 사이드바에서 검색 또는 이동을 선택하고 프로젝트를 찾습니다.
- 설정 > 통합을 선택합니다.
- 하버를 선택합니다.
- 통합 활성화에서 활성 체크박스를 선택합니다.
- 하버 구성 정보를 제공합니다:
-
하버 URL: 이 GitLab 프로젝트와 연결된 하버 인스턴스의 기본 URL입니다. 예:
https://harbor.example.net
. -
하버 프로젝트 이름: 하버 인스턴스의 프로젝트 이름입니다. 예:
testproject
. - 사용자 이름: 하버 인스턴스에서의 사용자 이름으로, 필수 조건의 요구 사항을 충족해야 합니다.
- 비밀번호: 사용자 이름의 비밀번호입니다.
-
하버 URL: 이 GitLab 프로젝트와 연결된 하버 인스턴스의 기본 URL입니다. 예:
- 변경 사항 저장을 선택합니다.
하버 통합이 활성화된 후:
- CI/CD 사용을 위한 전역 변수
$HARBOR_USERNAME
,$HARBOR_HOST
,$HARBOR_OCI
,$HARBOR_PASSWORD
,$HARBOR_URL
, 및$HARBOR_PROJECT
가 생성됩니다. - 프로젝트 수준 통합 설정이 그룹 수준 통합 설정을 덮어씁니다.
보안 고려사항
하버 API에 대한 요청 보안
하버 통합을 통한 각 API 요청에 대해 하버 API와의 연결 자격 증명은
username:password
조합을 사용합니다. 다음은 안전한 사용을 위한 권장 사항입니다:
- 연결하는 하버 API에서 TLS를 사용하십시오.
- 자격 증명으로 하버에 대한 최소 권한 원칙을 따르십시오.
- 자격 증명에 대한 회전 정책을 마련하십시오.
CI/CD 변수 보안
.gitlab-ci.yml
파일에 악의적인 코드가 푸시되면
$HARBOR_PASSWORD
를 포함한 변수가 손상될 수 있으며 제3자 서버로 전송될 수 있습니다. 자세한 내용은
CI/CD 변수 보안을 참조하십시오.
CI/CD에서 하버 변수 사용 예시
kaniko로 Docker 이미지 푸시하기
자세한 내용은 kaniko를 사용하여 Docker 이미지 빌드하기를 참조하십시오.
docker:
stage: docker
image:
name: gcr.io/kaniko-project/executor:debug
entrypoint: ['']
script:
- mkdir -p /kaniko/.docker
- echo "{\"auths\":{\"${HARBOR_HOST}\":{\"auth\":\"$(echo -n ${HARBOR_USERNAME}:${HARBOR_PASSWORD} | base64 -w 0)\"}}}" > /kaniko/.docker/config.json
- >-
/kaniko/executor
--context "${CI_PROJECT_DIR}"
--dockerfile "${CI_PROJECT_DIR}/Dockerfile"
--destination "${HARBOR_HOST}/${HARBOR_PROJECT}/${CI_PROJECT_NAME}:${CI_COMMIT_TAG}"
rules:
- if: $CI_COMMIT_TAG
OCI 레지스트리에 Helm 차트 푸시하기
Helm은 기본적으로 OCI 레지스트리를 지원합니다. OCI는 Harbor 2.0 및 이후 버전에서 지원됩니다.
OCI에 대한 자세한 내용은 Helm의 블로그와 문서를 참조하세요.
helm:
stage: helm
image:
name: dtzar/helm-kubectl:latest
entrypoint: ['']
variables:
# OCI 지원 활성화 (Helm v3.8.0 이후로는 필요하지 않음)
HELM_EXPERIMENTAL_OCI: 1
script:
# Helm 레지스트리에 로그인합니다.
- helm registry login "${HARBOR_URL}" -u "${HARBOR_USERNAME}" -p "${HARBOR_PASSWORD}"
# `test` 디렉토리에 있는 Helm 차트를 패키징합니다.
- helm package test
# 생성된 helm 차트는 <chart name>-<chart release>.tgz 형태입니다.
# 모든 빌드 차트를 Harbor 리포지토리에 푸시할 수 있습니다.
- helm push test-*.tgz ${HARBOR_OCI}/${HARBOR_PROJECT}