본문 바로가기
클라우드/Argo

🚀 Argo CD 마스터 가이드: argocd-cm 핵심 속성 완벽 정복하기

by gasbugs 2026. 1. 2.

안녕하세요! 오늘은 Kubernetes 환경에서 GitOps를 실현하는 가장 강력한 도구, Argo CD의 심장부와 같은 argocd-cm 설정에 대해 깊이 있게 파헤쳐 보겠습니다. 🛠️

단순한 설치를 넘어, 보안을 강화하고 커스텀 상태를 체크하며 효율적으로 리소스를 관리하고 싶다면 이 글을 끝까지 읽어주세요!


1. 🛡️ GPG 서명 검증 활성화 (gpg.enabled)

보안은 아무리 강조해도 지나치지 않죠. Git 리포지토리에 커밋된 내용이 정말 신뢰할 수 있는 사용자가 작성한 것인지 확인하고 싶을 때 GPG(GNU Privacy Guard) 서명 검증을 사용합니다.

  • 역할: Argo CD가 Git에서 매니페스트를 가져올 때, 커밋의 GPG 서명을 확인하도록 합니다.
  • 설정 이유: 비인가된 사용자가 코드를 변조하여 푸시하더라도, 서명이 유효하지 않으면 Argo CD가 동기화를 거부하여 클러스터를 보호합니다.

💻 설정 코드 예시

YAML

apiVersion: v1
kind: ConfigMap
metadata:
  name: argocd-cm
  namespace: argocd
data:
  # GPG 서명 검증 활성화 🔐
  gpg.enabled: "true"

💡 참고: 이 설정을 활성화한 후에는 Argo CD에 공개 키를 등록해야 합니다. argocd gpg add 명령어를 통해 신뢰할 수 있는 키를 추가해 주세요!


2. 🏥 커스텀 리소스 상태 체크 (resource.customizations.health)

Argo CD는 기본적으로 Deployment, Service 같은 표준 리소스의 상태(Healthy, Progressing 등)를 판단할 줄 압니다. 하지만 CRD(Custom Resource Definition)나 특정 오픈소스 리소스는 Argo CD가 "이게 정상인가?"를 판단하지 못하고 무한히 Progressing 상태에 머물 때가 있습니다.

이때 사용하는 것이 바로 Lua 스크립트를 이용한 커스텀 헬스 체크입니다.

💻 설정 코드 예시 (예: SealedSecrets 리소스)

YAML

apiVersion: v1
kind: ConfigMap
metadata:
  name: argocd-cm
  namespace: argocd
data:
  # 리소스별 커스텀 헬스 체크 로직 정의 🩺
  resource.customizations.health.bitnami.com_SealedSecret: |
    hs = {}
    -- 리소스의 status 필드가 있는지 확인
    if obj.status ~= nil then
      -- 조건별 상태 로직 작성 (Lua 문법)
      if obj.status.observedGeneration < obj.metadata.generation then
        hs.status = "Progressing"
        hs.message = "대기 중: 새로운 사양 반영 중..."
        return hs
      end
    end
    hs.status = "Healthy"
    hs.message = "정상: 시크릿이 성공적으로 복호화되었습니다."
    return hs
  • 중요: resource.customizations.health._ 형식을 지켜야 합니다.
  • : 복잡한 연산보다는 리소스의 status 필드 값을 읽어 간단히 판단하는 것이 성능상 유리합니다.

3. 🎖️ 상태 배지 활성화 (statusbadge.enabled)

팀원들에게 현재 운영 중인 서비스가 정상적으로 동기화(Synced) 되었는지, 혹은 문제가 있는지 시각적으로 빠르게 보여주고 싶으신가요? GitHub README나 내부 대시보드에 Argo CD 배지를 달아보세요!

  • 기능: 외부에서 특정 Application의 동기화 상태를 이미지 링크 형태로 가져올 수 있게 합니다.

💻 설정 코드 예시

YAML

apiVersion: v1
kind: ConfigMap
metadata:
  name: argocd-cm
  namespace: argocd
data:
  # 상태 배지 기능 활성화 🎨
  statusbadge.enabled: "true"

활성화 후에는 다음과 같은 URL 형식을 통해 배지를 사용할 수 있습니다: https:///api/badge?name=


4. 🏗️ Kustomize 바이너리 버전 관리 (kustomize.binary.path)

많은 팀이 매니페스트 관리를 위해 Kustomize를 사용합니다. Argo CD는 내장된 Kustomize 버전을 사용하지만, 때로는 특정 버전의 기능이 필요하거나 보안 패치된 최신 버전을 별도로 지정해야 할 때가 있습니다.

💻 설정 코드 예시

먼저, Argo CD Repo Server 컨테이너에 원하는 버전의 바이너리가 포함된 볼륨을 마운트하거나 커스텀 이미지를 빌드해야 합니다. 그 후 argocd-cm에서 경로를 지정합니다.

YAML

apiVersion: v1
kind: ConfigMap
metadata:
  name: argocd-cm
  namespace: argocd
data:
  # 특정 Kustomize 버전 경로 지정 🛠️
  # (사전에 해당 경로에 바이너리가 위치해야 함)
  kustomize.path.v4.5.7: "/usr/local/bin/kustomize-4-5-7"

  # 혹은 build 옵션을 통해 커스텀 플래그 추가 가능
  kustomize.buildOptions: "--load-restrictor LoadRestrictionsNone"

잠깐! 예전 질문에서 언급되었던 것처럼, 멀티 버전을 지원하고 싶다면 kustomize.path.vX.X.X 형식을 사용하여 개발 환경별로 유연하게 대응할 수 있습니다.


📝 전체 설정 요약 (Full YAML)

위에서 설명한 모든 내용을 합친 argocd-cm 파일의 모습입니다. 주석을 꼼꼼히 읽어보세요!

YAML

apiVersion: v1
kind: ConfigMap
metadata:
  name: argocd-cm
  namespace: argocd
  labels:
    app.kubernetes.io/part-of: argocd
data:
  # 1. 보안 설정: GPG 서명 확인
  gpg.enabled: "true"

  # 2. 가시성: 상태 배지 노출
  statusbadge.enabled: "true"

  # 3. Kustomize: 특정 버전 사용 설정
  # 필요에 따라 여러 버전을 명시할 수 있습니다.
  kustomize.path.v5.0.0: "/custom-bin/kustomize"

  # 4. 상태 관리: 커스텀 리소스(예: Argo Rollouts) 헬스 체크
  # Argo CD가 표준 리소스가 아닌 것들의 성공 여부를 판단하게 돕습니다.
  resource.customizations.health.argoproj.io_Rollout: |
    hs = {}
    if obj.status ~= nil then
      if obj.status.phase == "Paused" then
        hs.status = "Suspended"
        hs.message = "배포가 일시 중지되었습니다 (Canary/BlueGreen)"
        return hs
      end
    end
    hs.status = "Healthy"
    return hs

  # 5. 기타 유용한 설정 (지난 논의 포함)
  # UI 상에서 Help 메뉴를 커스텀할 때 사용
  help.chat.url: "https://slack.com/your-channel"
  help.chat.text: "데브옵스 팀에게 문의하기"

💡 마치며

오늘 다룬 argocd-cm의 속성들은 Argo CD를 단순한 배포 도구에서 기업급 GitOps 플랫폼으로 격상시켜 주는 필수 요소들입니다.

특히 resource.customizations를 통한 헬스 체크는 복잡한 마이크로서비스 아키텍처에서 Argo CD의 대시보드 신뢰도를 높여주는 신의 한 수라고 할 수 있죠. 🎯

여러분의 클러스터에도 지금 바로 적용해 보시는 건 어떨까요? 궁금한 점이 있다면 댓글로 남겨주세요!