쿠버네티스 클러스터에 클러스터 인증서로 배포(사라짐)

Tier: Free, Premium, Ultimate Offering: GitLab.com, Self-Managed
caution
이 기능은 GitLab 14.5에서 버전이 폐기되었습니다. 클러스터를 GitLab에 연결하려면 GitLab 에이전트를 사용하세요. 에이전트를 사용하여 배포하려면 CI/CD workflow를 사용하세요.

쿠버네티스 클러스터는 배포 작업의 대상이 될 수 있습니다. 만약

  • 클러스터가 GitLab과 통합되어 있다면 특수한 배포 변수가 작업에 사용 가능하며 구성이 필요하지 않습니다. kubectl 또는 helm과 같은 도구를 사용하여 즉시 클러스터와 상호 작용을 시작할 수 있습니다.
  • GitLab 클러스터 통합을 사용하지 않는다면, 여전히 클러스터에 배포할 수 있습니다. 하지만 작업에서 클러스터와 상호 작용하기 전에 CI/CD variables을 사용하여 쿠버네티스 도구를 구성해야 합니다.

배포 변수

배포 변수는 유효한 배포 토큰이름이 있는 gitlab-deploy-token에 요구됩니다. 또한 레지스트리에 액세스하려면 다음 명령어가 배포 작업 스크립트에 있어야 합니다.

  • 쿠버네티스 1.18+ 사용:

    kubectl create secret docker-registry gitlab-registry --docker-server="$CI_REGISTRY" --docker-username="$CI_DEPLOY_USER" --docker-password="$CI_DEPLOY_PASSWORD" --docker-email="$GITLAB_USER_EMAIL" -o yaml --dry-run=client | kubectl apply -f -
    
  • 쿠버네티스 1.18보다 낮은 버전 사용:

    kubectl create secret docker-registry gitlab-registry --docker-server="$CI_REGISTRY" --docker-username="$CI_DEPLOY_USER" --docker-password="$CI_DEPLOY_PASSWORD" --docker-email="$GITLAB_USER_EMAIL" -o yaml --dry-run | kubectl apply -f -
    

쿠버네티스 클러스터 통합은 이러한 배포 변수를 GitLab CI/CD 빌드 환경에서 배포 작업에 노출시킵니다. 배포 작업은 대상 환경을 정의하였습니다.

배포 변수 설명
KUBE_URL API URL과 동일합니다.
KUBE_TOKEN 환경 서비스 계정의 쿠버네티스 토큰입니다.
KUBE_NAMESPACE 프로젝트의 배포 서비스 계정과 관련된 네임스페이스. 형식은 <project_name>-<project_id>-<environment>입니다. GitLab에서 관리되는 클러스터의 경우, GitLab이 클러스터에 자동으로 일치하는 네임스페이스를 만듭니다. 만약 GitLab 12.2 버전 이전에 클러스터가 생성되었다면, 기본 KUBE_NAMESPACE<project_name>-<project_id>로 설정됩니다.
KUBE_CA_PEM_FILE PEM 데이터를 포함하는 파일의 경로입니다. 사용자 지정 CA 번들이 지정된 경우에만 존재합니다.
KUBE_CA_PEM (폐기됨) 원시 PEM 데이터입니다. 사용자 지정 CA 번들이 지정된 경우만 존재합니다.
KUBECONFIG 이 배포에 대한 kubeconfig를 포함한 파일의 경로입니다. 지정된 경우 CA 번들이 포함됩니다. 이 구성은 KUBE_TOKEN에서 정의된 동일한 토큰을 임베딩하므로 보통 이 변수만 필요합니다. 이 변수 이름은 kubectl에서 자동으로 선택되므로 kubectl을 사용할 때 명시적으로 참조할 필요가 없습니다.
KUBE_INGRESS_BASE_DOMAIN 이 변수는 클러스터당 도메인을 설정하는 데 사용할 수 있습니다. 자세한 내용은 클러스터 도메인을 참조하십시오.

사용자 정의 네임스페이스

쿠버네티스 통합은 프로젝트-환경별로 자동으로 생성된 네임스페이스와 함께 KUBECONFIG를 제공합니다. 이는 기본적으로 <prefix>-<environment> 형식의 프로젝트-환경별 네임스페이스를 사용합니다. 더 많은 정보는 배포 변수를 참조하십시오.

다음과 같은 몇 가지 방법으로 배포 네임스페이스를 사용자 정의할 수 있습니다:

  • 환경당 네임스페이스 선택: 환경당 네임스페이스와 프로젝트당 네임스페이스 중에서 선택할 수 있습니다. 환경당 네임스페이스는 기본 설정이며 제품 환경과 비-제품 환경 사이의 자원 혼합을 방지하므로 권장됩니다.
  • 프로젝트 수준 클러스터 사용 시, 네임스페이스 접두사를 추가로 사용자 정의할 수 있습니다. 환경당 네임스페이스를 사용하는 경우 배포 네임스페이스는 <prefix>-<environment>이나 그 외에는<prefix>입니다.
  • 관리되지 않는 클러스터에서는 자동으로 생성된 네임스페이스가 KUBECONFIG에 설정되나 사용자는 존재 여부를 보장해야합니다. .gitlab-ci.yml에서 environment:kubernetes:namespace`를 사용하여 이 값을 완전히 사용자 정의할 수 있습니다.

네임스페이스를 사용자 정의하는 경우 기존 환경은 클러스터 캐시를 지우기 전까지 현재의 네임스페이스에 연결됩니다.

자격 증명 보호

기본적으로 배포 작업을 생성할 수 있는 사람은 환경의 배포 작업에서 배포 작업에 대한 모든 CI/CD 변수에 액세스할 수 있습니다. 이는 환경의 서비스 계정에 사용 가능한 모든 비밀번호에 액세스할 수 있는 KUBECONFIG을 포함합니다. 프로덕션 자격 증명을 안전하게 유지하려면 다음 중 하나를 사용하는 것을 고려하십시오:

쿠버네티스 클러스터용 웹 터미널

쿠버네티스 통합은 환경웹 터미널을 지원합니다. 이것은 Docker와 Kubernetes에서 찾을 수 있는 exec 기능을 기반으로 하므로 기존 컨테이너에서 새로운 쉘 세션을 받을 수 있습니다. 이 통합을 사용하려면 위의 배포 변수를 사용하여 쿠버네티스로 배포해야하며 배포, 레플리카 집합 및 파드에 다음과 같이 주석을 달아야합니다.

  • app.gitlab.com/env: $CI_ENVIRONMENT_SLUG
  • app.gitlab.com/app: $CI_PROJECT_PATH_SLUG

$CI_ENVIRONMENT_SLUG$CI_PROJECT_PATH_SLUG 는 CI/CD 변수의 값입니다.

웹 터미널을 사용하려면 프로젝트 소유자 이거나 maintainer 권한이 있어야합니다. 지원은 환경의 첫 번째 파드의 첫 번째 컨테이너로 제한됩니다.

문제 해결

배포 작업이 시작되기 전에 GitLab은 배포 작업을 위해 다음을 생성합니다:

  • 네임스페이스.
  • 서비스 계정.

그러나 때때로 GitLab은 그것들을 생성하지 못할 수 있습니다. 그런 경우에는 다음과 같은 메시지와 함께 작업이 실패할 수 있습니다:

필요한 리소스를 성공적으로 생성하지 못하여이 작업이 실패했습니다.

네임스페이스 및 서비스 계정을 만들지 못했을 때 이 오류의 원인을 찾으려면 로그를 확인하세요.

실패의 원인은 다음과 같습니다:

  • GitLab에서 요구하는 cluster-admin 권한이 있는 토큰을 제공하지 않은 경우.
  • KUBECONFIG 또는 KUBE_TOKEN 배포 변수가 누락되었을 경우. 작업에 전달되려면 해당 배포 변수는 environment:name과 일치해야합니다. 작업에 environment:name이 설정되어 있지 않은 경우 쿠버네티스 자격 증명이 작업에 전달되지 않습니다.

참고: GitLab 12.0 버전 이전의 프로젝트-수준 클러스터는 이 오류를 일으킬 수있는 방식으로 구성될 수 있습니다. 네임스페이스 및 서비스 계정을 직접 관리하려는 경우 GitLab 관리 클러스터 옵션을 지워야합니다.