[GCP Associate Cloud Engineer] 가상 네트워킹(Virtual Networking) & Compute Engine
Virtual Private Cloud (VPC)란?
VPC는 퍼블릭 클라우드 내에 호스팅된 보안된 개별 프라이빗 클라우드이다.
고객은 VPC에서 코드 실행, 데이터 저장, 웹사이트 호스팅 등 일반 프라이빗 클라우드에서 할 수 있는 작업을 수행 할 수 있다.
VPC는 퍼블릭 클라우드의 확장성과 편의성과 프라이빗 클라우드의 데이터 격리를 결합한 모델이다.
VPC의 주요기능
- 네트워크 세분화
- 방화벽 규칙을 사용해 인스턴스 접근 제한
- 정적 라우트를 설정해 특정 대상지로 트래픽 전달
Google Cloud VPC의 특징
- 글로벌 네트워크
Google VPC 네트워크는 글로벌 범위를 가지고, 단일 VPC 네트워크는 전 세계의 모든 Google Cloud 리전에 서브넷(subnet)을 가질 수 있다.
서브넷은 VPC 네트워크의 세분화된 조각으로, 리전 내의 여러 영역을 아우른다.
- 서브넷 확장성
기존에 구성된 가상 머신에 영향을 주지 않고, 서브넷의 IP 주소 범위를 확장해 크기를 늘릴 수 있다.
예를들어 VPC 네트워크 vpc1이 있고, asia-east1과 us-east1 리전에 서브넷 두 개가 정의되어 있다면 이 VPC에 연결된 세 개의 Compute Engine VM은 서로 다른 영역에 위치해 있어도 같은 서브넷에서 이웃처럼 연결 가능하다.
이를 통해 장애에 강하면서도 간단한 네트워크 레이아웃 설계 가능하다.
서브넷 장점
공용 리소스와 사설 리소스를 분리
클라우드에서 생성하는 리소스에는 공용 리소스와 사설 리소스가 있다.
공용 리소스는 인터넷에서 접근할 수 있는 리소스로 대표적으로 로드 밸런서가 있다.
따라서 웹 애플리케이션을 외부에 노출하려면 로드 밸런서를 통해 인터넷에서 접근 가능해야 한다.
사설 리소스는 외부 인터넷에서 접근할 수 없어야 하는 리소스로 대표적으로 VM 인스턴스가 있다.
리소스를 여러 리전에 배포하여 고가용성 확보
Google Cloud의 VPC는 글로벌 리소스이지만, 서브넷은 특정 리전에 속한다.
따라서 멀티 리전에 배포를 하여 하나의 리전에 장애가 발생하더라도 다른 리전의 인스턴스를 활용할 수 있어 가용성이 향상된다.
CIDR 블록
CIDR(Classless Inter-Domain Routing)는 IP 주소를 효율적으로 할당하고, 네트워크를 효과적으로 구성하기 위한 표기법이다.
시작 IP 주소 + / + 숫자 형식으로 표현된다. (예시: 69.208.0.0/28)
/숫자 부분은 IP 주소에서 고정된 비트 수를 의미한다.
과거에는 클래스 A, B, C 와 같은 고정된 서브넷 크기를 사용하였는데, CIDR은 유연한 네트워크 크기 조정을 허용하며, IP 낭비를 최소화한다.
CIDR 블록의 구조
CIDR 표기법은 IP 주소와 서브넷 마스크를 간단히 표현하는 방법이다.
IP 주소 예시: 69.208.0.0 → 01000101.11010000.00000000.00000000
CIDR 표기법에서 /숫자는 고정된 비트 수를 나타낸다.
예를들어 69.208.0.0/28와 같은 주소가 있을 경우 앞 28비트는 고정, 마지막 4비트는 변경 가능하다.
변경 가능한 마지막 4비트의 범위는 0000 ~ 1111 (0 ~ 15)이고 따라서 IP 주소 범위는 69.208.0.0 ~ 69.208.0.15이 된다.
CIDR주소 예시
CIDR | 고정 비트 수 | 가변 비트 수 | IP 개수 | 범위 |
/32 | 32비트 | 0비트 | 1개 | 단일 IP |
/30 | 30비트 | 2비트 | 4개 | 192.168.1.0 ~ 192.168.1.3 |
/28 | 28비트 | 4비트 | 16개 | 192.168.1.0 ~ 192.168.1.15 |
/26 | 26비트 | 6비트 | 64개 | 192.168.1.0 ~ 192.168.1.63 |
/24 | 24비트 | 8비트 | 256개 | 192.168.1.0 ~ 192.168.1.255 |
/16 | 16비트 | 16비트 | 65,536개 | 192.168.0.0 ~ 192.168.255.255 |
/8 | 8비트 | 24비트 | 16,777,216개 | 10.0.0.0 ~ 10.255.255.255 |
/0 | 0비트 | 32비트 | 4,294,967,296개 | 0.0.0.0 ~ 0.0.0.0 |
/32 : 단 하나의 IP 주소
/30 : 4개 IP 주소 (네트워크, 브로드캐스트 포함)
/24 : 일반적인 서브넷 크기 (256개)
/16 : 65,536개 IP (대규모 네트워크에 사용)
/8 : 클래스 A 네트워크 (1,600만 개 이상 IP 포함)
/0 : 모든 IPv4 주소
CIDR을 직접 실습해보기 위해서 CIDR.XYZ 사이트를 통해서 시각적으로 이해 가능하다.
Interactive IP address and CIDR range calculator - cidr.xyz
CIDR (Classless Inter-Domain Routing) notation is a compact method for specifying IP address ranges and network masks. It is widely used in network configuration and management. An IP address consists of 4 octets, each containing 8 bits that represent valu
cidr.xyz
Compute Engine
Compute Engine은 Google Cloud의 IaaS 솔루션으로, Google 인프라에서 가상 머신을 생성 및 실행 가능하게 한다.
이는 선결제 없이 시작 가능하고, 빠르고 일관된 성능을 제공하여 사용자 요구에 따라 CPU, 메모리, 스토리지, 운영체제 등을 구성 가능하다.
이는 Google Cloud 프로젝트와 리소스를 관리할 수 있는 Google Cloud Console, Google Cloud CLI, Compute Engine API를 통해 만들 수 있다.
그리고 Google이 제공하는 Linux와 Windows Server 이미지를 사용하여 인스턴스를 실행할 수 있는데, 사용자가 원하는 버전의 운영체제를 구성할 수 있다.
Cloud Marketplace
Google 및 서드파티 제공 솔루션을 통해 빠르게 시작 가능하다.
이는 소프트웨어, 가상 머신 인스턴스, 스토리지 또는 네트워크 설정을 수동으로 구성할 필요가 없지만 필요한 경우 출시 전에 수정할 수 있다.
그리고 대부분의 솔루션은 추가 비용 없이 사용 가능하지만, 일부 서드파티 상용 소프트웨어는 사용료가 부과될 수 있고, 해당 예상 월별 비용이 사전 표시된다.
Sole tenant(단독 테넌트)
VM을 생성되면 여러 사람에게 공유될 수 있다. 하지만 특정 하드웨어에만 공유하길 원하는 경우가 생길 수 있는데 이때 사용하면 좋은것이 단독 테넌트이다.
단독 테넌트를 통해서 여러 고객이 동일한 하드웨어를 공유하는 기본 환경과 달리, 기업의 데이터와 워크로드를 분리하는 보안과 성능 이점이 있다.
노드 그룹에 이름을 지정하고 원하는 지역을 선택한다. 그리고 노트 템플릿에 사용할 노드 유형을 선택하고 특정 노드 그룹에 VM인스턴스를 배치하기 위해 Affinity Label을 추가한다. 그리고 추후에 VM인스턴스 생성시 추가된 라벨을 통해 특정 노드 그룹에 VM을 배치하도록 설정할 수 있다.
Compute Engine 가격 정책
최소 1분 과금 후 초 단위로 청구하고, 한 달 동안 25% 이상 사용된 VM에 대해 자동으로 추가 분당 할인이 적용된다.
그리고 예측 가능한 워크로드의 경우, 1년 또는 3년간의 사용을 약정을 통해 커밋 사용 할인이 가능하다.
추가적으로 선점형 및 Spot VM이 있는데 이는 Compute Engine이 리소스 필요 시 작업을 종료할 수 있는 권한을 가진다.
스토리지
Compute Engine은 특정 스토리지 옵션이나 머신 타입 없이도 높은 처리량을 제공하며, 추가 비용이 없다.
Autoscaling
컴퓨팅 엔진을 사용하면 사전 정의된 머신 타입을 선택하거나, 맞춤형 머신 타입으로 vCPU 수와 메모리 용량을 사용자 정의 가능하다.
이는 Compute Engine의 오토스케일링 기능을 사용하여 애플리케이션의 load metric에 따라 가상 머신을 자동 추가 또는 제거 된다.
예를들어 애플리케이션 부하가 증가하면 VM을 추가하고, 부하가 감소하면 VM을 줄인다.
그리고 Virtual Private Cloud(VPC)는 다양한 유형의 로드 밸런싱을 지원하여 VM 간 트래픽을 분산시킨다.
따라서 오토스케일링과 결합해 트래픽을 효율적으로 처리 가능하다.
VM 확장
Compute Engine을 사용하면 매우 큰 VM을 구성할 수 있다.
일반적으로 Scaling up이 아닌 Scaling out을 통해 확장을 한다.
Scaling up: 하나의 VM에 더 많은 리소스 추가
Scaling out: 여러개의 VM을 추가
VM의 최대 CPU 수는 선택한 머신 패밀리(machine family)와 사용자의 쿼터에 따라 결정되는데 쿼터는 존에 따라 다를 수 있다.
이에대한 자세한 내용은 https://cloud.google.com/compute/docs/machine-resource아래 사이트에서 확인 가능하다.
머신 계열 리소스 및 비교 가이드 | Compute Engine Documentation | Google Cloud
Google Cloud 리소스 가이드에서 컴퓨팅 인스턴스를 만들 때 선택할 수 있는 머신 계열, 시리즈, 유형에 대해 자세히 알아봅니다.
cloud.google.com
Google Cloud 방화벽 규칙
방화벽은 네트워크로 들어오고 나가는 트래픽을 제어하여 보안을 강화하는 역할을 한다.
특정 포트, 프로토콜, IP 주소 범위, VM 인스턴스 등을 기준으로 허용 또는 차단 규칙을 설정할 수 있다.
Google Cloud 방화벽은 기본적으로 Stateful하다.
Stateful하다는 것은 들어오는 요청이 허용되면, 이에 대한 응답도 자동 허용되는 것으로 일반적으로 방화벽에서 응답을 따로 설정할 필요 없다.
방화벽 규칙은 우선순위 를 가지고 있으며, 숫자가 낮을수록 높은 우선순위를 가진다.
방화벽 규칙에는 0 ~ 65535 사이의 우선순위 값을 설정할 수 있다.
0이 가장 높은 우선순위, 65535가 가장 낮은 우선순위를 의미한다.
기본 방화벽 규칙은 65535의 낮은 우선순위를 가딘다.
기본적으로 추가되는 방화벽 규칙
규칙 이름 | 포트 | 설명 | 우선순위 |
default-allow-internal | 모든 포트 | 동일한 네트워크 내의 VM 인스턴스 간 통신 허용 | 65534 |
default-allow-ssh | TCP: 22 | SSH 접속 허용 | 65534 |
default-allow-rdp | TCP: 3389 | RDP (윈도우 원격 접속) 허용 | 65534 |
default-allow-icmp | ICMP | Ping 요청 허용 | 65534 |
동일한 VPC 내의 VM끼리는 기본적으로 통신 가능하고, SSH와 RDP는 기본적으로 허용된다.
하지만, 기본적으로 모든 인바운드 트래픽은 차단되므로 웹 서버(80, 443 포트) 등은 따로 허용해야 한다.
커스텀 방화벽
사용자는 기본 방화벽 규칙을 덮어쓰는 커스텀 방화벽 규칙을 만들 수 있다.
인바운드 규칙
외부에서 GCP 내부로 들어오는 트래픽을 제어
# 웹 서버(80, 443 포트) 허용
gcloud compute firewall-rules create allow-web \
--network=my-vpc \
--direction=INGRESS \
--action=ALLOW \
--rules=tcp:80,tcp:443 \
--source-ranges=0.0.0.0/0 \
--priority=1000
--direction=INGRESS: 인바운드 트래픽 규칙
--action=ALLOW: 허용
--rules=tcp:80,tcp:443: HTTP(80)와 HTTPS(443) 트래픽 허용
--source-ranges=0.0.0.0/0: 모든 IP에서 접근 가능
--priority=1000: 기본 규칙(65534)보다 높은 우선순위로 설정
아웃바운드 규칙
GCP 내부에서 외부로 나가는 트래픽을 제어
# 특정 IP로의 아웃바운드 트래픽 차단
gcloud compute firewall-rules create deny-outbound \
--network=my-vpc \
--direction=EGRESS \
--action=DENY \
--rules=all \
--destination-ranges=203.0.113.0/24 \
--priority=900
--direction=EGRESS: 아웃바운드 트래픽 규칙
--action=DENY: 차단
--rules=all: 모든 트래픽 차단
--destination-ranges=203.0.113.0/24: 특정 IP 대역(203.0.113.0~203.0.113.255)으로 나가는 트래픽 차단
--priority=900: 높은 우선순위 (낮은 숫자)
특정 태그 또는 서비스 계정 기반 방화벽 규칙
Google Cloud에서는 인스턴스 태그 또는 서비스 계정을 기반으로 방화벽을 설정할 수도 있다.
# 특정 태그가 있는 인스턴스에 SSH(22번 포트) 허용
gcloud compute firewall-rules create allow-ssh-tagged \
--network=my-vpc \
--direction=INGRESS \
--action=ALLOW \
--rules=tcp:22 \
--source-ranges=0.0.0.0/0 \
--target-tags=ssh-enabled \
--priority=1000
--target-tags=ssh-enabled: 태그가 ssh-enabled인 인스턴스만 적용