Overview
GKE에서 ArgoCD Ingress 생성시에 LoadBalancer에서 Health Check가 되지 않아 Server Error가 발생하는 문제에 대해서 트러블 슈팅 해본다.
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가 정상적으로 노출된다!
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' 카테고리의 다른 글
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 |