EKS를 처음 구축하고 나를 반겨준 화면은 단연 503 Service Unavailable 이었다. ㅠㅠ 문제의 원인은 Pod, Service, Ingress 혹은 이미지 자체에 있을 수 있다.
문제점을 찾기 위해서 아래와 같은 순서대로 확인했다.
Pod가 정상 동작 중인지 확인
먼저 pod가 동작 중인지 확인한다.
1 | $ kubectl get pods |
뭐 다들 정상 동작중이니 이미지를 확인해본다.
이미지 검사
Pod에 올라간 도커 이미지가 진짜로 제대로 도는지 확인해본다. 다만 이는 Health Check를 잘 만들어놨다면 좀 쉽게 체크할 수 있다.
1 | kubectl port-forward pod/shipda-api-v2-7b45cdf6df-7hfsk 8080:8080 |
해당 Pod의 8080포트를 localhost 8080 포트에 바인딩시킨다. 그 후 로컬호스트의 8080포트에 대고 API를 테스트해본다.
여기까지 문제가 없으면 Service 혹은 Ingress가 문제다.
서비스
원인은
- 인그레스가 서비스를 못찾거나
- 서비스가 Deployment 를 못찾거나
이 둘 중 하나로 좁혀졌다. 하지만 어디서 문제인지 도통 알 수가 없었다. 그래서 옆에 곰돌이를 앉혀놓고 다시 한 번 서비스를 확인해본다.
1 | $ kubectl describe service -n shipda |
deployment는
1 | apiVersion: apps/v1 |
곰돌이에게 deployment의 metadata를 설명하다가 갑자기 뜨얽!
Deployment에서는 label을 app: shipda-api-v2
로 해놨는데 Service Selector는 run: shipda-api-v2
로 해놓았던 것이었다!
따라서
잉그레스 -> 서비스 -> 디플로이먼트
이렇게 흘러가야할 트래픽이 서비스에서 디플로이먼트로 흘러가지 못해서 503에러가 발생했다. 왜 selector를 run으로 한지 이유는 모르겠지만…