쿠버네티스 클러스터에 클러스터 인증서로 배포(사라짐)
- 버전이 폐기됨 GitLab 14.5에서.
쿠버네티스 클러스터는 배포 작업의 대상이 될 수 있습니다. 만약
- 클러스터가 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
을 포함합니다.
프로덕션 자격 증명을 안전하게 유지하려면 다음 중 하나를 사용하는 것을 고려하십시오:
- 제한된 환경 당 GitLab 관리 클러스터 및 환경당 네임스페이스 사용.
- 보호된 환경에 대한 환경별 클러스터. 동일한 클러스터가 여러 번 추가될 수 있으며 여러 제한된 서비스 계정이있을 수 있습니다.
쿠버네티스 클러스터용 웹 터미널
쿠버네티스 통합은 환경에 웹 터미널을 지원합니다.
이것은 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 관리 클러스터 옵션을 지워야합니다.