EKS 503 탈출기

EKS를 처음 구축하고 나를 반겨준 화면은 단연 503 Service Unavailable 이었다. ㅠㅠ 문제의 원인은 Pod, Service, Ingress 혹은 이미지 자체에 있을 수 있다.

문제점을 찾기 위해서 아래와 같은 순서대로 확인했다.

Pod가 정상 동작 중인지 확인

먼저 pod가 동작 중인지 확인한다.

1
2
3
4
5
$ kubectl get pods
NAME READY STATUS RESTARTS AGE
shipda-api-v2-7b45cdf6df-7hfsk 1/1 Running 0 2d12h
shipda-api-v2-7b45cdf6df-b8hzq 1/1 Running 0 2d12h
shipda-api-v2-7b45cdf6df-v24vh 1/1 Running 0 2d12h

뭐 다들 정상 동작중이니 이미지를 확인해본다.

이미지 검사

Pod에 올라간 도커 이미지가 진짜로 제대로 도는지 확인해본다. 다만 이는 Health Check를 잘 만들어놨다면 좀 쉽게 체크할 수 있다.

1
kubectl port-forward pod/shipda-api-v2-7b45cdf6df-7hfsk 8080:8080

해당 Pod의 8080포트를 localhost 8080 포트에 바인딩시킨다. 그 후 로컬호스트의 8080포트에 대고 API를 테스트해본다.

여기까지 문제가 없으면 Service 혹은 Ingress가 문제다.

서비스

원인은

  1. 인그레스가 서비스를 못찾거나
  2. 서비스가 Deployment 를 못찾거나

이 둘 중 하나로 좁혀졌다. 하지만 어디서 문제인지 도통 알 수가 없었다. 그래서 옆에 곰돌이를 앉혀놓고 다시 한 번 서비스를 확인해본다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
$ kubectl describe service -n shipda
Name: shipda-api-v2
Namespace: shipda
Labels: <none>
Annotations: kubectl.kubernetes.io/
Selector: run=shipda-api-v2
Type: NodePort
IP: 10.100.75.73
Port: <unset> 80/TCP
TargetPort: 8080/TCP
NodePort: <unset> 30888/TCP
Endpoints: 172.31.1.205:8080,172.31.21.125:8080,172.31.39.55:8080
Session Affinity: None
External Traffic Policy: Cluster
Events: <none>

deployment는

1
2
3
4
5
6
7
8
9
apiVersion: apps/v1
kind: Deployment
metadata:
name: shipda-api-v2
labels:
app: shipda-api-v2
namespace: shipda
spec:
...

곰돌이에게 deployment의 metadata를 설명하다가 갑자기 뜨얽!
Deployment에서는 label을 app: shipda-api-v2 로 해놨는데 Service Selector는 run: shipda-api-v2 로 해놓았던 것이었다!

따라서

잉그레스 -> 서비스 -> 디플로이먼트

이렇게 흘러가야할 트래픽이 서비스에서 디플로이먼트로 흘러가지 못해서 503에러가 발생했다. 왜 selector를 run으로 한지 이유는 모르겠지만…

댓글

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×