전공영역 공부 기록

공식 gitlab helm 설치

악분 2021. 5. 9. 04:32
반응형

이 문서는 온프레미스 환경에서 gitlab 공식 helm을 설치하는 방법을 설명합니다. 2021.5기준 아직 온프레미스 공식 설치 메뉴얼은 공개되지 않았습니다.

https://youtu.be/IXV-VB2xuzg

 

 

1. gitlab helm소개

① gitlab helm은 gitlab 컴퍼넌트를 각각 분리했습니다. 설치 성공 후 pod목록을 보면 분리된 컴퍼넌트가 보입니다. 컴퍼넌트의 기능은 공식문서*에 설명되어 있습니다.

* gitlab 컴퍼넌트: https://docs.gitlab.com/ee/development/architecture.html#component-list

gitlab helm이 설치한 컴퍼넌트

② 총 3개의 ingress가 자동설정됩니다.

- minio: gitlab 백업 저장소

- registry: gitlab cicd에 사용되는 것으로 생각됩니다.

- webservice-default: gitlab 웹 대시보드

gitlab helm이 설치한 ingress ​

 

 

③ 인증서를 cert-manager가 생성&관리해줍니다. let's encrypt에 인증서 갱신을 요청하는데, 저는 공인IP와 도메인이 없어 cert-manager를 사용하지 않았습니다. cert-manager를 사용하지 않은 경우 self-signed CA를 사용합니다.

self-signed CA 확인 ​

 

④ 자동으로 external_url를 ingress url로 설정합니다. Omnibus버전은 external_url을 수동으로 설정해줘야 했었습니다.

external_url 설정 확인

 

⑤ 백업을 위한 객체 스토리지 minio설치를 합니다. public 클라우드에서 객체 스토리지를 사용하지 못한 경우를 위해 minio를 설치와 설정을 자동으로 합니다.

minio 웹 대시보드 접속

 

2. 설치

2.1 준비

① 쿠버네티스 클러스터, kubectl, helm3 설치

동적 프로비저닝 활성화: 2021.5 기준 persistentvoluem지정 기능 미지원

③ ingress-controller 설치와 loadbalancer type설정(metallb 설치가 필요합니다)

nginx-ingress controller 서비스 타입 확인

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개입니다.

gitlab helm이 설치한 ingress

 

2.3 외부 접속 확인

① 온프레스환경에서 접속하기 위해서는 nginx-ingress loadbalancer IP와 ingress 도메인을 hosts에 설정해야 합니다.

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 웹 대시보드

 

③ 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

 

minio 웹 대시보드 ​

 

④ registry ingress에 접속하면 화면에는 아무것도 보이지 않지만, 네트워크 디버거를 사용하면 200OK응답을 받은 것을 확인할 수 있습니다. registry ingress는 gitlab CI/CD를 사용하기 위해 ingress를 만든 것으로 생각됩니다.

registry ingress 접속 확인

 

3. Troubleshooting

helm설치 시 cert-manager를 사용하지 않았으므로 설치된 gitlab은 self-signed CA를 사용합니다. 즉, 공인인증기관에게 받은 CA가 아닙니다.

git client에서는 self-signed CA를 대상으로 git 명령어를 실행하면 거부합니다. 해결방법은 gitalb CA를 git client에 등록해주면 됩니다.

git 명령어 실패

 

① gitlab CA인증서를 다운로드 받습니다

gitlab CA인증서 다운로드

 

C:\Program Files\Git\mingw64\ssl\certs\ca-bundle.crt파일 맨 마지막줄에 다운로드 받은 gitlab인증서를 붙여넣습니다.

git client에 gitlab CA인증서 등록

반응형