Airflow Webserver 접속이 계속 거부되는 경우
상황
- EKS가 아닌 AWS EC2위에 직접 쿠버네티스를 설치
- Helm chart를 사용해 Airflow를 Pod 단위로 배포를 시도
- 하지만 Webserver 접속은 계속 거부가 되는 상태
개요
최소 3일 이상의 삽질 중에 더 못하겠다고 스택오버플로우에 질문하자마자 20분 뒤에 혼자 해결하고 답변을 달아버린 능지처참 사건
사용한 차트
## add this helm repository
helm repo add airflow-stable https://airflow-helm.github.io/charts
## update your helm repo cache
helm repo update
Override를 위한 values.yaml
https://github.com/airflow-helm/charts/blob/main/charts/airflow/sample-values-KubernetesExecutor.yaml
확인 사항 1
Q. 파드가 정상 작동 중인가?
A. 정상 작동 중
확인 사항 2
Q. Webserver log에 특이사항 없나?
A. 매우 정상
확인 사항 3
Q. 포트포워딩 했는가?
A. 8080으로 했음
kubectl port-forward svc/airflow-web 8080:8080 --namespace airflow
확인 사항 4
Q. 포트 포워딩이 제대로 되었는가?
A. 파드 리소스 상태랑 사용 중인 포트 확인했음
# 파드 리소스 상세 내용
kubectl describe pod <pod name> -n airflow
# 사용중인 포트 확인
netstat -lntp
확인 사항 5
Q. Host Port가 0?! 저게 문제인 거 아님?
A. 공식 문서에는 반드시 필요한 것이 아니면 사용하지 말라고 적혀있음. 결론 문제가 아님
확인 사항 6
Q. EC2에서 보안 그룹 설정했음?
A. 인바운드 규칙에 8080 추가함
확인 사항 7
Q. 확인 사항 2번에, 200 다음에 187 뭐임! 수상하다
A. 그냥 로그 포맷임, 전송된 바이트수가 187이라는 뜻 (참고)
(진짜 이거 확인할 때는 지푸라기 잡는 느낌. 지금 와서 보면 누가봐도 정상인 로그..)
health HTTP/1.1" 200 187 "-" "kube-probe/1.26"
확인 사항 8
Q. Airflow에서 사용하는 MetaDB 문제인가!
A. Error 관련 로그가 있었지만, Webserver 접속 거부랑 아무 관련이 없었음
결국에
아.. 분명 포트 쪽 문제인데, 잘못된 건데 뭐지.. 하고
Service type을 ClusterIP에서 NodePort로 변경 함
spec:
type: NodePort
드디어 성공했다.. 감격 (ClusterIP에서 왜 localhost 접속도 안되는 거지..)