본문 바로가기
프로젝트 일지/BoWS

인프라 형상을 코드로 관리하기 (1) - ArgoCD

by 데브겸 2024. 8. 30.

아래 과정을 겪으면서 nginx와 한참 싸우던 어느날, k8s 클러스터 위에 배포한 앱들에 https가 적용되지 않는 현상을 발견했다.

https://kyumcoding.tistory.com/119

 

Nginx에서 뒷단의 서비스와 Https 통신하려 할 때 겪는 문제들

nginx에서 라우팅하는 A서비스 도메인의 인증서로 B서비스와 통신하려 한다? 문제상황bows.co.kr이면 docker compose로 띄운 certbot과 volume을 통해 ssl 인증을 하고, bows.co.kr 도메인이 아니면 뒷단으로 http

kyumcoding.tistory.com

 

처음에는 너무 어이가 없었다. 분명 옛날 코드 그대로 해서 ingress를 만들었는데? certificate로 잘 만들었는데...? 심지어 certificate 조회했을 때 true로 상태도 좋은데...?

 

오랜시간 디버깅을 해보면서 결국 원인을 발견했다. 뭐가 잘못되었는지 알겠나요..? ㅎㅎ

apiVersion: cert-manager.io/v1
kind: ClusterIssuer
metadata:
  name: letsencrypt-bows
spec:
  acme:
    email: email@email.com
    privateKeySecretRef:
      name: letsencrypt-bows
    server: https://acme-staging-v02.api.letsencrypt.org/directory
    solvers:
      - http01:
          ingress:
            class: traefik

 

네, server에 acme-staging 즉 staging url을 적어둔 것이 문제였다. 예전에 뭐 잘되는지 테스트 좀 해보겠다고 staging url로 적어놓은 것을 까맣게 잊고 있었던 것이다.

 

이때 확실하게 느꼈다. 인프라도 형상 관리해야 하는구나... 그리고 그것을 자동화할 필요가 있구나...

 

그래서 미루고 미루던 argocd 적용을 시작했다(근데 확실히 필요성을 느끼고 사용하기 시작하니까 좋다)

이전에 argocd를 잠깐 다룬적이 있다. 설치와 https로 웹브라우저 접속하는 방법은 아래 글을 참고하면 된다.

https://kyumcoding.tistory.com/110

 

Traefik과 Cert Manager를 사용하여 ArgoCD UI Https로 접속하기

Helm 설치하기curl -O tar -zxvf helm-v3.15.3-linux-amd64.tar.gzsudo mv linux-amd64/helm /usr/bin/helm  Traefik 설치helm repo add traefik helm repo update# 나는 관리의 용이성을 위해 ns를 새로 만들어서 거기에 설치했다k create

kyumcoding.tistory.com

 

 

1. GitHub에 관리하고자 하는 인프라 형상을 올려둔다

ArgoCD는 helm이나 json 등에 대해서도 관리를 해주지만, 나의 경우 manifest 특히 프로젝트와 관련있는 manifest들을 관리하기 위해 사용했다. GitHub에 mainifest 폴더와 나를 괴롭혔던 cluster issuer에 대한 manifest를 업로드 한다.

 

 

 

2. ArgoCD에 내 GitHub Repository를 등록한다

사진처럼 Settings의 Repositories에서 어느 GitHub Repoistory를 참고해야 할지를 등록한다.

 

 

이때 Project는 default로 설정했는데, 만약 하나의 프로젝트를 생성해서 argocd의 배포와 역할 등을 세밀하게 제어하고 싶다면 settings의 Projects를 클릭하여 생성, 등록해주면 된다. 이 블로그 포스트에 자세히 설명되어 있으니 참고하면 좋을 것 같다. 나의 경우 시도하다가 굳이 지금 단계에서는 필요없을 것 같아 default project에 진행했다.

 

Type에 git을 선택하고 쭉쭉 필요한 정보들을 적는다

 

등록할 때 Automating Self-Healing, Automatic Pruning 등의 옵션을 선택할 수 있다. 해당 옵션에 대해서는 아래에 잘 설명되어 있다. 나는 인프라의 형상을 GitHub로 관리한다는 목적이 있었기 때문에, GitHub에 업로드 되어 있는대로 인프라가 유지되는 것을 도와주는 두 옵션을 모두 켰다

https://argo-cd.readthedocs.io/en/stable/user-guide/auto_sync/

 

 

 

 

열심히 설정해주고 CREATE를 누르면 아래와 같이 등록이 된다

 

 

3. 등록된 Repository에 있는 Manifest 배포하기

Applications에서 '+ NEW APP' 버튼을 눌러 필요한 정보를 입력한 뒤 GitHub에 업로드 되어 있는 manifest를 애플리케이션으로 배포한다. 어느 브랜치와 어떤 디렉토리를 봐야할지, 어느 클러스터에 배포할지 등을 적어준다(클릭하면 기본값 등이 나오니 그것을 이용하면 편하게 빈칸들을 채울 수 있다)

 

 

 

 

잘 적어주고 CREATE를 누르면 짠 하고 manifest에 적힌 내용들이 k8s 클러스터에 배포된다

 

 

클릭해보면 아래와 같이 조금 더 상세하게 배포 현황을 볼 수 있다

 

 

k8s 클러스터에도 확인해보면, 내가 정의한대로 cluster issuer가 잘 배포된 것을 확인할 수 있다.

 

 

 

ArgoCD는 기본적으로 3분마다 Git의 diff를 감지하고 diff가 발생했을 경우 Git에 맞춰 인프라 배포 상황을 동기화한다. 만약 이 시간을 조정하고 싶으면 별도로 sync 옵션을 조작한다.