클라우드 네트워크 설계 · 서브넷과 라우팅 · 이론
퍼블릭 서브넷이라는 속성은 없다
한 줄 요약
서브넷에 '퍼블릭' 이라는 설정은 존재하지 않습니다. **라우팅 테이블에
인터넷 게이트웨이로 가는 기본 경로가 있으면** 퍼블릭이고, 없으면
프라이빗입니다. 그게 전부입니다.
왜 이게 필요했나
"퍼블릭 서브넷에 넣었는데 인터넷이 안 돼요" 라는 질문에 답하려면 이 사실을
알아야 합니다. 이름을 public-subnet-a 로 지었다고 퍼블릭이 되지 않습니다.
인스턴스가 인터넷에 나가려면 네 가지가 전부 맞아야 합니다.
1. 서브넷의 라우팅 테이블에 0.0.0.0/0 → igw-xxx 가 있다
2. 인스턴스에 공인 IP 가 붙어 있다
3. 보안그룹의 아웃바운드가 허용한다
4. 네트워크 ACL 이 인바운드·아웃바운드 양쪽을 허용한다
하나라도 빠지면 안 됩니다. 그리고 증상이 전부 "안 된다" 로 같아서
순서대로 확인하는 습관이 필요합니다.
표준 3계층 배치
VPC 10.0.0.0/16├─ 퍼블릭 서브넷 10.0.0.0/24, 10.0.1.0/24 (AZ-a, AZ-b)│ └ 로드밸런서, NAT 게이트웨이, 배스천├─ 앱 서브넷 10.0.16.0/20, 10.0.32.0/20│ └ 애플리케이션 서버 — 공인 IP 없음└─ 데이터 서브넷 10.0.48.0/24, 10.0.49.0/24 └ DB — 인터넷으로 나가는 경로 자체가 없음원칙은 하나입니다 — 인터넷에서 직접 닿을 수 있는 것을 최소로.
로드밸런서만 앞에 두고 나머지는 전부 뒤에 숨깁니다.
서브넷 크기를 다르게 잡은 것도 의도적입니다. 퍼블릭에는 몇 개 안 들어가고,
앱 계층은 오토스케일링으로 많이 늘어납니다.
각 AZ 마다 서브넷을 따로 만드는 이유
서브넷은 하나의 AZ 안에만 존재합니다. 여러 AZ 에 걸칠 수 없습니다.
그래서 다중 AZ 구성을 하려면 계층마다 AZ 개수만큼 서브넷이 필요합니다.
3계층 × 2 AZ = 서브넷 6개가 최소입니다.
라우팅 테이블 읽는 법
목적지 대상10.0.0.0/16 local ← VPC 내부. 지울 수 없다0.0.0.0/0 igw-abc123 ← 나머지 전부 인터넷으로가장 구체적인 경로가 이깁니다(longest prefix match). 10.0.0.0/16 은/16 이라 0.0.0.0/0 보다 구체적이므로 VPC 내부 통신은 인터넷으로 나가지
않습니다. 이 규칙을 알면 온프레미스 연결이 왜 그렇게 동작하는지도 설명됩니다.
프라이빗 서브넷의 아웃바운드
DB 는 인터넷에 노출되면 안 되지만 패키지 업데이트는 받아야 합니다.
그래서 NAT 게이트웨이를 씁니다.
프라이빗 라우팅 테이블0.0.0.0/0 → nat-xyz (퍼블릭 서브넷에 있는 NAT)NAT 는 나가는 것만 허용합니다. 밖에서 먼저 연결을 시작할 수 없습니다.
이 비대칭이 프라이빗 서브넷의 핵심입니다.
주의 — NAT 게이트웨이는 시간당 요금 + 처리 데이터 요금이 붙습니다.
프라이빗 서브넷에서 대용량을 계속 내려받으면 여기서 비용이 크게 납니다.
다음 코스에서 다시 다룹니다.
연결이 안 될 때 보는 순서
1. 보안그룹 — 가장 흔하다. 인바운드 규칙 확인2. 라우팅 테이블 — 그 목적지로 가는 경로가 있나3. NACL — 서브넷 수준. 아웃바운드도 확인(상태 비저장이라 양방향 필요)4. 공인 IP — 퍼블릭 접근이면 붙어 있나5. 대상 자체 — 프로세스가 그 포트에서 듣고 있나이 순서로 보면 대부분 3단계 안에 원인이 나옵니다.
현장에서 만나는 모습
- 이름이
public-subnet-a인데 인터넷이 안 됩니다. 라우팅 테이블에 IGW 로 가는 기본 경로가 없었습니다 — 이름은 아무 효력이 없습니다. - 로드밸런서를 서브넷 하나에만 붙여 두고 다중 AZ 라고 믿었습니다. 서브넷은 AZ 하나에만 존재하므로 그 구성은 단일 AZ 였습니다.
- 프라이빗 서브넷에서 패키지 업데이트가 안 됩니다. NAT 는 만들어 두었지만 그 서브넷이 다른 라우팅 테이블에 연결돼 있었습니다.
- DB 를 퍼블릭 서브넷에 두고 보안그룹으로만 막다가, 규칙 한 줄을 잘못 여는 날 그대로 노출됐습니다. 계층을 나누는 것은 실수 하나가 사고가 되지 않게 하는 장치입니다.
다음에 볼 것
보안그룹과 NACL — 이름이 비슷하지만 동작 방식이 근본적으로 다릅니다.