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
'Trouble Shooting' 카테고리의 다른 글
[필독!] Github 계정 복구(suspended시) (2) | 2025.02.21 |
---|---|
K8s Worker Node에 지정한 Pod 배치하기(Taint, Tolerations) (0) | 2024.06.17 |
Terraform State Error 시 해결 방법 (0) | 2024.05.29 |
ACM(AWS Certificate Manager) 인증서 갱신 오류 해결 방법 (0) | 2024.05.07 |
Harbor Garbage Collection(GC) 오류 해결 방법 (0) | 2024.04.23 |