같은 VPC인데도 EKS에서 RDS 연결 안될 경우

AWS의 Kubernetes 서비스인 EKS를 구성할때 겪었던 일이다.
EKS와 RDS를 같은 VPC 안에 두었음에도 불구하고 EKS에서 RDS로 연결이 되지 않고 계속해서 타임아웃에러만 발생했다.

이 경우 먼저 Pod에서 RDS 주소를 인지하는지 먼저 확인했다.
먼저 Pod 이름 먼저 확인

1
$ kubectl get all -n shipda

파드 이름이 pod/shipda-api-v2-79d868d65-2kh4t 이라 한다면 pod에다 nslookup 명령어를 실행시킨다.

1
2
3
4
5
6
7
8
9
10
11
$ kubectl exec -it pod/shipda-api-v2-79d868d65-2kh4t -n shipda nslookup <blahblah>.rds.amazonaws.com
Server: 10.100.0.10
Address: 10.100.0.10:53

Non-authoritative answer:
<blahblah>.rds.amazonaws.com canonical name = <blahblah>.ap-northeast-2.compute.amazonaws.com
Name: <blahblah>.ap-northeast-2.compute.amazonaws.com
Address: 111.111.111.111

Non-authoritative answer:
<blahblah>.rds.amazonaws.com canonical name = <blahblah>.ap-northeast-2.compute.amazonaws.com

DNS 를 리졸빙 하는걸로 봐서는 DNS는 문제 없는것 같다. 그러면 실제로 접속이 되는지 핑을 날려본다.

1
$ kubectl exec -it pod/shipda-api-v2-79d868d65-2kh4t -n shipda ping <blahblah>.rds.amazonaws.com

핑이 가지 않았다. 해결 방법을 한참 찾았다. 같은 VPC라서 문제 없을 줄 알았는데 뒤통수 맞은 기분이었다. 사실 프로덕션으로 GCP와 Azure는 썼었는데 AWS는 처음이라 좀 더 헤맸을수도 있다. 사실 요즘 클라우드가 다들 엇비슷해서 있을거 (거의) 있어서 적응에는 큰 문제는 없지만 아마존 같은 경우엔 VPC, Security Group, Subnet, RoutingTable 등을 좀 더 세밀하게 지정해야 하기 때문에 헤맸을 수도 있다.

결국 해결책은 -

RDS의 시큐리티 그룹에 EKS의 시큐리티 그룹을 넣어주면 해결되는 일이었다.

뭔가 굉장히 허탈하다. 참고로 다른 VPC라면 VPC 피어링을 사용하면 된다.

댓글

Your browser is out-of-date!

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

×