기존 클러스터 연결을 클러스터 인증서를 통해 연결합니다(사용 중단됨)
- GitLab 14.5에서 사용 중단됨.
기존의 Kubernetes 클러스터가 있는 경우, 해당 클러스터를 프로젝트, 그룹 또는 인스턴스에 추가하여 GitLab과 통합의 혜택을 누릴 수 있습니다.
사전 준비 작업
기존 클러스터를 GitLab에 추가하려면 아래의 사전 준비 사항을 확인하세요.
모든 클러스터
GitLab에 모든 클러스터를 추가하려면 다음이 필요합니다:
- GitLab.com 계정 또는 온프레미스 설치용 계정
- 그룹 수준 및 프로젝트 수준 클러스터에 대한 유지 관리자 역할
- 인스턴스 수준 클러스터의 관리자 영역에 대한 액세스
- Kubernetes 클러스터
-
kubectl
을 사용하여 클러스터에 대한 클러스터 관리 액세스
EKS, GKE, 온프레미스 및 다른 제공 업체에서 클러스터를 호스팅할 수 있습니다. 온프레미스 및 다른 제공 업체에서 클러스터를 호스팅하려면 EKS 또는 GKE 방법 중 하나를 사용하여 클러스터 설정을 직접 입력하세요.
경고:
GitLab은 arm64
클러스터를 지원하지 않습니다. 자세한 내용은 Helm Tiller fails to install on arm64
cluster를 참조하세요.
EKS 클러스터
기존의 EKS 클러스터를 추가하려면 다음이 필요합니다:
- 올바르게 구성된 Amazon EKS 클러스터의 워커 노드
- 액세스를 위해
kubectl
설치 및 구성
GKE 클러스터
기존의 GKE 클러스터를 추가하려면 다음이 필요합니다:
- 클러스터 역할 바인딩을 만들기 위한
container.clusterRoleBindings.create
권한. Google Cloud 문서를 참조하여 액세스를 부여합니다.
기존 클러스터 추가 방법
프로젝트, 그룹 또는 인스턴스에 Kubernetes 클러스터를 추가하려면 다음 단계를 수행하세요:
- 다음 위치로 이동합니다:
- 프로젝트의 작업 > Kubernetes 클러스터 페이지, 프로젝트 수준 클러스터의 경우.
- 그룹의 Kubernetes 페이지, 그룹 수준 클러스터의 경우.
- 인스턴스의 관리자 영역의 Kubernetes 페이지, 인스턴스 수준 클러스터의 경우.
- Kubernetes 클러스터 페이지에서 작업 드롭다운 목록에서 인증서로 연결 옵션을 선택합니다.
-
클러스터 연결 페이지에서 다음 정보를 입력합니다:
- Kubernetes 클러스터 이름 (필수) - 클러스터에 지정할 이름
- 환경 범위 (필수) - 연결된 환경에 대한 정보
-
API URL (필수) - GitLab이 Kubernetes API에 액세스하는 데 사용하는 URL입니다. Kubernetes은 여러 API를 노출합니다. 우리는 모두에 공통인 “기본” URL을 원합니다. 예를 들어,
https://kubernetes.example.com/api/v1
이 아닌https://kubernetes.example.com
과 같은 URL입니다.다음 명령을 실행하여 API URL을 가져옵니다:
kubectl cluster-info | grep -E 'Kubernetes master|Kubernetes control plane' | awk '/http/ {print $NF}'
-
CA 인증서 (필수) - 클러스터로 인증하기 위한 유효한 Kubernetes 인증서가 필요합니다. 우리는 기본적으로 생성된 인증서를 사용합니다.
-
kubectl get secrets
로 시크릿을 나열하고, 하나가default-token-xxxxx
와 비슷한 이름을 가질 것입니다. 아래에서 사용할 토큰 이름을 복사합니다. -
다음 명령을 실행하여 인증서를 가져옵니다:
kubectl get secret <비밀 이름> -o jsonpath="{['data']['ca\.crt']}" | base64 --decode
명령이 전체 인증서 체인을 반환하는 경우, 체인 파일에 다음 구조가 있는지 확인하세요:
-----BEGIN MY CERTIFICATE----- -----END MY CERTIFICATE----- -----BEGIN INTERMEDIATE CERTIFICATE----- -----END INTERMEDIATE CERTIFICATE----- -----BEGIN INTERMEDIATE CERTIFICATE----- -----END INTERMEDIATE CERTIFICATE----- -----BEGIN ROOT CERTIFICATE----- -----END ROOT CERTIFICATE-----
-
-
토큰 -
GitLab은 Kubernetes에 대해 서비스 토큰을 사용하여 인증하며, 이는 특정
namespace
에 범위가 지정됩니다. 사용된 토큰은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=<비밀번호>
참고: 기본 인증을 활성화하고 비밀번호 자격 증명을 Google Cloud 콘솔에서 얻을 수 있습니다.
출력:
serviceaccount "gitlab"가 생성되었습니다 clusterrolebinding "gitlab-admin"가 생성되었습니다
-
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 바이트 namespace: 11 바이트 token: <authentication_token>
-
- GitLab에서 관리되는 클러스터 - 이 옵션을 선택하여 GitLab이 이 클러스터의 이름 공간과 서비스 계정을 관리하도록 합니다. 자세한 내용은 관리되는 클러스터 섹션을 참조하세요.
-
프로젝트 이름 공간 (선택 사항) - 필수로 채우지 않아도 됩니다. 공란으로 두면 GitLab이 대신 생성합니다. 또한:
- 각 프로젝트는 고유한 이름 공간을 가져야 합니다.
- 프로젝트 이름 공간은 비밀번호와 같이 좀 더 넓은 권한을 가진 시크릿을 사용하는 경우 프로젝트의 이름 공간과 일치하지 않을 수 있습니다.
-
default
를 프로젝트 이름 공간으로 사용하지 않아야 합니다. - 프로젝트용으로 특별하게 만든 시크릿(일반적으로 제한된 권한이 있는)이 있다면, 시크릿의 이름 공간과 프로젝트 이름 공간이 같을 수 있습니다.
- Kubernetes 클러스터 추가 버튼을 선택합니다.
약 10분 후에 클러스터가 준비됩니다.
Role-Based Access Control (RBAC) 비활성화 (선택 사항)
GitLab 통합을 통해 클러스터를 연결할 때 클러스터가 RBAC(역할 기반 액세스 제어)가 활성화되었는지 여부를 지정할 수 있습니다. 이는 GitLab이 특정 작업을 수행하는 방식에 영향을 미칩니다. 생성 시 RBAC가 활성화된 클러스터 확인란을 선택하지 않았다면, GitLab은 클러스터와 상호 작용할 때 RBAC가 비활성화된 것으로 가정합니다. 그렇다면 통합이 올바르게 작동하려면 클러스터에서 RBAC를 비활성화해야 합니다.
경고: RBAC 비활성화는 클러스터에서 실행 중인 어떤 애플리케이션이나 클러스터에 인증할 수 있는 사용자가 전체 API 액세스 권한을 갖는 것을 의미합니다. 이는 보안 문제이며 원하는 바가 아닐 수 있습니다.
RBAC를 효과적으로 비활성화하려면 전체 액세스를 부여하는 전역 권한을 적용할 수 있습니다:
kubectl create clusterrolebinding permissive-binding \
--clusterrole=cluster-admin \
--user=admin \
--user=kubelet \
--group=system:serviceaccounts
문제 해결
인증 중 CA 인증서 및 토큰 오류
쿠버네티스 클러스터 연결 시 다음 오류가 발생하는 경우:
클러스터에서 인증하는 데 문제가 발생했습니다.
CA Certificate 및 Token이 유효한지 확인하십시오
서비스 토큰을 올바르게 붙여 넣었는지 확인하십시오. 일부 쉘은 서비스 토큰에 줄 바꿈을 추가하여 유효하지 않게 만들 수 있습니다. 토큰을 편집기에 붙여 넣고 추가된 공백을 제거하여 줄 바꿈이 없는지 확인하십시오.
또한 인증서가 유효하지 않은 경우 이 오류가 발생할 수 있습니다. 클러스터 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
입니다.