grep

Engineering

VPC 사용법(TOAST 서비스 들여다보기)

NHN

2018년 10월 1일

원문에서 보기 ↗

VPC (Virtual Private Cloud)

VPC는 논리적으로 격리된 가상 네트워크을 구성할 수 있는 기능을 제공합니다. 이를 통해 격리된 환경의 인프라 운영이 가능합니다.

VPC는 Subnet, Internet Gateway, Routing, Peering 등의 네트워크에 관련된 리소스를 관리할 수 있도록 구성되어 있습니다. 여기서는 VPC를 구성하는 각 리소스의 개요 및 사용법에 대해 알아봅니다.

1 main.png

Subnet (서브넷/Subnetwork)

Subnet은 IP 네트워크을 논리적으로 나눈 서브셋입니다. IP 네트워크을 하나로 크게 사용할 수도 있겠으나, 하나의 네트워크에 IP가 증가할 수록 통신을 위한 라우팅정보 교환이나 브로드캐스팅 트랙픽등이 증가하게 되어 트래픽 처리 효율이 떨어집니다.

따라서, 서로간의 간섭을 없애고 불필요한 트래픽을 줄이기 위한 목적으로 Subnet이 이용됩니다.

LAN 또는 인터넷에 연결되어 있는 상태라면 적어도 하나의 IP 주소를 부여받게 됩니다. 부여 받은 IP 주소는 Subnet에 속한 IP 주소로서, 아래 예와 같이 ifconfig 명령을 통해 NIC에 할당된 IP와 해당 IP의 Subnet을 확인할 수 있습니다.

# ifconfig
eth0      Link encap:Ethernet  HWaddr FA:16:3E:36:15:45
          inet addr:192.168.0.25  Bcast:192.168.0.255  Mask:255.255.255.0
          inet6 addr: fe80::f816:3eff:fe36:1545/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1454  Metric:1
          RX packets:126360 errors:0 dropped:0 overruns:0 frame:0
          TX packets:4212 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:10626176 (10.1 MiB)  TX bytes:429772 (419.6 KiB)

eth1      Link encap:Ethernet  HWaddr FA:16:3E:7D:DF:30
          inet addr:172.20.0.27  Bcast:172.20.0.255  Mask:255.255.255.0
          inet6 addr: fe80::f816:3eff:fe7d:df30/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1454  Metric:1
          RX packets:19814026 errors:0 dropped:0 overruns:0 frame:0
          TX packets:20493074 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:1730568117 (1.6 GiB)  TX bytes:6874511302 (6.4 GiB)

lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:13676 errors:0 dropped:0 overruns:0 frame:0
          TX packets:13676 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:3177996 (3.0 MiB)  TX bytes:3177996 (3.0 MiB)

NIC eth0의 경우 192.168.0.25가 할당되어 있으며, Mask값 (255.255.255.0)을 통해 Subnet을 계산해 낼 수 있게 됩니다. CIDR 형태로 표현한다면 192.168.0.0/24 의 Subnet에 속한 IP임을 알 수 있습니다. (참고 : https://en.wikipedia.org/wiki/Classless_Inter-Domain_Routing#IPv4_CIDR_blocks)

TOAST에서 Project 생성 및 Network 상품 활성화시, 기본으로 VPC와 Subnet이 한개씩 기본으로 생성됩니다.

리소스제공 내역
VPC192.168.0.0/16 (/24 * 256)
Subnet192.168.0.0/24

VPC IP 네트워크 안에서 Subnet을 나눠서 이용할 수 있도록 웹콘솔에서 Subnet 생성/삭제 기능이 제공됩니다. Subnet 생성시 VPC가 제공하는 IP 범위 내에서만 생성이 가능합니다.

2.png

Routing

Routing은 네트워크 안에서 데이터를 전송시 사용될 경로를 지정하는 과정을 의미합니다. 여기에서는 Rule 기반의 정적 라우팅에 대해서만 설명합니다. 정적 라우팅은 라우터에 패킷이 도달하면, 패킷의 대상 IP가 판별되며, 정해진 룰에 따라 패킷의 흐름이 결정됩니다. 대상 IP가 룰에 매칭되지 않으면 디폴트 라우팅을 따르게 됩니다.

일반적인 리눅스 시스템에서 ip route 명령을 이용하면 아래와 같은 내용을 볼 수 있습니다.

# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
192.168.0.0     0.0.0.0         255.255.255.0   U     0      0        0 qr-7998b0a6-39
192.168.10.0    0.0.0.0         255.255.255.0   U     0      0        0 qr-4ffdaa94-2c

위의 예에서는 대상 IP가 192.168.0.0/24 에 속하는 패킷에 대해서, qr-7998b0a6-39 라우터 인터페이스를 통해 내보내고, 대상 IP가 192.168.10.0/24인 경우 qr-4ffdaa94-2c 라우터 인터페이스를 통해 내보내게 됩니다.

라우터 내부에서는 설명한 바와 같은 설정들이 존재하고, 이러한 과정을 자동화 하기 위해 VPC는 Routing Table 연결 기능과 Routing 메뉴를 제공합니다.

'Routing Table 연결' 기능을 이용하면 VPC내 서로 다른 Subnet간 네트워크 통신이 가능하도록 설정할 수 있습니다. 복수개의 Subnet을 하나의 Routing Table에 연결할 수 있으며, 이렇게 연결된 Subnet들은 추가적인 작업 없이 서로 통신이 가능하도록 VPC 내부에서 자동으로 설정됩니다.

VPC 내부 네트워크에서 외부 네트워크로 접속을 위해 외부 네트워크에 연결 가능한 게이트웨이를 생성해야하며, VPC는 Internet Gateway 라는 이름으로 지원하고 있습니다.

VPC 의 Routing 메뉴에서는 현재 Internet Gateway로 가는 패킷의 경로만 지원하고 있으며 추후 VPN 연결을 위해 VPN Gateway를 지정할 수 있도록 지원할 계획입니다.

Peering

서로 다른 VPC는 완전히 격리된 네트워크 환경입니다. VPC 간에 연결이 필요한 경우가 발생하면, Peering을 이용해 연결할 수 있습니다.

3.png

그림에서 보는 바와 같이 VM1 - VM3는 Peering으로 연결되어 있기 때문에 통신이 가능한 상태입니다. 또한 VM2 - VM1 도 통신이 가능한 상태입니다. Peering으로 연결된 VPC 끼리만 통신이 가능하며 그림에서와 같이 VPC1 - VPC3, VPC1 - VPC2가 연결되었더라도 VM3와 VM2간 통신은 지원하지 않습니다.

또한, Peering으로 연결할 VPC들은 반드시 서로 겹치지 않는 IP 주소 범위를 가져야 합니다.