주녁, DevNote
article thumbnail

개요

이 시리즈는 코드로 인프라를 구축하는 IaC(Infrastructure as Code)를 이해하기 위해 작성했다.

AWS의 EKS 클러스터를 코드로 구축하고 ArgoCD를 이용해 클러스터 내 어플리케이션을 배포한다.

인프라 구성 방법을 개개인의 노하우와 숙련도가 아닌 자산으로 코드로 남길 수 있도록 한다.

목표

  • AWS의 기본 네트워크 개념을 숙지한다.
  • IaC의 필요성을 이해한다.

여정

클라우드? 버튼만 눌러도 만드는데?

그렇다.

클라우드는 버튼만 몇번 클릭해도 만들 수 있는 세상이 되었다.

AWS에서는 친절하게 예제와 세미나도 자주 열어준다.

편리한 AWS 콘솔

그렇지만, 클라우드를 만들려면 이해해야 하는 개념들이 참 많다.

당연히 (나같은) 초심자들은 뭔지도 모르고

누르라고 하니까 버튼 몇 번을 눌러 만들게 된다.

 

'버튼 몇 번' 이라는 수식어 안에 많은 개념이 녹아들어 있다.

이제 실제 네트워크를 구성하면서 필요한 최소한의 개념을 알아보자


AWS 네트워크 컨셉

다음은 AWS에서 네트워크를 만드는 데 주로 쓰이는 개념들이다.

어지러우니 자세히 보지 않아도 된다. (자료의 출처는 이곳이다! 더 큰 화면으로 볼 수 있다)

방대한 AWS 네트워크 개념도

알겠는가?

이제 '버튼 몇 번'에 얼마나 많은 것들이 녹아있는지?

 

이 개념들의 특징을 모두 외울 필요는 없다.

그러나, 어떤 역할을 하는지 아는 것은 중요하다. 

중요한 부분은 강조 표시를 해두었으니 마음 편하게 보자!


 

VPC(Vitual Private Cloud)

  • 사용자가 정의한 가상의 네트워크 공간
  • 완전한 네트워크 제어 가능(IP, Subnet, Route Table, 보안 등)
  • 생성 시 CIDR* 블록을 지정해서 생성(생성 후 변경 불가능)
  • VPC 내 모든 인스턴스들은 CIDR 블록 범위 내 사설 IP 부여
  • 개별 인스턴스에 공인 IP 할당 가능
  • 향후 직접 연결할 가능성 있는 주소가 중복되지 않도록 할당

CIDR : 클래스 없는 도메인 간 라우팅 기법

→ '10.0.0.0/24 라면 IP 주소의 총 32비트 중에, 24개 비트가 마스크 되어 8비트(2^8개, 256개)만 할당할 수 있다.


서브넷(Subnet)

  • 네트워크를 더 작은 단위로 분할하는 방법
  • 사설 IP 대역(RFC1918) 사용 권고
    • 10.0.0.0/8 (10.0.0.0에서 10.255.255.255까지)
    • 172.16.0.0/12 (172.16.0.0에서 172.31.255.255까지)
    • 192.168.0.0/16 (192.168.0.0에서 192.168.255.255까지)
  • 서브넷 범위는 보통 /24(256개) 이상을 권고
    • 192.168.1.0/24 → 192.168.1.0에서 192.168.1.255까지
  • Public, Private 서브넷으로 나눌 수 있으며, 생성 후 범위 변경 불가능
  • 처음 4개, 마지막 1개는 예약된 주소로 사용 불가

라우팅 테이블(Routing Table)

  • 네트워크 트래픽이 향하는 방향을 결정해주는 규칙 세트
  • 들어오고 나가는 트래픽 대상(Target), 목적지(Destination)을 설정해야함
  • 트래픽 대상은 서브넷 단위로 설정하며, 목적지는 1곳만 정할 수 있다.
  • 라우팅 테이블은 여러개의 서브넷을 지정할 수 있지만, 서브넷은 최대 1개의 라우팅 테이블만 가질  수 있음
  • 서브넷이 아무런 라우팅 테이블을 지정하지 않아도 VPC 내부적으로 통신 가능
  • Default Routing Table이 VPC 내부적으로 통신하게 해줌(VPC의 CIDR 대역 → local로 트래픽 전송)
  • 라우팅 테이블을 생성하면 기본적으로 Default Routing Table과 같은 규칙이 자동 생성
  • 내부 트래픽이 외부(인터넷)으로 나가려면 라우팅 테이블에 게이트웨이를 명시해줘야함

더 자세한 설명을 보고싶다면 여기 참조!


게이트웨이(Gateway)

  • 한 네트워크에서 다른 네트워크로 통신을 연결하는 접근점
  • 네트워크 간 데이터 전송을 라우팅, 프로토콜 변환, 중계

NAT 게이트웨이

  • 사설 IP 주소를 공인 IP 주소로 변환하는 기술을 NAT라고 함.
  • VPC 내부의 사설 네트워크 내부 호스트가 공인 인터넷과 통신할 수 있도록 해줌
    • SNAT(Source NAT) : 사설 IP 주소에서 나가는 트래픽을 공인 IP 주소로 변환
    • DNAT(Destination NAT) : 들어오는 외부 트래픽을 사설 IP 주소로 변환

인터넷 게이트웨이(IGW)

  • VPC와 인터넷 사이 연결을 담당하는 게이트웨이
  • VPC의 서브넷들이 IGW를 통해 인터넷과 통신
  • 인터넷으로 나가는 트래픽에 자동으로 SNAT 적용
  • 인터넷에서 들어오는 트래픽은 VPC의 퍼블릭 서브넷으로 라우팅

보안 그룹(Security Group)

  • 인스턴스 단위로 동작하는 방화벽 규칙
  • 인스턴스 당 한 개 이상의 보안 그룹을 할당 가능
  • 인바운드 및 아웃바운드에 대한 Allow 규칙만 설정 가능
  • 특정 IP 주소 범위, 프로토콜, 포트 번호에 기반하여 설정
  • 인바운드 요청에 대한 응답 트래픽은 자동으로 허용

너무 추상적이여서 모르겠어요!

솔직히 나도 처음 공부하면서 이게 무엇인가 한참 고생하고서야 알게 되었다.

그래서 나와 같이 이해하는데 어려움이 있는 사람들을 위해

위의 요소가 어떤 관계를 가지는지 그림으로 그려보았다!

 

Region을 설정하면 이런 일을 할 수 있다

사용자가 AWS가 소유한 데이터센터가 있는 리전(Region)을 지정하면

VPC를 만들 수 있게 되고, VPC를 만들면 서브넷을 만들 수 있게 된다.

 

이 서브넷은 어떻게 활용할 수 있을까? 

생성한 서브넷으로 트래픽이 흐르는 과정

이런 식으로 Private, Public 서브넷으로 나눠서 설정할 수 있다.

그림 상단을 보면 Cluster Node는 EC2 Instance, 즉 내부 컴퓨터라고 보아도 무방하다.

  • 노란색 선은 내부 컴퓨터끼리 통신을 나타내는데, 내부 통신을 하려면 보안 그룹에서 허용해야 한다는 뜻이다.
  • 빨간색 선은 내부 컴퓨터가 외부 인터넷과 통신하려면 NAT Gateway를 거쳐야한다는 뜻이다.
    • 물론 NAT 특성상 고정 IP가 있어야 하기 때문에 Elastic IP라는 AWS 리소스를 사용해야 한다
  • 파란색 선은 외부 인터넷 트래픽이 내부로 들어위해서는 NLB(L4 Network Load Balancer)와 Target Group을 거쳐야 한다는 뜻이다
    • Target Group은 내부 컴퓨터 상태들을 모니터링하면서 정상이고 바쁘지 않은 컴퓨터에게 트래픽을 보내준다.

 

이정도면 일단 VPC를 구성하는 기본적인 요소는 충분히 설명한 듯 하다

(빠진 요소가 있다면 댓글로 남겨주세요!)

 


이제 버튼 누르는 건 할 수 있을지도?

이러한 요소를 AWS 콘솔에서 직접 하나씩 만드는 것은 어렵지 않다

하지만 N개를 만들어야한다던가,

설정을 깔끔하게 삭제한다던가,

다른 팀과 구분한다던가,

일이 많아질 경우에는 번거로운 일이 되어버린다.

 

이를 해결해줄 수 있는 것이 Infrastucture as Code, IaC이다.

Hasicorp에서 만든 IaC 오픈소스 도구, Terraform

이를 구현한 것이 현재 IaC에서 가장 대중적인 Terraform이다.


Q & A

  • VPC가 외부랑 연결할 수 있는 방법은 IGW나 NAT 게이트웨이 뿐인가요?

VPC가 외부 네트워크(꼭 인터넷 인것은 아님)와 연결하는 방법은 4~5가지로 많다.

이 부분은 데이터센터를 이용한다던가, On-premise 구성이 있다던가 상황마다 선택하기 나름이므로 설명하지 않았다.

필요하신 분은 아래 키워드를 통해 검색해보면 좋을 듯 하다!

  • VPC Peering
  • AWS Transit Gateway
  • AWS VPN
  • AWS EndPoint

마무리

이번 시간에는 가장 많이 사용되는 AWS에서

네트워크를 구성하기 위해 필요한 개념을 설명과 흐름도를 통해 알아보았다.

다음 시간에는 Terraform이 어떻게 동작하는지 직접 VPC를 만들면서 실습해보도록 하자.


profile

주녁, DevNote

@junwork

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!