구글 클라우드 시작하기

구글 클라우드 네트워크 이해하기

최유석

 

구글에 대해서 이야기를 할 때 수많은 서비스(검색, 지도, Apps, Gmail, YouTube, 등)뿐만 아니라 그러한 서비스들의 기반이 되는 수많은 데이터센터와 네트워크에 대해서 이견이 없는 한 그 어떤 기업도 따라오기 힘든 가장 강력한 인프라를 가진 회사라는 것에 대하여 인정 할 것이다. 앞서 언급한 구글의 내부 서비스뿐만 아니라 구글 클라우드에서 제공하는 네트워크 서비스에도 같은 인프라를 사용하고 있다. 이 글에서는 그러한 구글 클라우드에서 제공하는 기본적인 네트워크 서비스에 대해서 설명하고자 한다.

 

구글의 클라우드의 네트워크 인프라

구글 클라우드에 구축된 네트워크 기술인 주피터(Jupiter)는 초당 양방향 대역폭이 1페타비트 이상을 제공하며 최대 1.3Pbps을 지원한다. 메쉬구조인 클로스 토폴리지(Clos topology)를 적용하고 범용 스위치를 활용해 큰 규모의 스위치를 논리적으로 구현했다. 이를 효율적으로 제어하기 위해 중앙에서 제어하는 SDN(Software Defined Networking)을 구현했으며 오픈소스인 오픈 플로우(Open Flow)를 활용해 작동된다.

 

구글의 데이터센터들은 서로 광케이블 기반의 백본 네트워크로 묶여 있다. 또한 30개의 국가에 70개이상의 Points of presence(또는 Edge node)라고 해서 일종의 중계 서버를 배치하여 이 중계서버를 활용해 광케이블 네트워크를 사용할 수 있어서 글로벌 서비스 시에 거리에 따라 속도가 저하되는 일반 인터넷 망을 이용한 서비스에 비해 빠른 응답속도를 보장할 수 있다. (자세한 내용은 http://bcho.tistory.com/1109 참고)

 

리전과 존(Region / Zone)

리전은 지리적인 위치인 대륙 범위로 생각하면 될 것이다.

현재 미국 동부, 중앙과 유럽 서부와 아시아 동부 리전이 있다. 존은 각각의 리전(지역)에 실제로 위치한 데이터 센터이다.

네트워크의 구성요소 및 참고사항

구글 클라우드에서 내부 통신은 IPv4 유니캐스트(unicast)기반으로 통신하며, IPv6는 아직 지원되지 않는다.

 

네트워크와 프로젝트, 인스턴스의 관계

네트워크는 하나의 프로젝트안에 묶이고 하나의 프로젝트에 5개까지 생성 가능하다. 또한 VM인스턴스들은 하나의 네트워크안에 묶이고 하나의 네트워크에 다수의 VM을 연결할 수 있다.

 

VM인스턴스사이의 통신

각각의 VM들은 TCP, UDP, ICMP를 통해서만 통신한다.

 

네트워크 종류

네트워크 구성은 범위의 제약이 없는 하나의 글로벌 IP를 가지는 레거시 네트워크(legacy network) 또는 리전 범위의 서브넷(Subnet network)을 구성 할 수 있다.

 

레거시 네트워크의 경우 IP주소가 리전 또는 존 범위로 그룹화 되어있지 않다. (IP가 연속적이지 않다)

 

Legacy Networks (non-subnet) 예시

이미지 출처 : https://cloud.google.com/compute/docs/networking

 

서브넷의 경우 자동(auto)모드와 맞춤설정(custom)모드로 구성할 수 있으며 자동(auto)모드로 구성 시 미리 정의 된 IP범위(아래 이미지 참조)와 게이트웨이를 사용하여 서브넷이 구성된다.

리전 당 하나의 자동(auto)모드 서브넷 생성 가능

출처 : https://cloud.google.com/compute/docs/networking#subnet_network

맞춤설정(custom)모드로 서브넷을 구성 시에는 생성 시 리전범위에서 IP범위(10.0.0.0/8 또는 192.168.0.0/16이내)를 지정하여야 하며 0, 1또는 다수의 서브넷을 구성 할 수 있다. (프로제트 당 최대 100개)

 

Subnet network 예시

이미지 출처 : https://cloud.google.com/compute/docs/networking

 

레거시(legacy) 네트워크와 서브넷(subnet) 네트워크는 상호 변경이 불가능하다.

 

방화벽 규칙(Firewall-rules)

기본적으로 모든 Inbound(내부로 들어오는) 트래픽에 대해 막혀 있으며Allow 규칙만 생성 할 수 있다. (default네트워크의 경우 SSH연결을 위한 TCP 22번포트, RDP연결을 위한 TCP 3389포트 및 internal, icmp는 생성되어 있다)

 

IP Addresses

Internal IP : 모든 VM은 생성시 임시의 내부 IP를 가지고 있으며 이를 통해 같은 네트워크 상에서 포함된 VM인스턴스의 이름을 기반으로 내부VM들과 통신을 한다. subnet(auto/custom) 및 legacy 네트워크를 구성 시에 Internal IP에 적용된다.

아래 도식은 내부 및 외부와 통신하는 기본 구조를 나타낸 예이다.

External IP : 내부 및 외부(인터넷) 통신이 가능하며 VM생성 시에 임시(ephemeral)또는 고정(static)으로 생성하거나 없음(none)을 선택하여 외부IP(public IP) 없이 생성하고 앞서 설명한 내부IP(private IP)를 이용하여 로드밸런서를 통해 접근을 하게 하는 등의 방법을 이용하여 외부로의 접근을 차단하여 보안을 향상 시킬 수 있다. 또한 임시로 외부IP를 생성하고 고정IP로 변경도 가능하다.

 

아래 도식은 서로 다른 네트워크나 서로 다른 프로젝트에서의 VM간의 통신 예시이다.

**GCP내부에서의 서로 다른 프로젝트, 같은 프로젝트라도 서로 다른 네트워크에서 VM끼리 통신 시 External IP를 통해 통신을 하게 된다. 이 경우에도 외부 인터넷을 통하지 않고 구글 클라우드의 내부 광케이블 네트워크를 이용해서 통신하기 때문에 속도, 보안, 비용적인 부분에서의 이점을 얻을 수 있다.

 

Routes

네트워크에 연결된 글로벌 리소스이다. 각각의 VM인스턴스에 대해 읽기전용으로 생성된 라우팅 테이블이다.

VPN, many-to-one NAT, proxies구성 등에 사용된다.

 

네트워크 구성하기

가입하기

먼저 https://cloud.google.com/ 에 접속해서 Try It Free버튼을 클릭하여 로그인을 한 후, 해당되는 내용들을 입력하여 구글 클라우드 서비스에 가입을 한다.(신용카드 정보 입력 필요)

 

계정이 생성되면 자동으로 $300한도로 60일동안 사용할 수 있는 무료 평가판으로 이용 가능하다. ($300을 먼저 소모하거나 60일이 경과하면 소멸한다.)

신용 카드정보를 입력하지만 확인 용도이며, 사용자가 직접 업그레이드를 하지 않는 이상 비용이 결제 되지 않는다.

 

프로젝트 생성

구글 클라우드는 VM을 포함한 모든 서비스 자원들을 묶은 하나의 컨테이너 형태로 프로젝트라는 개념을 사용한다. 처음 무료 평가판을 등록하면 프로젝트가 없으니 새로 생성하여야 한다.

 

VM 인스턴스 생성하기 (자세한 정보는 http://bcho.tistory.com/1107를 참고)

좌측 상단의 탭을 클릭하여 Compute Engine을 선택하고 VM을 생성한다.

인스턴스이름은 net-test로 zone은 asia-east1-b로 생성하였으며, 나머지는 기본값으로 설정했다. 기본값으로 생성시 Internal IP의 경우 auto로 External IP의 경우 Ephemeral(임시)로 생성된다.

방화벽을 통해 HTTP트래픽 허용하는 부분은 인스턴스 생성 후 에도 변경가능하다.

액세스 범위(Access scopes)는 인스턴스 생성 시에만 지정할 수 있고 이후 변경이 불가능하다. 인스턴스를 사용 할 범위를 생각해서 신중하게 지정하여야 한다.

(기본적인 네트워크 구성 및 확인만 할 예정이다. 이름을 제외하고 기본값으로 선택해도 문제없다. 실제 서비스 구성을 위해 구성 시 에는 해당 서비스에 적합한 구성으로 생성하길 바란다. )

 

구글 클라우드 콘솔(Web UI)을 통해 SSH접속하기

VM생성 후 우측에 SSH버튼을 누르면 SSH에 접속된다.

 

자동(auto)모드로 서브넷 네트워크 생성하기

서브넷을 추가하기전에 다음 명령어를 통해 default로 구성된 서브넷을 확인해보면

%gcloud compute networks subnets list

리전 별로 IP범위가 지정되어 있음을 확인 할 수 있다. 또한 auto모드로 서브넷 생성 시 사전 정의된 IP범위에서 생성되며, 따로 리전과 범위를 지정할 필요 없다.

 

다음 명령어를 통해 자동(auto)모드로 서브넷을 생성한다. create 다음 auto-networks1은 서브넷 이름이니 임의로 생성해도 되며, --mode flag뒤에 auto를 지정하여야 한다.

%gcloud compute networks create auto-networks1 --mode auto

네트워크가 생성된 것을 확인 할 수 있으며, 방화벽 규칙을 생성해야 해당 네트워크를 통한 통신이 허용된다. 기본적으로 전부 막혀있다.

 

방화벽 규칙 생성 예시

%gcloud compute firewall-rules create autonet --network auto-networks1 --allow tcp:22,tcp:3389,udp,icmp --source-ranges 10.140.0.0/20

임의로 방화벽규칙명 : autonet으로 설정하였으며 프로토콜은 tcp22, 3389포트, udp, icmp를 지정하였고 IP범위를 아시아 리전의 사전 정의 범위인 10.140.0.0/20를 지정하였다. 단순 예시일 뿐이며 상황 및 조건에 따라 원하는 형태로 방화벽규칙을 생성 할 수 있다.

 

임의로 방화벽이름을 설정하고 –-network flag를 통해 네트워크를 지정하고 필요한 프로토콜 및 포트를 지정하여 방화벽규칙을 생성하면 된다. IP범위를 지정할 수 도 있다.

 

(참고 : gcloud 명령어 사용 시 다음 명령어가 기억이 안난다면 –-help를 입력하면 다음 명령어에 대한 정보를 얻을 수 있다.

예시

%gcloud –-help

%gcloud compute –-help

%gcloud compute networks –-help

경우에 따라서 –h로 입력해야 나올 수 있음)

다음 명령어를 통해 앞서 생성한 auto-networks를 확인 할 수 있다.

%gcloud compute networks subnets list –-sort-by NAME

 

맞춤설정(custom)모드로 서브넷 네트워크 생성하기

다음 명령어를 실행하여 custom네트워크를 생성한다. 앞서 생성할 때의

–-mode auto를 custom으로 변경해주고 임의의 네트워크 이름만 지정하면된다.

%gcloud compute networks create custom-network1 --mode custom

임의로 네트워크명을 custom-network1으로 지정했다.

네트워크가 생성된 것을 확인 할 수 있으며, 역시 마찬가지로 방화벽 규칙을 생성해야 통신이 가능하다.

 

사용자 정의 서브넷 구성하기 (네트워크와 헷갈릴 수 있으니 유의)

앞서 생성한 custom네트워크에 서브넷을 연결해 생성한다.

auto모드와 다르게 custom모드로 서브넷 구성 시 리전과 IP범위를 지정해야 한다.

 

%gcloud compute networks subnets create subnet-us-central-192 \

--network custom-network1 \

--region us-central1 \

--range 192.168.1.0/24

 

%gcloud compute networks subnets create subnet-asia-east-192 \

--network custom-network1 \

--region asia-east1 \

--range 192.168.7.0/24

%gcloud compute networks subnets create subnet-europe-west-192 \

--network custom-network1 \

--region europe-west1 \

--range 192.168.5.0/24

 

다음 명령어를 실행해 생성한 서브넷들을 확인 할 수 있다.

%gcloud compute networks subnets list --sort-by NAME

 

서브넷을 지정해서 인스턴스생성

%gcloud compute instances create instance1 \

--zone us-central1-a \

--subnet subnet-us-central-192

앞서 생성한 subnet-us-central-192의 IP범위 192.168.1.0/24로 Internal IP가 생성된 것을 확인 할 수 있다. (네트워크끼리 변경은 안되며, 인스턴스에 할당된 네트워크도 변경이 안됨. 신중하게 진행 해야함)

 

앞서 설명한 것처럼 레거시(Legacy) 네트워크로도 구성할 수 있으며, 각각의 환경에 따라서 필요한 네트워크를 구성해서 사용하길 바란다.

 

또한, 구글 클라우드 콘솔(브라우져)에서 좌측 상단 Networking탭으로 이동하면

네트워크와 관련한 정보들을 쉽게 확인 할 수 있다.

 

자세한 내용은 아래 페이지들 참고

https://cloud.google.com/compute/docs/networking

https://cloud.google.com/compute/docs/subnetworks

https://cloud.google.com/compute/docs/networks-and-firewalls

https://cloud.google.com/compute/docs/vm-ip-addresses

네트워크 실습 및 이해하기 좋은 페이지

https://codelabs.developers.google.com/codelabs/cloud-networking-101/index.html?index=..%2F..%2Findex#0

https://codelabs.developers.google.com/codelabs/cloud-networking-102/index.html?index=..%2F..%2Findex#0

+ Recent posts