Harbor

Tier: Free, Premium, Ultimate Offering: GitLab.com, Self-managed, GitLab Dedicated
History

GitLab 프로젝트의 컨테이너 레지스트리로 Harbor를 사용할 수 있습니다.

Harbor는 Kubernetes 및 Docker와 같은 클라우드 네이티브 컴퓨팅 플랫폼에서 아티팩트를 관리하는 데 도움이 되는 오픈 소스 레지스트리입니다.

Harbor 통합은 GitLab CI/CD 및 컨테이너 이미지 저장소가 필요한 경우 도움이 될 수 있습니다.

전제 조건

Harbor 인스턴스에서 다음을 확인하세요:

  • 통합할 프로젝트가 생성되었는지 확인합니다.
  • 인증된 사용자가 Harbor 프로젝트에서 이미지를 가져오고 푸시하고 편집할 수 있는 권한을 가지고 있는지 확인합니다.

GitLab 구성

GitLab은 그룹 또는 프로젝트 수준에서 Harbor 프로젝트를 통합하는 것을 지원합니다. GitLab에서 다음 단계를 완료하세요:

  1. 왼쪽 사이드바에서 검색 또는 이동을 선택하고 프로젝트를 찾습니다.
  2. 설정 > 통합을 선택합니다.
  3. Harbor를 선택합니다.
  4. 통합 활성화 아래에서 활성 확인란을 선택합니다.
  5. Harbor 구성 정보를 제공합니다:
    • Harbor URL: 이 GitLab 프로젝트에 연결되는 Harbor 인스턴스의 기본 URL입니다. 예: https://harbor.example.net.
    • Harbor 프로젝트 이름: Harbor 인스턴스의 프로젝트 이름입니다. 예: testproject.
    • 사용자 이름: Harbor 인스턴스의 사용자 이름으로, 전제 조건의 요구 사항을 준수해야 합니다.
    • 암호: 사용자의 암호입니다.
  6. 변경 사항 저장을 선택합니다.

Harbor 통합이 활성화된 후:

  • CI/CD 사용을 위해 전역 변수 $HARBOR_USERNAME, $HARBOR_HOST, $HARBOR_OCI, $HARBOR_PASSWORD, $HARBOR_URL, $HARBOR_PROJECT가 생성됩니다.
  • 프로젝트 수준의 통합 설정은 그룹 수준의 통합 설정을 재정의합니다.

보안 고려 사항

Harbor API에 대한 요청 보안

Harbor 통합을 통해 각 API 요청에 대해 Harbor API에 대한 연결의 자격 증명으로 username:password 조합을 사용합니다. 다음은 안전한 사용을 위한 제안 사항입니다:

  • 연결하는 Harbor API에 TLS를 사용합니다.
  • 자격 증명에 대한 최소 권한 원칙( Harbor 접근)을 준수합니다.
  • 자격 증명에 대한 회전 정책을 갖습니다.

CI/CD 변수 보안

.gitlab-ci.yml 파일로 푸시된 악성 코드는 $HARBOR_PASSWORD를 포함한 변수를 침해할 수 있으며, 이를 제3자 서버로 전송할 수 있습니다. 자세한 내용은 CI/CD 변수 보안을 참조하세요.

CI/CD에서 Harbor 변수의 예

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)\"}}}" > /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}"
    # Helm 차트를 패키징합니다. 이는 `test` 디렉토리에 있는데,
    - helm package test
    # 채팅의 <차트 이름>-<차트 릴리스>.tgz로 생성됩니다.
    # 모든 빌드된 차트를 Harbor 저장소에 푸시할 수 있습니다.
    - helm push test-*.tgz ${HARBOR_OCI}/${HARBOR_PROJECT}