클러스터 인증서를 통한 기존 클러스터 연결 (더 이상 지원하지 않음)
- GitLab 14.5에서 더 이상 지원하지 않음.
기존 Kubernetes 클러스터가 있는 경우, 이를 프로젝트, 그룹 또는 인스턴스에 추가하고 GitLab과 통합의 이점을 누릴 수 있습니다.
전제 조건
기존 클러스터를 GitLab에 추가하기 위한 전제 조건은 아래를 참조하세요.
모든 클러스터
GitLab에 클러스터를 추가하려면 다음이 필요합니다:
- GitLab.com 계정 또는 자가 관리형 설치 계정 중 하나
- 그룹 수준 및 프로젝트 수준 클러스터에 대한 Maintainer 역할
- 인스턴스 수준 클러스터에 대한 Admin 영역 접근 권한
- Kubernetes 클러스터
-
kubectl
을 사용하여 클러스터에 대한 클러스터 관리 접근 권한
클러스터는 EKS, GKE,
온프레미스 및 기타 공급자에서 호스팅할 수 있습니다.
온프레미스 및 기타 공급자에서 호스팅하려면,
EKS 또는 GKE 방법을 사용하여 진행하고 클러스터의 설정을 수동으로 입력하세요.
EKS 클러스터
기존 EKS 클러스터를 추가하려면 다음이 필요합니다:
- 작업 노드가 올바르게 구성된 Amazon EKS 클러스터
- EKS 클러스터에 접근하기 위해
kubectl
설치 및 구성 - 계정의 토큰이 클러스터에 대한 관리자 권한을 가지고 있는지 확인
GKE 클러스터
기존 GKE 클러스터를 추가하려면 다음이 필요합니다:
- 클러스터 역할 바인딩을 만들기 위한
container.clusterRoleBindings.create
권한.
접근 권한을 부여하려면 Google Cloud 문서를 참조하세요.
기존 클러스터 추가 방법
Kubernetes 클러스터를 프로젝트, 그룹 또는 인스턴스에 추가하려면:
- 다음 중 하나로 이동하세요:
- 프로젝트의 운영 > Kubernetes 클러스터 페이지 (프로젝트 수준 클러스터의 경우).
- 그룹의 Kubernetes 페이지 (그룹 수준 클러스터의 경우).
- Admin 영역의 Kubernetes 페이지 (인스턴스 수준 클러스터의 경우).
-
Kubernetes 클러스터 페이지에서 Connect with a certificate 옵션을 Actions 드롭다운 목록에서 선택하세요.
-
Connect a cluster 페이지에서 세부 정보를 입력하세요:
- Kubernetes 클러스터 이름 (필수) - 클러스터에 부여할 이름.
- 환경 범위 (필수) - 이 클러스터에 대한 연관된 환경.
-
API URL (필수) -
GitLab이 Kubernetes API에 접근하는 데 사용하는 URL입니다. Kubernetes는 여러 API를 제공하며,
우리는 이 모든 API에 공통적인 “기본” URL을 원합니다.
예를 들어,https://kubernetes.example.com
이며https://kubernetes.example.com/api/v1
이 아닙니다.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 <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-----
-
-
토큰 -
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>
기본 인증을 켤 수 있으며 비밀번호 자격 증명은 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 관리 클러스터 - 이 옵션을 선택하면 GitLab이 이 클러스터의 네임스페이스 및 서비스 계정을 관리합니다.
추가 정보는 Managed clusters 섹션을 참조하세요. -
프로젝트 네임스페이스 (선택 사항) - 이 항목은 입력할 필요가 없습니다.
공란으로 두면 GitLab이 하나를 생성합니다. 또한:- 각 프로젝트에는 고유한 네임스페이스가 있어야 합니다.
- 프로젝트 네임스페이스는 비밀의 네임스페이스와 반드시 동일하지 않습니다.
더 넓은 권한을 가진 비밀(예: 기본default
비밀)을 사용하는 경우. - 프로젝트 네임스페이스로
default
를 사용해서는 안 됩니다. - 프로젝트를 위해 특정한 비밀을 누군가 생성한 경우, 일반적으로 제한된 권한으로 그 비밀의 네임스페이스와 프로젝트 네임스페이스가 동일할 수 있습니다.
- Add Kubernetes cluster 버튼을 선택하세요.
약 10분 후에 클러스터가 준비됩니다.
역할 기반 액세스 제어(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 인증서 및 토큰 오류
Kubernetes 클러스터에 연결하는 동안 다음 오류가 발생하는 경우:
클러스터 인증에 문제가 발생했습니다.
CA 인증서와 토큰이 유효한지 확인하십시오.
서비스 토큰을 올바르게 붙여넣고 있는지 확인하십시오. 일부 셸은 서비스 토큰에 줄 바꿈을 추가하여 유효성을 떨어뜨릴 수 있습니다. 편집기에 토큰을 붙여넣고 추가 공백을 제거하여 줄 바꿈이 없는지 확인하세요.
인증서가 유효하지 않은 경우에도 이 오류가 발생할 수 있습니다. 인증서의 주체 대체 이름이 클러스터의 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
입니다.