AWS 환경에서 CICD를 구축하는 미션을 맡게 되었다.
목표는 AWS EKS, CI/CD, 배포할 서비스, 그리고 Helm을 사용해 전체 시스템을 구성하는 것이다.
이번 CI/CD 구축에서는 GitLab, Argo CD, Nexus(docker registry), MySQL, Vault, Cert-Manager 등을 활용할 예정이다.
이 글에서는 세부적인 화면 캡처나 단계별 설명을 제공하지 않을 것이다. 그러나 시간이 지나면서 익숙해지다 보면 자연스럽게 이해할 수 있을 것이다. (참고로, 필자는 이 과정을 익히는 데 한 달이 걸렸다.)
이 과정에서 직면했던 여러 가지 이슈들을 공유하고 기록함으로써, 이 글이 누군가에게 도움이 되기를 바란다.
이전 시간에는 IAM으로 계정을 생성, EKS 생성, route53 도메인 생성을 진행했다.
그리고 local terminal에서 생성한 EKS에 접근할 수 있도록 설정했다.
설정된 환경을 k9s로 아주 편리하게 보고 듣고 뜯고 맛볼 수 있다.
다음으로! CI/CD 구성 서비스들을 배포해보자.
Tips.
필자는 git-repo를 만들어서 배포할 서비스에 대한 helm을 하나씩 모아나갔다.
필자는 helm chart values.yaml에서 값을 수정하면 update 해나갈 예정이기 때문에 모든 helm repo를 add하고 file들을 pull받아서 관리했다.
- helm repo add
- helm pull repo/service --untar
- helm install . -f values.yaml -n namespace
- helm upgrade . -f values-aws.yaml -n namespace
요런 순서로 진행했다.
Ingress-controller(Nginx)
가장 먼저 ingress-controller를 설치해보자.
먼저 helm chart를 얻기 위해 명령어를 검색해본다.
적당히 helm install ingress-controller nginx 정도로 검색하면 아래와 같은 사이트가 나옵니다.
https://docs.nginx.com/nginx-ingress-controller/installation/installing-nic/installation-with-helm/
Installation with Helm | NGINX Ingress Controller
Installation with Helm This document explains how to install NGINX Ingress Controller using Helm. Before you start Note: All documentation should only be used with the latest stable release, indicated on the releases page of the GitHub repository. A Kubern
docs.nginx.com
NGINX Ingress Controller는 Kubernetes 환경에서 외부 트래픽을 내부 서비스로 라우팅하기 위해 사용되는 컴포넌트입니다.
ingress controller가 없으면 외부와 소통할 수 없어서 필수로 적용해야할 서비스입니다.
nginx-ingress-controller는 크게 건드릴 변수가 없어서 helm install 만 적용하면 됩니다.
적용하게 되면 nginx-ingress-controller 에 external-ip로 ELB가 생성됩니다. (아래 사진은 :svc 로 접근해서 확인할 수 있다.)

해당 ELB 도메인을 route53에 설정하면 서브도메인을 적용할 수 있습니다.
route53 > 호스트 영역
- 구매한 도메인과 연결된 호스트 영역에 접속
- 디폴트 레코드 2개가 보이고 레코드 생성 클릭
- 서브 도메인을 자동으로 생성해줄 것이기 때문에 *.domain.link 이런 식으로 생성
- 레코드 유형은 CNAME으로 하고 값에 위 ELB 주소를 추가
Cert-manager
다음은 cert-manager다. 요녀석은 SSL/TSL 인증서 관리를 해주는 서비스이다. 도메인도 생성했고 각 서비스간 통신도 https로 하기 위해 필요한 서비스이다. cert-manager를 사용하는 방법 이외에도 여러 방법이 있으니 꼭 인증서를 생성할 필요없는 local 환경이나 aws certificate manager 등 잘 찾아서 상황에 맞게 적용하길 바란다.
여기서 부터는 위 helm install 까지의 과정을 생략하겠습니다.
helm install cert-manager . -f values.yaml -n namespace 를 통해 손쉽게 cert-manager를 실행시킨다.
처음 values.yaml을 보면 양이 많아서 굉장히 답답할 수 있는데,,, 보다보면 다 비슷비슷한 설정들이고 주로 설정하는 부분이 정해져 있어서 느낌이 올 것입니다. 그리고 정말 추천하는 방법은 README.md를 먼저 확인해보세요. README에 꼭 필요한 설정에 대한 설명이 나와있습니다. (이거 놓치면 개고생합니다.. ㅠ)
보면 아래와 같이 false인 부분을 true로 수정해줘야합니다.
crds:
enabled: true
cert-manager에서는 이부분 외에 없을 겁니다...(기억이..ㅠ)
values.yaml에서 수정사항이 적지만 그 외에 할 것들이 많습니다.
clusterIssuer.yaml을 생성해서 clusterIssuer를 생성합니다.
clusterIssuer 생성 방법은 공식문서와 gpt가 친절하게 알려줄겁니다.
필자는 accessKey와 secretKey로 역할 인증받는 방식을 선택했습니다.
secretKey도 k8s secret 생성해서 추가해줍니다.
IAM 역할 설정하는 게 정말정말 개빡셉니다.................이것만 며칠을 잡아먹었는지 모르겠습니다 ㅠ,,, 누군가는 빠르게 하겠죠...?
IAM Role에 대한 이해가 부족하다보니 정말 오래 걸렸습니다 ㅜ
https://cert-manager.io/docs/configuration/acme/dns01/route53/
각설하고 공식문서대로 잘 설정하고 적용하면 나중에 생성할 서비스들에 ssl 인증서 발급이 원활하게 잘 될겁니다!
여기까지 정말정말,, 기본적으로 필요한 서비스들 실행을 완료했습니다.
다음시간엔 정말 CI/CD 구성 서비스들을 배포해보겠습니다.
다른 분들은 cert-manager 잘 성공하길 바랍니다! ㅎㅎㅎㅎ
'Cloud Computing > AWS CICD' 카테고리의 다른 글
| [AWS] EKS CI/CD부터 서비스 배포까지 - (4) (2) | 2024.07.15 |
|---|---|
| [AWS] EKS CI/CD부터 서비스 배포까지 - (3) (2) | 2024.07.14 |
| [AWS] EKS CI/CD부터 서비스 배포까지 - (1) (1) | 2024.07.08 |