Trouble Shooting

ArgoCD Ingress 오류 해결 가이드 (GKE)

Somaz 2024. 4. 26. 09:07
728x90
반응형

Overview

이번 글에서는 GKE(Google Kubernetes Engine) 환경에서 ArgoCD Ingress를 구성할 때 발생하는 502 Server Error 및 LoadBalancer Health Check 실패 문제를 다뤄본다.

 

Google Cloud Load Balancer는 백엔드 서비스에 대한 헬스체크를 통해 트래픽을 분배하는데, ArgoCD Ingress 구성 시 내부 HTTP → HTTPS 리디렉션으로 인해 헬스체크가 실패하며 외부에서 ArgoCD UI 접근이 되지 않는 문제가 발생할 수 있다.

 

해당 문제는 argocd-server의 TLS 설정(`--insecure`)을 적절히 구성하여 해결할 수 있다.

 


본 포스팅에서는 다음과 같은 흐름으로 트러블슈팅을 진행한다.

  • GKE LoadBalancer와 ArgoCD Ingress 구성 시 나타나는 502 에러 분석
  • 내부 curl 테스트를 통한 리디렉션 확인 (Temporary Redirect)
  • argocd-cmd-params-cm ConfigMap을 통한 --insecure 설정
  • 헬스체크 복구 및 ArgoCD UI 정상 노출 확인

 

 

실제 실무 환경에서도 자주 마주칠 수 있는 문제이며, GKE에 ArgoCD를 배포하는 사용자에게 유용한 레퍼런스가 될 것이다.

 

 

 

📅 관련 글

2023.05.16 - [IaC/CI CD Tool] - ArgoCD란?

2023.08.09 - [IaC/CI CD Tool] - ArgoCD 설치 AWS & GCP

2023.10.02 - [IaC/CI CD Tool] - ArgoCD ApplicationSet이란? (작성 방법)

2023.10.08 - [Container Orchestration/Kubernetes] - 2. Kustomize + ArgoCD ApplicationSet

2024.02.02 - [IaC/CI CD Tool] - Argo Workflow란?

2024.04.09 - [IaC/CI CD Tool] - ArgoCD SSO 구성 가이드(GCP Oauth)

2025.02.19 - [IaC/CI CD Tool] - ArgoCD SSO 구성 가이드(Gitlab)

 

 

 

 


 

 

 

ArgoCD Ingress Error(With GKE)

 

 

먼저 LoadBalancer의 백엔드 서비스를 확인해보면, 영역별 네트워크 엔드포인트 그룹(=AWS Target Group)에서 Health Check가 되지않아 Server Error가 발생한다.

 

curl https://argocd.somaz.link/healthz

<html><head>
<meta http-equiv="content-type" content="text/html;charset=utf-8">
<title>502 Server Error</title>
</head>
<body text=#000000 bgcolor=#ffffff>
<h1>Error: Server Error</h1>
<h2>The server encountered a temporary error and could not complete your request.<p>Please try again in 30 seconds.</h2>
<h2></h2>
</body></html>

 

 

 

 

로그 탐색기를 확인해봐도 에러가 발생한다.

 

 

 

 

Kubernetes에 Curl Pod를 생성해서, 내부 통신을 테스트 해본다.

Temporary Redirect가 발생한다.

kubectl run curl -it --rm --image curlimages/curl -- sh

curl 10.31.0.134:8080/healthz
<a href="https://10.31.0.134:8080/healthz">Temporary Redirect</a>.

 

 

ArgoCD Ingress 문서를 확인해본다.

 

HTTP에서 HTTPS로의 내부 리디렉션 루프를 방지하려면 TLS를 비활성화한 상태에서 API 서버를 실행해야 한다.

argocd-server 배포의 argocd-server 명령에서 `--insecure` 플래그를 편집하거나 여기에 설명된 대로 argocd-cmd-params-cm ConfigMap 에서 `server.insecure: "true"` 를 설정해야 한다.

 

 

내부 TLS를 비활성화 해준다.

k get cm -n argocd argocd-cmd-params-cm -o yaml | k neat
apiVersion: v1
data:
  redis.server: argocd-redis-ha-haproxy:6379
  server.insecure: "true"
kind: ConfigMap
metadata:
  labels:
    app.kubernetes.io/name: argocd-cmd-params-cm
    app.kubernetes.io/part-of: argocd
  name: argocd-cmd-params-cm
  namespace: argocd

 

 

 

 

Health Check가 정상적으로 잘된다.

 

 

 

 

 

ArgoCD가 정상적으로 노출된다!

 

 

 

 


 

 

 

마무리

GKE에서 ArgoCD를 Ingress 방식으로 외부 노출할 경우,
기본적으로 ArgoCD 내부에서 TLS 리디렉션이 활성화되어 있으므로 GCP LoadBalancer의 헬스체크가 실패할 수 있다.

이 경우 ArgoCD의 server.insecure: "true" 설정을 통해 내부 TLS를 비활성화하면,
GCP LoadBalancer가 헬스체크를 통과하고 Ingress 경로로 ArgoCD UI를 정상적으로 제공할 수 있다.

 

핵심 포인트 요약:

  • ArgoCD는 기본적으로 HTTPS 리디렉션이 적용됨
  • GKE Ingress에서는 Health Check를 위해 내부 HTTP 통신이 허용되어야 함
  • ConfigMap(argocd-cmd-params-cm)에서 server.insecure를 true로 설정
  • 설정 후 argocd-server 재시작 또는 rollout 필요

 

 

앞으로도 다양한 CSP 환경(GKE, EKS, AKS)에서의 ArgoCD 구성 차이를 다루며,
트러블슈팅 사례를 계속 정리해 나갈 예정이다.

 

 

 

 

 

 


 

 

Reference

https://cloud.google.com/kubernetes-engine/docs/troubleshooting/troubleshoot-load-balancing?hl=ko

https://cloud.google.com/load-balancing/docs/https/troubleshooting-ext-https-lbs?hl=ko

https://cloud.google.com/load-balancing/docs/https/troubleshooting-ext-https-lbs?hl=ko

728x90
반응형