본문 바로가기

인프라,데이터/네트워크

퍼블릭/프라이빗 서브넷과 로드 밸런서

퍼블릭 서브넷과 프라이빗 서브넷이 어떻게 다른지 아시나요?

혹시 퍼블릭 서브넷에 위치한 로드 밸런서와 프라이빗 서브넷에 위치한 로드 밸런서는 뭐가 다른지 아실까요?

잘 모르시겠다면 이 글을 읽어보시면 좋을 것 같습니다! 

 

인프라 분야로 일하지 않으면, 사실 퍼블릭 서브넷과 프라이빗 서브넷이 다르다는 건 알겠는데, 그게 어떻게 영향을 미치는지 잘 모를 수도 있으실 것 같아요.

간단히 말하면, 

VPC : AWS의 가상 네트워크

서브넷 : VPC의 네트워크 영역을 부분적으로 분할해 나눈 작은 부분 네트워크인데,

 

퍼블릭 서브넷은 인터넷에 바로 트래픽을 전송할 수 있고, 

 


프라이빗 서브넷은 인터넷에 바로 트래픽을 전송할 수 없고, 퍼블릭 서브넷의 NAT Gateway를 통해 인터넷에 연결할 수 있다는 점이 다릅니다.

여기서 NAT Gateway는 네트워크 주소 변환 서비스로, 프라이빗 서브넷들이 가지고 있는 프라이빗 IP를 NAT Gateway가 가진 EIP(탄력적이나 고정된 퍼블릭 아이피)로 변환해서 내보냅니다. 

예를 들어 프라이빗 서브넷의 인스턴스가 google.com에 요청을 보내고 싶은 경우, 퍼블릭 서브넷의 NAT Gateway를 타고 Internet에 접근할 수 있습니다.

이때 프라이빗 서브넷의 인스턴스가 5.6.7.8의 Private IP를 가지고 있어도, NAT Gateway를 타며 1.2.3.4로 IP가 바뀝니다.

즉 google.com은 이 인스턴스의 요청을 받을 수 있지만, 해당 요청을 보낸 호스트를 5.6.7.8이 아닌 1.2.3.4로 인식합니다.

 


왜 이렇게 프라이빗 서브넷과 퍼블릭 서브넷을 나누는가 하면, 

백엔드 서비스(EC2 서버, 데이터베이스)를 프라이빗 서브넷에 두고 원치 않는 인터넷 액세스를 차단하며, 회사 내부의 선별적인 연결만 받을 수 있기 때문입니다.

회사에서 퍼블릭 서브넷에는 외부에서 접근이 되어도 상관 없는, 로드 밸런서가 위치합니다.

지금 내가 이 글을 보고 있는 컴퓨터에서, naver.com을 접속하려고 하면 어떤 일이 일어날까요?

먼저 컴퓨터가 dns 서버에 naver.com으로 가려면 어떤 ip에 요청해야 하냐고 질의를 합니다.

nslookup naver.com

Non-authoritative answer:
Name:	naver.com
Address: 223.130.195.95
Name:	naver.com
Address: 223.130.200.104
Name:	naver.com
Address: 223.130.200.107
Name:	naver.com
Address: 223.130.195.200

nslookup으로 naver.com을 검색하면, 해당 도메인이 어떤 IP와 연결되어 있는지가 조회됩니다. 이 IP들은 퍼블릭 서브넷에 있는 로드 밸런서의 퍼블릭 IP입니다.

이 IP와 연결된 로드 밸런서는 사용자들로부터 인터넷 액세스가 가능해야 하기 때문에 퍼블릭 서브넷에 위치하며, naver.com 을 쳤을 때 나오는 검색 서비스를 제공해주는 서버 등으로 트래픽을 라우팅해줍니다.

이런 로드밸런서를 aws에서는 internet-facing 로드 밸런서라고 합니다.

반면, 인터넷에 퍼블릭하게 노출될 필요가 없고, 개발조직 내에서만 접근하는 로드 밸런서는 internal 로드 밸런서라고 합니다.

예를 들면, naver.com을 이루는 서비스들끼리 요청을 보내는 경우 internal 로드 밸런서를 사용합니다.

naver.com 에 뜨는 웹 페이지에 있는 실시간 랭킹, 뉴스 서비스를 띄우기 위해 랭킹 서비스, 뉴스 서비스에 요청을 보낼 때, internal 로드 밸런서를 사용합니다.


그럼 프라이빗 서브넷에 로드 밸런서를 만들고, 로드 밸런서에 3.4.5.6이라는 IP가 부여되면,
VPC 외부에서 접근이 될까요? 즉, 인터넷 요청을 받을 수 있을까요?

답은 "아니다" 입니다.

일단 애초에 3.4.5.6이라는 IP가 프라이빗 IP라 VPC 외부에서 해당 IP로 접근할 수 없습니다.

또한 프라이빗 서브넷의 경우 Internet Gateway에 바로 접근할 수 없습니다. 따라서 애초에 인터넷 요청을 받을 수 없습니다.

외부에서 요청을 보낼 수 있는 로드 밸런서를 만들고 싶으면, 

퍼블릭 서브넷에 internet-facing 로드 밸런서를 만들어야 network interface에 퍼블릭 IPv4 주소가 붙고, 해당 주소로 외부에서 접근할 수 있습니다.

 

 

+ 사족

그런데, 내가 지금 어디에서 요청을 보내는지(로컬, VPN 연결, EC2 인스턴스)에 따라서 nslookup의 결과가 달라지기도 하는데요,

DNS 서버를 어떤 것을 사용하냐에 따라서 nslookup의 결과 다른 IP가 리턴되기 때문입니다.

(로컬 PC나 인스턴스의 DNS 서버를 따로 설정해주면, naver.developer.com 같이 네이버 개발자들만 사용하는 내부 서비스에 회사 망으로 접근 요청이 오는 경우에 특정 IP로 접근하라고 알려줍니다.)