이 문서는 온프레미스 환경에서 gitlab 공식 helm을 설치하는 방법을 설명합니다. 2021.5기준 아직 온프레미스 공식 설치 메뉴얼은 공개되지 않았습니다.
1. gitlab helm소개
① gitlab helm은 gitlab 컴퍼넌트를 각각 분리했습니다. 설치 성공 후 pod목록을 보면 분리된 컴퍼넌트가 보입니다. 컴퍼넌트의 기능은 공식문서*에 설명되어 있습니다.
* gitlab 컴퍼넌트: https://docs.gitlab.com/ee/development/architecture.html#component-list
② 총 3개의 ingress가 자동설정됩니다.
- minio: gitlab 백업 저장소
- registry: gitlab cicd에 사용되는 것으로 생각됩니다.
- webservice-default: gitlab 웹 대시보드
③ 인증서를 cert-manager가 생성&관리해줍니다. let's encrypt에 인증서 갱신을 요청하는데, 저는 공인IP와 도메인이 없어 cert-manager를 사용하지 않았습니다. cert-manager를 사용하지 않은 경우 self-signed CA를 사용합니다.
④ 자동으로 external_url를 ingress url로 설정합니다. Omnibus버전은 external_url을 수동으로 설정해줘야 했었습니다.
⑤ 백업을 위한 객체 스토리지 minio설치를 합니다. public 클라우드에서 객체 스토리지를 사용하지 못한 경우를 위해 minio를 설치와 설정을 자동으로 합니다.
2. 설치
2.1 준비
① 쿠버네티스 클러스터, kubectl, helm3 설치
② 동적 프로비저닝 활성화: 2021.5 기준 persistentvoluem지정 기능 미지원
③ ingress-controller 설치와 loadbalancer type설정(metallb 설치가 필요합니다)
2.2 설치
① helm 저장소 추가를 추가합니다.
# helm repo add gitlab https://charts.gitlab.io/
# helm repo update
② override_values.yaml파일을 생성합니다.
global:
edition: ce ; 라이센스를 ce로 설정
hosts:
domain: choilab.com ; ingress 도메인 설정
externalIP: 192.168.25.135 ; nginx-ingress loadbalacner IP
gitlab:
name: gitlab.choilab.com
https: true
registry:
name: registry.choilab.com
https: true
minio:
name: minio.choilab.com
https: true
ingress:
configureCertmanager: false
class: "nginx"
tls:
enabled: true
certmanager: ; 공인IP, 도메인이 없어 cert-manager 컴퍼넌트 미사용
install: false
nginx-ingress: ; gitlab nginx-ingress 컴퍼넌트 미사용
enabled: false
③ gitlab helm 설치
namespace를 생성하고 helm install 명령어로 설치합니다.
# kubectl create ns cicd
# helm install -n cicd -f override_values.yaml gitlab gitlab/gitlab
④ 설치확인
정상적으로 설치되었으면 pod Status에 Running, Completed만 보여야됩니다.
외부에서 접속할 수 있는 ingress 주소는 3개입니다.
2.3 외부 접속 확인
① 온프레스환경에서 접속하기 위해서는 nginx-ingress loadbalancer IP와 ingress 도메인을 hosts에 설정해야 합니다.
② gitlab-webservice-default주소로 접속하면 gitlab 웹 대시보드가 보입니다.
- 아이디: root
- 비번: gitlab-gitlab-initial-root-password secret에 저장되어 있습니다.
kubectl get secret -n [namespace] gitlab-gitlab-initial-root-password -o jsonpath="{.data.password}" | base64 -d ; echo
③ gitlab-minio에 접속하면 minio 웹 대시보드 로그인화면이 나옵니다. access_key와 secret_key는 secret에서 확인가능합니다.
; access_key
# kubectl get secret -n [네임스페이스] [secret 리소스 이름] -ojsonpath='{.data.accesskey}' | base64 -d ; echo
; secret_key
# kubectl get secret -n [네임스페이스] [secret 리소스 이름] -ojsonpath='{.data.secretkey}' | base64 -d ; echo
④ registry ingress에 접속하면 화면에는 아무것도 보이지 않지만, 네트워크 디버거를 사용하면 200OK응답을 받은 것을 확인할 수 있습니다. registry ingress는 gitlab CI/CD를 사용하기 위해 ingress를 만든 것으로 생각됩니다.
3. Troubleshooting
helm설치 시 cert-manager를 사용하지 않았으므로 설치된 gitlab은 self-signed CA를 사용합니다. 즉, 공인인증기관에게 받은 CA가 아닙니다.
git client에서는 self-signed CA를 대상으로 git 명령어를 실행하면 거부합니다. 해결방법은 gitalb CA를 git client에 등록해주면 됩니다.
① gitlab CA인증서를 다운로드 받습니다
C:\Program Files\Git\mingw64\ssl\certs\ca-bundle.crt파일 맨 마지막줄에 다운로드 받은 gitlab인증서를 붙여넣습니다.
'전공영역 공부 기록' 카테고리의 다른 글
kubectl로 cluster admin 생성 (0) | 2021.05.09 |
---|---|
cert-manager로 self-signed 인증서 생성 (0) | 2021.05.09 |
프로메테우스 helm chart 설치 (1) | 2021.04.17 |
AWS OTP활성화 방법 (0) | 2021.04.05 |
테라폼으로 EC2 인스턴스 생성 (0) | 2021.02.18 |