우리 회사는 EKS로 인프라를 운영하고 있고, 여러 AZ (가용영역)에 AWS 리소스를 배치하여 운영하고 있다.
이 때 AZ간 데이터 전송 요금이 부과되는 것을 막아보기 위해, 기존에 운영되던 a region의 NAT Gateway를 b,c에도 신설하였으나, 이를 기존에 사용하던 s3 엔드포인트에 연결하지 않아 많은 요금이 부과된 일이 발생했다.
이에 NAT와 Gateway Endpoint 등의 개념을 정리해보고자 한다.
NAT는 Network Address Translation으로 직역하면 네트워크 주소 변환이다. TCP/IP 기반 통신에서 네트워크 주소란 IP를 뜻하는데, IP 변환이 왜 필요한 것 일까?
EKS에서 파드는 EC2에서 실행되고 있기 때문에, 클라이언트와 파드가 통신하기 위해 EC2의 IP를 알아야한다.
문제는 Public Subnet이라면 EC2는 Public IP를 배정받지만 Private Subent에서 EC2는 사설 IP만 가지고 있기 때문에 클라이언트에서 destination IP를 알 수가 없는 것이다.
따라서 클라이언트와 Private subnet내의 AWS 리소스와 통신을 하기 위해서는 중간 매개체를 하는 것이 NAT Gateway이다.
그래서 이름이 Network Address Translation 인 것이며, private subent 내의 aws 리소스가 외부 인터넷과 통신하기 위해서는 반드시 public subnet에 배정된 NAT Gateway가 필요한 것이다.
AWS 리소스와 VPC간 통신할 수 있는 엔드포인트를 제공하는 것이다.
S3같은 AWS 리소스는 특정 VPC내로 프로비저닝되는 것이 아니다. 그래서 특정 VPC 내의 EC2에서 실행되고있는 애플리케이션에서 S3에서 데이터를 가져오려면, 별 다른 설정이 없다면 인터넷 게이트웨이를 거치게된다.
하지만 인터넷 게이트웨이를 거치지 않고, 바로 VPC 내부 리소스와 연결을 가능하게 해주는 것이 Gateway Endpoint이다.
만약 가용영역 a,b,c 내의 private subnet내에 프로비저닝된 EC2에서, 운영되고있는 애플리케이션이 S3에서 데이터를 GET 하려면 두 가지 방식이있다.