CI/CD 구축하기(2)-Helm Chart + GCP DNS, secret manager + ssl certificate(Gitlab-ci + Helm + ArgoCD, GCP kubernetes 등)

Roy Jung·2024년 9월 20일
0
post-thumbnail
post-custom-banner

목표

앞선 게시물에서 등장한 Helm chart manifest의 예시를 보면서 helm install로 배포할 수 있는 상태로 만드는 과정을 살펴보자. 최종적으는 다음 게시물에서 helm 명령어가 아니라 ArgoCD를 통해 sync를 통해 배포할 예정이다.

  • Helm chart manifest를 작성해서 Backend 서비스를 GCP k8s engine에 배포할 수 있도록 한다.
  • Domain에 HTTPS(SSL 인증서)까지 적용한다.
  • Env variable을 사용하기 위해 GCP secret manager 서비스를 사용하도록 한다.
  • gcp k8s에 배포하기 위한 helm, gcloud 명령어들

완성한 소스코드는 https://github.com/HoneyJung/helm-gcp-example에 있다.

파일 설명

exterenalSecret.yaml, externalSecretServiceAccount.yaml, secretStore는 아래에서 더 자세히 설명합니다.

├── Chart.yaml
├── templates
│   ├── backendConfig.yaml - timeout을 위한 것. 필수 아님
│   ├── deployment.yaml
│   ├── exterenalSecret.yaml
│   ├── externalSecretServiceAccount.yaml
│   ├── frontendConfig.yaml - http => https로 redirect하기 위함. 이것도 필수 아님.
│   ├── ingress.yaml
│   ├── managedCertificate.yaml => ssl 인증서를 다루기 위한 파일. 아래에서 더 자세히 설명 
│   ├── secretStore.yaml
│   └── service.yaml - 
├── values-dev.yaml - 환경 별로 사용되는 변수는 분리해서 다룬다.
└── values.yaml - 변수는 따로 저장한다.

Prerequisite

  • GCP를 사용한다면 cluster를 만들 때 Workload Identity를 enable 해줘야한다. 이는 GCP의 service account(gsa)의 권한을 K8s service account(ksa)에게 부여하기 위해 쓰인다.
  • external-secret을 사용하기 위한 일종의 라이브러리 설치라고 보면 된다.
gcloud container clusters update opuslab-be-dev \
    --update-addons ConfigConnector=ENABLED --zone us-central1-c

helm install external-secrets \
   external-secrets/external-secrets \
    -n external-secrets \
    --create-namespace 
  • gsa => ksa 권한 바인딩. 이 명령어를 사용하기 전에 gcp에서 gsa를 생성하고 아래 두 권한이 부여되어 있어야 한다.
gcloud iam service-accounts add-iam-policy-binding \
	--role roles/iam.workloadIdentityUser \
	--member "serviceAccount:lgair-aihub.svc.id.goog[opuslab-be-main/opuslab-be-main]" \
	external-secret@lgair-aihub.iam.gserviceaccount.com


gcloud iam service-accounts add-iam-policy-binding \
	--role roles/iam.serviceAccountTokenCreator \
   	--member "serviceAccount:lgair-aihub.svc.id.goog[opuslab-be-main/opuslab-be-main]" \
	external-secret@lgair-aihub.iam.gserviceaccount.com
  • gcp console에서 secret manager에서 secret을 만들고 값을 넣어준다.

명령어 모음

  • helm install app-name . -n namespace-name -f values.yaml -f values-dev.yaml
  • helm uninstall app-name -n namespace-name
  • helm upgrade --install app-name . -n namespace-name

Secret

주의할 점

  • DNS에 도메인을 구매하고 subdomain을 만드는 건 따로 해야한다.
  • helm install하면 고정 ip가 하나 생긴다. 이를 subdomain의 A 레코드에 등록한다.
  • helm install하면 managed certificate도 생긴다. 시간이 좀 소요된다. dns에 ip를 등록해야 validate된다.
profile
내가 보려고 쓰는 글
post-custom-banner

0개의 댓글