일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- docker commands
- docker
- AWS
- IPv4
- jest
- VPC
- TypeScript
- nestjs
- subnet
- axios-mock-adaptor
- 라우팅테이블
- 미라클모닝
- test code
- 테스트코드
- 서브넷
- parameter group
- mock객체
- TDD
- 리스코프치환원칙
- 도커
- jest.fn
- javascript unit test
- axios mock
- mock함수
- Unit Test
- 인터넷게이트웨이
- 의존관계역전원칙
- forbetterme
- JavaScript
- 단위테스트
- Today
- Total
My Dream Being Visualized
[ AWS ] Subnet 생성 및 라우팅 본문
※ 개인 공부를 위한 공간입니다. 틀린 부분 지적해주시면 감사하겠습니다 (_ _)
서브넷이란?
[AWS설명]
VPC를 생선한 후, 각 가용영역(AZ)에 하나 이상의 서브넷을 둘 수 있다.
서브넷은 VPC내에 IP 주소의 범위이다. (이게 무슨 말이고? 계속 읽어보자)
특정 서브넷 내에 EC2 인스턴스 같은 AWS 서비스를 시작할 수 있는데, 서브넷을 만들고 나서 VPC CIDR 블록의 부분(subset)인 IPv4 CIDR 블록을 각 서브넷에 대하여 명시한다.
VPC의 CIDR 블록을 10.0.0.0/16 으로 만들었고, 사용가능한 IP는 약 6만5천개였다.
2021.11.07 - [토이프로젝트/Infrastructure] - [ AWS ] VPC 생성하기
그 중, 한 IP를 서브넷에 할당해준다.
각 서브넷은 한 가용영역(AZ) 내에 있어야 하며, 다른 가용영역들에 걸칠 수 없다.
여러개의 인스턴스를 각기 다른 가용영역에 둠으로써, 한 가용영역에서의 failure로부터 다른 인스턴스들을 보호할 수 있다.
결국, 한 프로젝트를 관리하는 VPC 내에서 각 서버의 혹시모를 failure에 대비하여 각각의 가용영역에 각각의 서브넷을 할당!
해당 다이어그램은 각 서브넷이 3개의 가용영역에 할당된 VPC를 보여준다. 1A, 2A, 3A는 VPC내 인스턴스들이다.
IPv6는 CIDR 블록은 VPC와 연결되어 있으며 (1A 인스턴스가 있는) Subnet 1번과 연결되어 있다.
그림 참조!
인터넷 게이트웨이는 인터넷과의 통신을 가능하게 하며, VPN(가상사설망, 인터넷과 같은 공중망을 마치 전용선으로 사설망을 구축한 것처럼 사용할 수 있는 방식 (feat. 네이버))연결은 공동 네트워크와의 연결을 가능하게 한다.
VPC는 인터넷 게이트웨이를 통해야만 외부 서비스와 통신이 가능하다!
서브넷의 트래픽이 인터넷 게이트웨이로 라우팅되면, 그 서브넷은 pulbic 서브넷이다. 따라서 해당 다이어그램에서 Subnet 1은 public 서브넷이다.
인터넷과 통신을 해야한다면, public subnet에 서비스를 설치하자!
예) 프론트 서버와 통신을 해야하는 백엔드 서버, 외부 데이터베이스와 통신을 해야하는 EC2 등..
public 서브넷 안에 있는 인스턴스가 IPv4을 통하여 인터넷 통신을 하길 원하면, public IPv4 주소를 가지고 있거나 Elastic IP 주소(IPv4)여야 한다. 동일하게, public 서브넷 안에 있는 인스턴스가 IPv6를 통해 인터넷 통신을 하길 원한다면, IPv6 주소를 갖고 있어야 한다.
만약 서브넷이 인터넷 게이트웨이로 가는 루트를 갖고 있지 않다면, 이 서브넷은 private 서브넷이라고 한다. 해당 다이어그램에서는, subnet 2가 private 서브넷이다.
인터넷 통신(외부로 나가는)이 필요하지 않은 서비스는, private 서브넷에 배치하면 된다.
예) RDS, DocumentDB, computing EC2 등..
만약 서브넷이 인터넷 게이트웨이로 가는 루트가 없지만, 그 트래픽이 Site-to-Site VPN 연결을 위해 가상 사설 게이트웨이로 간다면, 이 서브넷은 VPN-only 서브넷이라고 한다.
위 다이어그램에서는 Subnet 3이 VPN-only 서브넷이다. 현재 IPv6 트래픽은 지원하지 않는다.
가상 사설 게이트웨이를 통해서 타게이트웨이로 VPN 연결을 통해서 트래픽이 나간다면, VPN-only 서브넷이라고 한다.
서브넷의 종류와 상관없이, 서브넷의 내부 IPv4 주소는 항상 private이다 - AWS는 인터넷에 주소 블록을 전달하지 않는다.
각각의 서브넷은 라우팅 테이블과 연결되어 있으며, 서브넷에서 나가는 아웃바운드 트래픽을 위해 allowed 루트를 명시한다.
모든 서브넷은 자동적으로 VPC를 위한 main 라우팅 테이블과 자동적으로 연동된다.
VPC를 만들면, 위와 같이
대상이 local이라고 되어있는(subnet끼리 VPC내부에서 통신을 자동적으로 다 엮어준다는 말) 라우팅 테이블이 자동 생성된다.
대상이 10.0.0.0/16 이라고 되어 있는데, VPC의 CIDR 블록 내부 통신을 라우팅 테이블을 통해서 다 서로 허용한다는 의미이다.
(각각의 가용영역에서 서브넷들이 서로 통신이 default로 가능하게 해놓았다는 의미!맞죠?)
위 다이어그램에, Subnet 1과 연결된 라우팅 테이블은 모든 IPv4 트래픽 (0.0.0.0/0)과 IPv6 트래픽 (::/0)을 인터넷 게이트웨이로 라우팅해준다.
인스턴스 1A가 IPv4 변동 아이피 주소와 IPv6 주소를 가지고 있기 때문에, IPv4와 IPv6를 통해서 인터넷으로 연결된다.
위 다이어그램에 초록색으로 명시된 것을 보면,
public 서브넷을 위한 라우팅 테이블은 인터넷 게이트웨이와 연결되어 IPv4(0.0.0.0/0)와 IPv6(::/0)가 인터넷게이트웨이와 연결되어 있다.
외부 인터넷 서비스와 연결될 때,
모든 요청이 인터넷 게이트웨이로 들어와서 라우팅 테이블을 통해서 public 서브넷 안으로 들어온다.(AWS에서 진짜 맛깔나게 그림을 그려놨다..)
당연히 private 서브넷을 위한 라우팅 테이블은 인터넷 게이트웨이와 연결되면 안되겠죠?
예) 인스턴스 2A는 private 서브넷이다.
라우팅테이블 생성시 VPC 선택을 하면, 내부 통신은 자동 연동 됩니다!
인스턴스 2A는 인터넷에 연결할 수 없지만, VPC 내부 다른 인스턴스에는 연결이 된다. (위에 설명 했죠?)
VPC 안에 있는 인스턴스를 IPv4를 통해서 아웃바운드 연결을 설정해줄 수 있지만, NAT 게이트웨이 혹은 인스턴스를 활용하여 인터넷으로부터 오는 요청하지 않은 인바운드 연결을 막을 수 있다.
private 서브넷 내에 있는 인스턴스에 인터넷 연결을 하려면, NAT 게이트웨이 혹은 인스턴스를 활용하여 연결할 수 있다.
(이 부분은 향후 NAT 게이트웨이 편을 다뤄볼 예정이다.아직 필요한 서비스가 없었어서..)
security groups 와 ACL은 다음에 다루겠다..
간단하게 정리 해보자면,
VPC내 CIDR 블록 정의를 통해 내가 할당할 수 있는 서브넷의 크기를 지정한 후
Subnets를 VPC 내에서 각각의 가용영역에 할당하여 생성하고
Pulbic 서브넷은 라우팅 테이블을 통해 Internet Gateway를 거쳐 외부 인터넷과 통신하고
Private 서브넷은 라우팅 테이블을 통해 VPC 내부에서만 통신하고 외부로 인터넷과 통신하지 않으며
VPN-only 서브넷은 Internet Gateway를 통해서 통신하지 않으며, VPN 연결을 통하여 원격 네트워크와 통신할 수 있다!
https://docs.aws.amazon.com/vpc/latest/userguide/VPC_Subnets.html
서브넷 생성하기
pulbic, private 서브넷 생성을 위한 이름을 지어준다.
가용 영역은 설정하지 않아도 된다. (아마존에서 랜덤으로 골라줌)
(고를 수 있는 옵션에는 4가지 가용영역이 있다! (2a, 2b, 2c, 2d)근데 얘네들은 어디에 있는걸까?)
IPv4 CIDR 블록은 VPC IPv4 CIDR 블록에 따라 설정하면 된다. 이전 글에서 VPC IPv4 CIDR 블록을 10.0.0.0/16으로 설정했기 때문에, 10.0.1.0/24 & 10.0.249.0/24로 설정했다. (딱히 이유는 없다. 사용가능한 영역만 맞춰준다면!)
이후 서브넷 내에 인스턴스를 만들어서 외부 통신을 해야한다면 (당연히)
위 설정을 해놓기를 추천한다.
Public 서브넷은 인터넷 게이트웨이와 연결되어 외부 서비스와 통신이 가능한데 (인터넷 통신)
그 때 공인 IP 주소가 있어야 한다. (다음편, Internet Gateway 편에서 다룰 예정이다.)
매번 AWS 제공 docs는 한국말이든 영어든 읽어도 무슨 말인지 이해가 안갔었는데
이렇게 자세히 잘 설명되어 있을 줄 몰랐다. 이제 무시하지말고 잘 읽어야겠다..
끝!
'Programming > Infrastructure' 카테고리의 다른 글
[ AWS ] RDS(Relational Database Service) 생성 및 적용 (0) | 2021.11.21 |
---|---|
[ AWS ] ACL 및 보안그룹 비교, 생성 및 적용 (0) | 2021.11.19 |
[ AWS ] 라우팅테이블(Route Table) 생성 및 라우팅 (0) | 2021.11.15 |
[ AWS ] 인터넷게이트웨이(Internet Gateway) 생성 및 라우팅 (2) | 2021.11.09 |
[ AWS ] VPC 생성하기 (0) | 2021.11.07 |