ArgoCD NOAUTH Authentication required

김유경·2025년 6월 2일

들어가며

쿠버네티스 클러스터에 ArgoCD를 설치하고 정상적으로 애플리케이션을 연동했음에도 다음과 같은 에러가 발생했습니다.

Failed to load target state: failed to generate manifest for source 1 of 1:
rpc error: code = Unknown desc = failed to list refs: NOAUTH Authentication required

‼️ 처음에는 git 인증이나 레포지토리 설정 문제로 생각했지만, 실제로는 ArgoCD 내부 레디스 인증 문제였습니다.


오류 원인

해당 오류는 Argo CD 내부 컴포넌트(repo-server, application-controller, argocd-server)가 레디스에 접근하려 했지만 인증 정보가 누락되어 발생한 것입니다.

ArgoCD는 여러 내부 컴포넌트 간 상태 동기화, 캐싱 등을 위해 레디스를 중앙 저장소로 사용합니다. 주요 구성 요소는 다음과 같습니다.

  • argocd-repo-server: git 리포지토리와 연동하여 매니페스트를 생성
  • argocd-application-controller: 애플리케이션 상태를 모니터링하고 동기화
  • argocd-server: 웹 UI 및 API 제공
  • argocd-redis: 캐시 및 상태 정보 저장

저는 다음과 같이 ArgoCD를 설치했습니다.

kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml

🥲 저만 그런 건지는 모르겠지만... 레디스 설정에서 문제가 있었습니다.

설치 과정에서 argocd-redis는 비밀번호가 포함된 secret을 자동으로 생성하지만, repo-server, server, application-controller와 같은 다른 컴포넌트들은 이 인증 정보를 자동으로 반영하지 않습니다.

결과적으로 레디스에 접근할 때 인증 오류가 발생하였습니다.


해결 방법

1. 레디스 비밀번호 설정 확인

먼저 argocd-redis에 비밀번호가 설정되어 있는지 확인합니다. 출력된 YAML에서 auth: 항목이 존재하고 base64 인코딩된 값이 있다면, Redis 비밀번호가 설정된 상태입니다.

kubectl -n argocd get secret argocd-redis -o yaml

다음으로 ArgoCD의 각 컴포넌트가 해당 비밀번호를 인식하고 있는지 확인합니다.

kubectl -n argocd get deployment argocd-repo-server -o yaml | grep REDIS_PASSWORD
kubectl -n argocd get deployment argocd-server -o yaml | grep REDIS_PASSWORD
kubectl -n argocd get statefulset argocd-application-controller -o yaml | grep REDIS_PASSWORD

‼️ 이처럼 argocd-redis Secret에는 auth 키로 레디스 비밀번호가 설정되어 있지만, repo-server에는 REDIS_PASSWORD 또는 REDIS_PASSWORD_FILE 환경변수가 설정되어 있지 않은 것을 확인할 수 있습니다.

2. 레디스 비밀번호 전달

각 ArgoCD 구성 요소에 환경변수로 Redis 비밀번호를 수동으로 주입합니다.

argocd-repo-server 설정

kubectl -n argocd patch deployment argocd-repo-server \
  --type='json' \
  -p='[{"op": "add", "path": "/spec/template/spec/containers/0/env", "value": [{"name": "REDIS_PASSWORD", "valueFrom": {"secretKeyRef": {"name": "argocd-redis", "key": "auth"}}}]}]'

argocd-server 설정

kubectl -n argocd patch deployment argocd-server \
  --type='json' \
  -p='[{"op": "add", "path": "/spec/template/spec/containers/0/env", "value": [{"name": "REDIS_PASSWORD", "valueFrom": {"secretKeyRef": {"name": "argocd-redis", "key": "auth"}}}]}]'

argocd-application-controller 설정

kubectl -n argocd patch statefulset argocd-application-controller \
  --type='json' \
  -p='[{"op": "add", "path": "/spec/template/spec/containers/0/env", "value": [{"name": "REDIS_PASSWORD", "valueFrom": {"secretKeyRef": {"name": "argocd-redis", "key": "auth"}}}]}]'

💡 이 명령어들은 argocd-redis 시크릿에서 auth 키 값을 읽어와 각 컴포넌트의 REDIS_PASSWORD 환경변수로 설정합니다.

3. pod 재시작

설정을 적용한 후, 변경 사항이 반영되도록 각 컴포넌트를 재시작하거나 기다리면 됩니다.

kubectl -n argocd rollout restart deployment argocd-repo-server
kubectl -n argocd rollout restart deployment argocd-server
kubectl -n argocd rollout restart statefulset argocd-application-controller

정상적으로 재시작되었는지 로그를 통해 확인합니다.

kubectl -n argocd get pods
kubectl -n argocd logs deployment/argocd-repo-server

🥳 해결 완료

0개의 댓글