Public Cloud/GCP

GCP 시작하기

서머스 2022. 6. 8. 17:40

 

https://cloud.google.com/

 

클라우드 컴퓨팅 서비스  |  Google Cloud

데이터 관리, 하이브리드 및 멀티 클라우드, AI와 머신러닝 등 Google의 클라우드 컴퓨팅 서비스로 비즈니스 당면 과제를 해결하세요.

cloud.google.com

 

GCP 프로젝트 생성

우측 상단의 [무료로 시작하기] 버튼을 클릭한다.

 

개인정보 입력 - 카드 정보 입력 등...  하면

 

완료 - 건너뛰기

 

 

상단의 [My First Project]를 클릭한다.

 

우측 상단의 [새 프로젝트]를 선택한다.

 

프로젝트 이름을 지정하고 [만들기] 버튼을 누른다.

계정이 생성된 모습

방금 만든 프로젝트를 클릭한다.

 

[IAM 및 관리자] 를 클릭한다.

 

상단의 [+추가] 버튼을 누른다.

 

주 구성원으로 일반 유저로서 사용될 gmail을 추가한다.

 

* 역할

뷰어 - 읽기 권한만

소유자 - 루트 권한과 거의 동일함

탐색자 - GCP 리소스를 탐색할 수 있음(별거아님)

편집자 - 사용자들을 지우는 권한은 없음, 리소스를 확인, 생성, 업데이트, 삭제한다.

 

편집자를 선택하고 확인 한다.

 

 firefox에서 GCP를 user계정으로 다시 접속해본다.

 

그리고 상단의 [프로젝트 선택] 을 클릭하면, 아까 생성했던 프로젝트가 나타나는 것을 볼 수 있다.

 

프로젝트를 클릭한다.

 

사이드바에 [결제]를 클릭하면 이런 창이 뜬다.

[연결된 결제 계정으로 이동] 을 클릭한다.

좌:user , 우: root 계정

 

user 계정으로 남은 크레딧을 확인할 수는 없다.

두 계정의 결제 계정의 아이디가 같다.

 

GCP 컴퓨트 서비스

- VM = 인스턴스

- GCE = Google Compute Engine , 구글 인스턴스를 만들어 주는 서비스

- Docker, Kubernetes에 특화되어 있다.(특히, Google은 Kubernetes의 개발사임)

- Container-Optimized OS 공개 이미지를 실행하는 인스턴스에서 자동으로 시작되는 Docker 컨테이너를 배포할 수도 있다. => 도커 컨테이너가 미리 설치돼서 나오는 OS(Docker Engine)

CPU, ram, SSD, OS, NET를 어떻게 Provisioning하는가

 

머신 유형

[영어+숫자] 로 이름이 되어 있음 => 각각 용도/세대 수

- ex) AWS에서의 t2.micro

 

* CPU, RAM => Compute Resource(컴퓨트 리소스, 컴퓨터의 자원)

 

인스턴스 만들기

사이드바에서 [Compute Engine] 클릭, [사용]을 클릭한다.

로딩이 엄청 오래 걸린다.

 

상단의 [인스턴스 만들기] 를 클릭한다.

 

리전 - 서울로(도쿄, 오사카 아래에 있음)

영역 - a

머신 유형 - e2-micro(vCPU의 최소 개수가 2개이기 때문에 더 줄일 수 없음)

 

* 컨피덴셜 VM 서비스 - 보안 강화

컨테이너 - 도커를 설치한 OS를 이용할 수 있게끔 한다.

 

부팅 디스크 - [변경] 클릭

운영체제를 CentOS로 변경하고 -[선택] 클릭

 

ssh, web server로서 80포트 오픈, 내가 접속하는 게 가능하기 위해서 [모든 Cloud API에 대한 전체 액세스 허용]으로 바꿔야 한다.

방화벽 - [HTTP 트래픽 허용] 을 선택

 

네트워킹을 클릭한다.

 

 

네트워크 인터페이스

* 네트워크 서비스 등급

- 프리미엄 : 서울 리전이 아닌 다른 국가에서도 빠르게 접근 가능

 

 

 

보안 탭을 연다

 

- VM 액세스 - 어떻게 VM에 엑세스할 것인지에 대해 정하는 단계.

이 설정을 통해 Moba Xterm 말고 다른 방식으로 연결할 수도 있다.

나는 Moba Xterm으로 접근할 것이기 때문에 [수동으로 생성된 SSH 키 추가]를 이용해서 어제 생성한 키를 넣는다.

 

 

 

 

 

 

id_rsa.pub 파일을 메모장으로 연 뒤, 복사 -> SSH 키 1 에 붙여넣기 한다.

 

*가장 하단의 @앞의 r2com은 내 컴퓨터의 이름이다.

나중에 Moba Xterm에서 ssh로 접속할 때 specify되는 user의 이름이다. 

 

관리 탭에서 시작 스크립트를 입력한다.

[만들기] 클릭

 

                                

그리고 외부 IP로 접속하면 접속이 되어야 하는데? 접속이 안된다.

moba Xterm에서 직접 수정한다.

 

 

 

 

 

MobaXterm으로 GCP 접속하기

* private key로 pem키를 선택한다.

 

똑같은 명령어를 sudo를 붙여 실행하면 된다.

 

그리고 public IP로 접속하면

잘 뜬다.

 

혹은 GCP에서 제공하는 콘솔을 이용할 수도 있다.

[연결]의 SSH를 클릭한다.

 

보안이 좋지만, 제약사항이 많기 때문에 권장되지는 않는다.

 

 

selinux, firewall 가 있다.

 

포트번호 바꾸기

 

configuration file을 수정해서 포트 번호를 바꿔본다.

이 파일은 /etc/httpd/conf 안에 있다.

sudo vi /etc/httpd/conf/httpd.conf

 

:set number로 명령어줄 앞에 숫자를 보이게 하고, 포트 번호를 8080으로 바꾼다.

 

sudo systemctl restart httpd

 

 

어떤 포트가 오픈되어있는지 확인한다.

아까 수정한 8080가 보인다

 

방화벽 해제하기

기본 값인 80에서 8080으로 변경하였으므로 [public ip]:8080으로 접속해야 한다.

하지만 다시 접속하려 하면 접속되지 않는다.

방화벽을 해제한다.

 

 

방화벽을 stop 시키고 다시 접속하려고 해도 안된다

*** 참고) firewall이 눈에 보이는 것은 active상태이지만, 실제로는 아무것도 하고 있지 않는다.(이전의 AWS, Azure와 달리 firewall이 미리 설치되어있다)

centos 방화벽 변천사!

netfilter => iptables => firewalld 로 보완되었고, 우선순위는 반대로이다.

iptables는 OS 수준의 방화벽이다.

 

firewalld보다 iptables가 더 우선순위가 높기 때문에, firewalld이 All block 상태여도 iptables가 All Accept 상태이면 차단이 되지 않는다.

 firewalld를 껐다 켠 뒤, iptables -L을 쳐 보면, ALL ACCPET 상태임을 알 수 있다.

 

 

프로젝트 홈 창으로 들어가서(그냥 Compute Engine을 나오면 된다) 사이드바의 [VCP 네트워크] - [방화벽] 으로 간다.

 

AWS의 보안그룹과 유사함.

 

8080이 리스트에 없으므로, 추가한해야 한다.

상단의 [방화벽 규칙 만들기]를 클릭한다.

 

 

우선순위는 중복이어도 상관 없다.

트래픽 방향은 바깥 -> 안쪽 이므로 [수신](=inbound, ingress) 이다. * [송신] (=outbound, outgress)

 

대상 - [지정된 대상 태그]를 선택한 뒤, 대상 태그 - web01로 한다.(* web01 인스턴스를 지칭하는 게 아님)

0.0.0.0/0 <- anywhere, 모든 IP에서 접속 가능하도록 세팅한다.

프토로콜 및 포트 - tcp를 체크한 뒤, 8080을 입력한다.

[만들기] 를 클릭한다.

 

그리고 설정한 방화벽 적용을 해야 한다.

Compute Engine - VM - web01로 들어간다.

상단에 [수정]을 클릭한다.

 

스크롤을 내리면 [네트워크 태그]가 있다.

여기에 아까 방화벽 설정하면서 쓴 'web01' 을 입력하고, 저장한다.

 

[내 퍼블릭 IP]:8080에 접속하면 잘 뜬다.

 

*GCP에서 로드밸런싱을 하려면 같은 에리어에 둬야 한다. 같이 a로 지정한다.

 

 

새 인스턴스 web02를 만든다.

 

리전 - 서울, 영역- a

머신 유형 - micro

 

이미지 - 데비안

액세스 범위 - 모든 Cloud API에 대한 전체 액세스 허용

방화벽 - HTTP 트래픽 허용 체크

 

하단의 [네트워킹, 디스크, 보안, 관리, 단독 테넌시]를 클릭한다.

 

관리 - 자동화 - 자동 스크립트 에 명령어를 추가한다.

Debian은 Ubuntu와 사용 방식이 같으므로, Ubuntu와 같은 방식으로 스크립트를 작성한다.

 

web01과 달리, SSH를 추가하지 않는다.

 

web02의 퍼블릭 IP로 접속해본다.

잘 뜬다.

 

Moba Xterm으로 접속하기

web01과 달리, public Key를 설정하지 않았기 때문에 web02 인스턴스에 접속할 수 없다. 

 

[설정] - [메타데이터] 로 간다. 

[SSH 키] 탭으로 간다.

가운데 [SSH 키 추가]를 클릭한다.

 

pub키를 복사-붙여넣기 하고, [저장]한다.

 

이렇게 키를 추가하게 되면, VM을 생성할 때마다 매번 키를 추가할 필요 없이 위의 공개 키를 활용할 수 있다.

다시 접속해본다

 

접속이 잘 된다.

 

web01에서, 8080포트를 다시 80포트로 바꾼다.

http를 재시작 한다.

포트를 확인해본다.

web01에 :8080을 지우고 다시 접속해보면 잘 접속된다.

 

Load Balancing(부하분산) 구현하기

사이드바에서 Compute Engine 로 들어간다.

인스턴스 그룹으로 들어가서, web01과 web02를 묶어 준다.

 

GCP에서 여러 가용 영역을 지정하게 되면 LB와 오토 스케일링 또한 할 수 있게 된다. 하지만 GCP에 대한 의존성이 증가한다.

 

나는 LB만 할 것이기 때문에 좌측 탭에 [New unmanaged instance group]를 선택한다.

- 위치 - 리전 - 서울

- Network - default

-Select VMs를 하기 위해선 여러개의 VM을 선택해야 하는데, 영역을 하나밖에 설정 못하므로, 한 가용영역에다가(a) 둬야 한다. (그래서 GCP에서 LB를 할 때 여러 가용영역에다 둘 수 없는 것이다.)

 

80번 포트를 매핑한다. (bk는 백엔드의 줄임말)

후 왼쪽 하단의 [만들기] 버튼을 누른다.

 

검색창에 [네트워크 서비스]를 검색해서 클릭한다.

 

 

바로 [부하 분산] 탭으로 간다.

[부하 분산기]를 클릭한다.

 

이 중 [HTTP(S) 부하 분산]을 클릭한다.

 

[계속] 클릭

 

 

(slb는 server load balancer의 약자)

- [백엔드 서비스 만들기]를 클릭한다.

 

 

인스턴스 그룹으로 instance-group-1을 클릭하면 이런 창이 뜬다.

미리 만들었던 포트를 사용하게 된다. 그러면 자동으로 80포트가 설정된다

끝난 이후에는 꼭 하단의 [완료] 버튼을 눌러야 한다.

[기존 포트 이름 사용] 클릭

(svc는 서비스의 약자...)

 

하단의 [상태 확인 생성] 을 클릭한다.

 

프로토콜은 HTTP로 변경한다.

 

- 확인 간격 : 5초마다 한번씩 web01과 web02에 접속 시도, 5초를 넘어가면 fail

- 2번 연속으로 200ok라는 신호를 내보내면 성공 / 2번 연속으로 404 fail 신호를 보내면 실패

[저장]을 클릭한다.

 

[만들기]를 클릭한다.

[확인]을 클릭한다.

 

[프런트엔드 구성]을 클릭한다.

 

프리미엄 - 전 세계 단위로 접속할 수 있음

표준 - 국내 사용자들만

 

하단의 [완료]를 클릭한다.

 

 

my-slb를 클릭해본다.

 

IP를 복사해서 접속하면 web01과 web02가 번갈아서 뜬다.

health check까지 어느 정도의 유효시간이 필요하다

 

GCP 스토리지 서비스

- 객체 스토리지(Cloud Storage) : URL, 링크로 저장. 내려받을 땐 wget ~.jpg

( AWS : S3 / Azure : blob)

 

- 블록 스토리지(Persistent Disk) : OS, App이 설치되는 공간 (Win에서 C드라이브와 같은 역할). 4096byte(4K) 단위

( AWS : EBS / Azure : Disk)

 

- 파일 스토리지(Filestore) : NFS, 공유 폴더... 

( AWS : EFS / Azure : SMB(Server Message Blck = Samba))

 

 

객체 스토리지(Cloud Storage)

검색창에 Cloud Storage(혹은 객체)를 입력한다.

 

 

[버킷 만들기] 를 클릭한다.

 

 

 

Multi-region(=multi-region) : 여러 지역에 데이터를 저장하기 때문에 안정적이다. 성능이 상승하지만 그만큼 비용도 상승하게 된다.

차선책으로 Dual-region을 사용할 수도 있다...

 

Standard에서 Archive 로 내려갈수록 공간 대비 비용이 저렴해진다.(비용은 낮아지는 만큼 공간도 작아진다.)

Archive 는 Glacier와 같은 맥락임

 

[이 버킷에 공개 액세스 방지 적용] =>파일이 쉽게 노출되어서 outbound traffic이 발생할 수 있으므로 이를 방지한다.

 

객체 버전 관리 - 불안정한 새로운 버전이 overwrite하지 않도록 미리 백업하는 방식

 

버킷이 생성된 모습

버킷을 클릭해본다.

 

[폴더 만들기]를 클릭해서 files라는 폴더를 만든다. 

 

files 클릭해서 폴더 안으로 들어간다.

준비된 gcp.tar파일을 업로드한다.

 

[권한] 탭으로 간다.

모든 곳에서 access 가능하게 하려면, [추가]버튼을 이용해서 추가해본다.

 

특정 사용자를 입력해서 특정 사용자만 접속할 수 있게 할 수도 있지만, 'allUsers'를 입력하면 모든 사용자가 접근 가능하게 된다.

역할 선택 - 현재 사용중 - 저장소 기존 개체 리더

를 선택 후 [닫기]를 클릭한다.

 

[공개 액세스 허용] 해야 저장이 가능해진다.

저장한다.

 

 

다시 [객체] 탭으로 와서 우측 상단의 [새로고침] 탭을 눌러보면

공개 액세스에 [인터넷에 공개]가 표시된다.

URL 복사를 누른다.

 

그 다음 Moba Xterm으로 간다.

web01에 wget 명령어가 없으므로 설치해준다.

 

복사한 URL을 이용해서 tar파일을 다운로드 받는다.

 

sudo tar -xvf gcp.tar -C /var/www/html

해준 뒤 web01 사이트에 다시 들어가본다.

 

 

추가 디스크 만들기

Compute Engine - 디스크 - [디스크 만들기] 클릭

 

 

web01의 영역이 a이기 때문에, 똑같이 a로 지정해준다.

 

 

[스냅샷 일정]을 선택하면 매일 같은 시간(보통 퇴근 시간)에 스냅샷을 만들 수 있다. 

[만들기]를 클릭한다.

 

생성된 add를 web01에 추가해야 한다.

 

VM 인스턴스에 들어가서 web01을 클릭한다.

 

 

스크롤을 내려서 [저장 용량]의 [추가 디스크]를 보면 없음으로 표기되어 있다.

 

또한 moba Xterm에서 lsblk를 쳐보면 추가된 게 없다.

 

상단에 [수정]을 클릭한 뒤, [기존 디스크 연결]을 클릭한다.

[저장]을 클릭한다.

 

나온 뒤, [저장]을 클릭한다.

 

디스크를 포맷한다.

- mkfs : 파티션한 하드디스크를 포맷할때 사용.

- -t : 파일시스템의 형식을 지정한다

- ext4 : 형식(타입)

 

마운트 한 뒤, 확인해본다.

 

 

 

 

 

'Public Cloud > GCP' 카테고리의 다른 글

GCP - CLI 로 사용하기  (0) 2022.07.05
GCP 실습 2  (0) 2022.06.11