클러스터 인증서를 통한 기존 클러스터 연결 (사용 중단)
GitLab v19.5Offering: GitLab.com, GitLab Self-Managed
요약
이 기능은 GitLab 14.5에서 사용 중단되었습니다. 기존 Kubernetes 클러스터가 있다면 프로젝트, 그룹 또는 인스턴스에 추가하여 GitLab 통합의 이점을 활용할 수 있습니다. 기존 클러스터를 GitLab에 추가하기 위한 사전 요구사항은 다음과 같습니다.
이 기능은 GitLab 14.5에서 사용 중단되었습니다. 클러스터를 GitLab에 연결하려면 대신 Kubernetes용 GitLab 에이전트를 사용합니다.
기존 Kubernetes 클러스터가 있다면 프로젝트, 그룹 또는 인스턴스에 추가하여 GitLab 통합의 이점을 활용할 수 있습니다.
사전 요구사항#
기존 클러스터를 GitLab에 추가하기 위한 사전 요구사항은 다음과 같습니다.
모든 클러스터#
GitLab에 클러스터를 추가하려면 다음이 필요합니다.
- GitLab.com 또는 GitLab Self-Managed 인스턴스의 계정.
- 그룹 수준 및 프로젝트 수준 클러스터에 대한 Maintainer 권한.
- 인스턴스 수준 클러스터에 대한 Admin 영역 접근 권한.
- Kubernetes 클러스터.
kubectl을 사용한 클러스터 관리자 접근 권한.
클러스터는 EKS, GKE, 온프레미스 및 기타 공급자에서 호스팅할 수 있습니다. 온프레미스 및 기타 공급자에서 호스팅하려면 EKS 또는 GKE 방식의 안내를 따라 클러스터 설정을 수동으로 입력합니다.
GitLab은 arm64 클러스터를 지원하지 않습니다. 자세한 내용은 이슈
arm64 클러스터에서 Helm Tiller 설치 실패를
참고합니다.
EKS 클러스터#
기존 EKS 클러스터를 추가하려면 다음이 필요합니다.
- 워커 노드가 올바르게 구성된 Amazon EKS 클러스터.
- EKS 클러스터에 접근할 수 있도록 설치 및 구성된
kubectl. - 해당 계정의 토큰이 클러스터에 대한 관리자 권한을 가지고 있는지 확인합니다.
GKE 클러스터#
기존 GKE 클러스터를 추가하려면 다음이 필요합니다.
- 클러스터 역할 바인딩을 생성할 수 있는
container.clusterRoleBindings.create권한. 접근 권한 부여는 Google Cloud 문서를 참고합니다.
기존 클러스터를 추가하는 방법#
프로젝트, 그룹 또는 인스턴스에 Kubernetes 클러스터를 추가하려면 다음 단계를 수행합니다.
-
다음 위치로 이동합니다.
- 프로젝트 수준 클러스터는 프로젝트의 [cloud-gear] Operate > Kubernetes clusters 페이지.
- 그룹 수준 클러스터는 그룹의 [cloud-gear] Kubernetes 페이지.
- 인스턴스 수준 클러스터는 Admin 영역의 Kubernetes 페이지.
-
Kubernetes clusters 페이지에서 Actions 드롭다운 목록의 Connect with a certificate 옵션을 선택합니다.
-
Connect a cluster 페이지에서 세부 정보를 입력합니다.
-
Kubernetes cluster name(필수) - 클러스터에 지정할 이름입니다.
-
Environment scope(필수) - 이 클러스터에 연결된 환경입니다.
-
API URL(필수) - GitLab이 Kubernetes API에 접근할 때 사용하는 URL입니다. Kubernetes는 여러 API를 노출합니다. 모든 API에 공통으로 적용되는 "기본" URL을 사용합니다. 예를 들어
https://kubernetes.example.com/api/v1이 아니라https://kubernetes.example.com입니다.다음 명령을 실행하여 API URL을 가져옵니다.
kubectl cluster-info | grep -E 'Kubernetes master|Kubernetes control plane' | awk '/http/ {print $NF}' -
CA certificate(필수) - 클러스터에 인증하려면 유효한 Kubernetes 인증서가 필요합니다. 기본으로 생성된 인증서를 사용합니다.
-
kubectl get secrets로 시크릿을 나열하면 그중 하나가default-token-xxxxx와 비슷한 이름을 가집니다. 아래에서 사용할 수 있도록 그 토큰 이름을 복사합니다. -
다음 명령을 실행하여 인증서를 가져옵니다.
kubectl get secret <secret name> -o jsonpath="{['data']['ca\.crt']}" | base64 --decode명령이 전체 인증서 체인을 반환하면 체인 하단의 루트 CA 인증서와 중간 인증서를 모두 복사해야 합니다. 체인 파일의 구조는 다음과 같습니다.
-----BEGIN MY CERTIFICATE----- -----END MY CERTIFICATE----- -----BEGIN INTERMEDIATE CERTIFICATE----- -----END INTERMEDIATE CERTIFICATE----- -----BEGIN INTERMEDIATE CERTIFICATE----- -----END INTERMEDIATE CERTIFICATE----- -----BEGIN ROOT CERTIFICATE----- -----END ROOT CERTIFICATE-----
-
-
Token - GitLab은 특정
namespace로 범위가 한정된 서비스 토큰을 사용하여 Kubernetes에 인증합니다. 사용하는 토큰은cluster-admin권한을 가진 서비스 계정에 속해야 합니다. 이 서비스 계정을 생성하려면 다음 단계를 수행합니다.-
다음 내용으로
gitlab-admin-service-account.yaml파일을 생성합니다.apiVersion: v1 kind: ServiceAccount metadata: name: gitlab namespace: kube-system --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: gitlab-admin roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: cluster-admin subjects: - kind: ServiceAccount name: gitlab namespace: kube-system -
서비스 계정과 클러스터 역할 바인딩을 클러스터에 적용합니다.
kubectl apply -f gitlab-admin-service-account.yaml클러스터 수준 역할을 생성하려면
container.clusterRoleBindings.create권한이 필요합니다. 이 권한이 없다면 대신 기본 인증을 활성화한 다음 관리자 자격으로kubectl apply명령을 실행할 수 있습니다.kubectl apply -f gitlab-admin-service-account.yaml --username=admin --password=<password>[!note] 기본 인증은 Google Cloud Console에서 활성화할 수 있으며 비밀번호 자격 증명도 여기에서 확인할 수 있습니다.
출력은 다음과 같습니다.
serviceaccount "gitlab" created clusterrolebinding "gitlab-admin" created -
gitlab서비스 계정의 토큰을 가져옵니다.kubectl -n kube-system describe secret $(kubectl -n kube-system get secret | grep gitlab | awk '{print $1}')출력에서
<authentication_token>값을 복사합니다.Name: gitlab-token-b5zv4 Namespace: kube-system Labels: <none> Annotations: kubernetes.io/service-account.name=gitlab kubernetes.io/service-account.uid=bcfe66ac-39be-11e8-97e8-026dce96b6e8 Type: kubernetes.io/service-account-token Data ==== ca.crt: 1025 bytes namespace: 11 bytes token: <authentication_token>
-
-
GitLab-managed cluster - 이 클러스터의 네임스페이스와 서비스 계정을 GitLab이 관리하도록 하려면 선택된 상태로 둡니다. 자세한 내용은 관리형 클러스터 섹션을 참고합니다.
-
Project namespace(선택 사항) - 반드시 입력할 필요는 없습니다. 비워 두면 GitLab이 대신 생성합니다. 그 밖에 다음 사항을 참고합니다.
- 각 프로젝트는 고유한 네임스페이스를 가져야 합니다.
default의 시크릿처럼 더 넓은 권한을 가진 시크릿을 사용하는 경우, 프로젝트 네임스페이스가 반드시 시크릿의 네임스페이스와 같지는 않습니다.- 프로젝트 네임스페이스로
default를 사용하지 않아야 합니다. - 사용자 또는 다른 누군가가 해당 프로젝트만을 위해, 대개는 제한된 권한으로 시크릿을 생성했다면 시크릿의 네임스페이스와 프로젝트 네임스페이스가 같을 수 있습니다.
-
-
Add Kubernetes cluster 버튼을 선택합니다.
약 10분이 지나면 클러스터가 준비됩니다.
역할 기반 접근 제어(RBAC) 비활성화(선택 사항)#
GitLab 통합을 통해 클러스터를 연결할 때 해당 클러스터의 RBAC 활성화 여부를 지정할 수 있습니다. 이 설정은 특정 작업에서 GitLab이 클러스터와 상호 작용하는 방식에 영향을 줍니다. 생성 시점에 RBAC-enabled cluster 체크박스를 선택하지 않았다면 GitLab은 클러스터와 상호 작용할 때 해당 클러스터에서 RBAC가 비활성화되어 있다고 가정합니다. 이 경우 통합이 올바르게 동작하도록 클러스터에서 RBAC를 비활성화해야 합니다.

RBAC를 비활성화하면 클러스터에서 실행 중인 모든 애플리케이션과 클러스터에 인증할 수 있는 모든 사용자가 전체 API에 접근하게 됩니다. 이는 보안상 우려 사항이며, 바람직하지 않을 수 있습니다.
RBAC를 실질적으로 비활성화하려면 전체 접근을 부여하는 전역 권한을 적용합니다.
kubectl create clusterrolebinding permissive-binding \
--clusterrole=cluster-admin \
--user=admin \
--user=kubelet \
--group=system:serviceaccounts
문제 해결#
인증 중 발생하는 CA 인증서 및 토큰 오류#
Kubernetes 클러스터를 연결하는 중 다음 오류가 발생하는 경우가 있습니다.
There was a problem authenticating with your cluster.
Please ensure your CA Certificate and Token are valid
서비스 토큰을 올바르게 붙여 넣었는지 확인합니다. 일부 셸은 서비스 토큰에 줄바꿈을 추가하여 토큰을 무효화합니다. 토큰을 편집기에 붙여 넣고 추가된 공백을 제거하여 줄바꿈이 없는지 확인합니다.
인증서가 유효하지 않은 경우에도 이 오류가 발생할 수 있습니다. 인증서의 주체 대체 이름에 클러스터 API의 올바른 도메인이 포함되어 있는지 확인하려면 다음 명령을 실행합니다.
echo | openssl s_client -showcerts -connect kubernetes.example.com:443 -servername kubernetes.example.com 2>/dev/null |
openssl x509 -inform pem -noout -text
-connect 인수는 host:port 조합을 받습니다. 예를 들어 https://kubernetes.example.com은 kubernetes.example.com:443 이 됩니다. -servername 인수는 URI 없는 도메인을 받습니다. 예를 들면 kubernetes.example.com 입니다.