[ArgoCD]Github 저장소 선언적으로 등록하고 관리하기(Feat. External Secrets)

2025. 5. 27. 08:35·DevOps
반응형

배경 상황

ArgoCD로 클러스터 부트스트랩 구성을 진행하고 있다.

 

kustomize로 ArgoCD 배포 → ArgoCD 애플리케이션 배포해서 ArgoCD 설정 선언적으로 관리 → App of Apps 패턴으로 나머지 애플리케이션 배포 하는 절차를 통해 EKS 클러스터에서 사용할 대부분의 워크로드를 선언적으로 관리하려고 하는데 kustomize로 ArgoCD를 배포할 때 ArgoCD에 Github 저장소를 등록해야 나머지 절차(ArgoCD Appliation으로 워크로드 배포)를 진행할 수 있다.

 

 

GUI로 ArgoCD에 Github 저장소 등록하기

구글에서 ArgoCD 튜토리얼을 찾아보면 처음에는 대부분 GUI(혹은 CLI)로 등록하는 방법을 안내해주는데(ArgoCD GUI 접속 > Settings > Repositories > Connect Repo로 연결 정보 입력), 클러스터 부트스트랩을 매끄럽게 진행하기 위해서는 Github Repo도 선언적으로 관리해주는 것이 좋다.

 

 

선언적으로 ArgoCD에 Github 저장소 등록하기(Secret 활용)

위처럼 등록한 Repository 정보는 k8s Secret으로 저장되는데, 반대로 아래처럼 k8s Secret을 직접 작성해서 배포하면 선언적으로 깃 저장소 등록을 관리할 수 있다. 이 때 ArgoCD Repository 정보임을 나타내는 argocd.argoproj.io/secret-type: repository 레이블을 반드시 추가해주어야한다.

apiVersion: v1
kind: Secret
metadata:
  name: private-repo
  namespace: argocd
  labels:
    argocd.argoproj.io/secret-type: repository
stringData:
  type: git
  url: <https://github.com/argoproj/private-repo>
  password: my-password
  username: my-username
  project: my-project

 

 

선언적으로 ArgoCD에 Github 저장소 등록하기(ExternalSecrets 활용)

하지만 위 처럼 Secret을 작성하게되면 패스워드가 깃 저장소에 그대로 들어가게 되는 문제가 발생하게 되는데, External Secrets를 활용하면 깃헙에 직접적으로 패스워드를 작성하지 않아도 런타임에서 Secret을 생성할 수 있다. Git Credential 정보를 Secrets Manager 를 이용해서 rotation하는 구성은 필요 없을 듯 해서 무료 서비스인 Parameter Store를 활용했다.

 

 

먼저 링크를 참조해 클러스터에 External Secrets을 설치한다.

 

[Kubernetes]External Secrets란? 설치 및 구성방법 (GitOps 도입 시 크레덴셜 정보 안전하게 저장하기)

배경 상황쿠버네티스 환경에서 깃옵스(GitOps)를 하려고 하면 k8s 매니페스트 파일을 깃헙이나 깃랩같은 코드 저장소에 저장하게 된다. 이렇게 ArgoCD를 이용해서 애플리케이션 부트스트래핑 구성

canaryrelease.tistory.com

 

 

다음으로는 ClusterSecretStore를 생성해 Parameter Store와의 연결 정보를 구성해준다. 나는 IRSA 구성을 진행했기 때문에 jwt 토큰을 발급받아 인증할 수 있게끔 구성해주었다.

apiVersion: external-secrets.io/v1
kind: ClusterSecretStore
metadata:
  name: aws-parameter-store
spec:
  provider:
    aws:
      service: ParameterStore
      region: ap-northeast-2
      auth:
        jwt:
          serviceAccountRef:
            name: external-secrets # ESO 컨트롤러의 서비스 어카운트 이름
            namespace: external-secrets # ESO가 설치된 네임스페이스

 

 

다음으로는 Parameter Store에 저장된 값을 읽어 Secret 리소스를 생성하기 위해 ExternalSecret 리소스를 생성해준다.

  • secretStoreRef에는 사용할 ClusterSecretStore 정보를 넣어준다.
  • target.name에는 Secret 이름을 정의한다.
  • target.template은 Secret 리소스 템플릿이라고 생각하면 된다.
    • target.template.metadata.labels 에 argocd.argoproj.io/secret-type: repository 값을 반드시 설정해준다(ArgoCD가 repository 정보라는 것을 인식하기 위한 용도)
    • data에는 Secret에 저장할 정보들을 입력해준다.
      • {{ .secretKey값 }} 과 같은 템플릿 문법을 통해 Parameter Store에 저장된 값을 읽어 시크릿을 구성할수도 있고, 명시적으로 정의한 값을 활용할수도 있다.
  • spec.data에는 Parameter Store의 어느 값을 가져올 지에 대한 정보를 입력해주면 된다.
apiVersion: external-secrets.io/v1
kind: ExternalSecret
metadata:
  name: repo-test-app
  namespace: argocd
spec:
  secretStoreRef:
    name: aws-parameter-store
    kind: ClusterSecretStore
  target:
    name: repo-test-app
    creationPolicy: Owner
    template:
      metadata:
        labels:
          argocd.argoproj.io/secret-type: repository
      data:
      # 정적 값
        type: "git"
        name: "repo-test-app"
      # 동적 값
        url: "{{ .url }}"
        username: "{{ .username }}"
        password: "{{ .password }}"
  data:
    - secretKey: url
      remoteRef:
        key: /parameter-store-path/url
    - secretKey: username
      remoteRef:
        key: /parameter-store-path/username
    - secretKey: password
      remoteRef:
        key: /parameter-store-path/password

 

 

이렇게 매니페스트 파일을 구성해서 적용하면 소스코드 저장소에 크레덴셜을 직접 입력하지 않고도 ArgoCD에 Repository 정보를 등록할 수 있다.

저작자표시 비영리 동일조건 (새창열림)

'DevOps' 카테고리의 다른 글

[ArgoCD]Grafana, Istio등 Application의 Out of Sync 해결(ArgoCD Diffing custom)  (0) 2025.05.29
[Cisco]Meraki란?  (2) 2025.05.28
[ArgoCD]External Secrets를 활용해 Google OAuth 인증 구성 방법 및 에러 해결(unable to mutate secret: could not apply template)  (0) 2025.05.26
[Kubernetes]External Secrets란? 설치 및 구성방법 (GitOps 도입 시 크레덴셜 정보 안전하게 저장하기)  (2) 2025.05.25
[AWS]AWS Budgets 알람 설정 및 슬랙 연동하기(AWS 비용 알림 구성)  (1) 2025.05.25
'DevOps' 카테고리의 다른 글
  • [ArgoCD]Grafana, Istio등 Application의 Out of Sync 해결(ArgoCD Diffing custom)
  • [Cisco]Meraki란?
  • [ArgoCD]External Secrets를 활용해 Google OAuth 인증 구성 방법 및 에러 해결(unable to mutate secret: could not apply template)
  • [Kubernetes]External Secrets란? 설치 및 구성방법 (GitOps 도입 시 크레덴셜 정보 안전하게 저장하기)
Canary_카나리아
Canary_카나리아
어쩌다 데브옵스 엔지니어가 된 문과생의 기록용 블로그
    반응형
  • Canary_카나리아
    release: canary
    Canary_카나리아
  • 전체
    오늘
    어제
    • 분류 전체보기 (120)
      • DevOps (67)
      • Programming (28)
      • Certifications (3)
      • ETC (20)
  • 블로그 메뉴

    • 홈
    • 태그
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    NCPassociate자격증
    kops사용법
    java개념
    네이버클라우드서비스
    프로메테우스
    한빛출판네트워크
    제로베이스
    Grafana
    terraform
    클라우드엔지니어자격증
    Java
    NCPprofessional자격증
    ncp서비스
    백엔드공부
    그라파나예제
    Prometheus
    spring
    프로메테우스예제
    네이버클라우드자격증
    데브옵스엔지니어
    개발자
    백엔드스쿨
    NCP자격증
    백엔드
    백엔드개발
    클라우드자격증
    kops란
    자바개념
    argocd
    그라파나
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.2
Canary_카나리아
[ArgoCD]Github 저장소 선언적으로 등록하고 관리하기(Feat. External Secrets)
상단으로

티스토리툴바