구글 스터디잼/쿠버네티스 중급

[QwikLabs] Google Cloud Console 및 Cloud Shell에 액세스하기

남쪽마을밤송이 2022. 8. 30. 22:56

* QwikLabs에서 제공하는 GCP 프로젝트에서 실습한 내용입니다.

 

 1. Google Cloud Console 살펴보기 

 선택한 프로젝트 확인 

 

 Google Cloud Storage로 이동하여 버킷 만들기 

1. Google Cloud 콘솔의 탐색 메뉴(탐색 메뉴 아이콘)에서 Cloud Storage > Buckets를 클릭합니다.

 

2. 버킷 만들기를 클릭합니다.

 

3. 이름에는 이전 단계에서 복사한 Google Cloud 프로젝트 ID 문자열을 붙여넣습니다. 이러한 실습 안내에서는 [BUCKET_NAME]으로 입력한 이름을 나중에 참고합니다.

 

4. 계속을 클릭합니다.

객체 액세스를 제어하는 방식 선택을 클릭하고 이 버킷에 공개 액세스 방지 적용을 선택 해제한 후 세분화를 선택합니다.

계속을 클릭합니다.

나머지 설정은 모두 기본값으로 둡니다.

5. 만들기를 클릭합니다.

 

 가상 머신(VM) 인스턴스 만들기 

1. 탐색 메뉴(탐색 메뉴 아이콘)에서 Compute Engine > VM 인스턴스를 클릭합니다.

 

2. 인스턴스 만들기를 클릭합니다.


3. 이름에서 first-vm을 인스턴스 이름으로 입력합니다. 리전에서 us-central1을 선택합니다.
영역에서 us-central1-c를 선택합니다.
머신 유형에서 옵션을 확인합니다. 예상 비용 분석을 확인하려면 예상 비용 아래 머신 유형 목록 오른쪽에 있는 세부정보를 클릭합니다.
머신 유형에서 e2-micro(2개의 공유 vCPU)를 클릭합니다.
초소형 머신은 비용이 낮은 공유 코어 VM입니다.


4. 방화벽에서 HTTP 트래픽 허용을 클릭합니다.
나머지 설정은 기본값으로 두고 만들기를 클릭합니다.
새로운 VM이 생성될 때까지 기다립니다.

 

 IAM 서비스 계정 만들기 

IAM 서비스 계정은 개별 최종 사용자가 아닌 애플리케이션이나 가상 머신에 속하는 특수한 Google 계정 유형입니다.


1. 탐색 메뉴에서 IAM 및 관리자 > 서비스 계정을 클릭합니다.

 

2. + 서비스 계정 만들기를 클릭합니다.


3. 서비스 계정 세부정보 페이지에서 서비스 계정 이름을 test-service-account로 지정합니다.
만들고 계속하기를 클릭합니다.


4. 서비스 계정에 프로젝트에 대한 액세스 권한 부여 페이지에서 역할을 Project > Editor로 지정합니다. 계속을 클릭합니다. 완료를 클릭합니다.

5. 서비스 계정 페이지에서 test-service-account의 맨 오른쪽으로 이동하여 점 3개를 클릭합니다. 키 관리를 클릭합니다.

6. 키 추가를 클릭합니다. 새 키 만들기를 선택합니다.

7. 키 유형으로 JSON을 선택합니다. 만들기를 클릭합니다. JSON 키 파일이 다운로드됩니다. 이후 단계에서 이 키 파일을 찾아 VM에 업로드합니다.

 

 2. Cloud Shell 살펴보기 

 Cloud Shell의 개념 

Cloud Shell을 사용하면 브라우저에서 직접 명령줄을 통해 클라우드 리소스에 액세스할 수 있습니다. Cloud Shell을 통해 gcloud와 같은 Cloud SDK 명령줄 도구를 항상 사용할 수 있고 완전히 인증된 최신 상태로 유지할 수 있습니다.

 

Cloud Shell이 제공하는 기능

  • 임시 Compute Engine VM
  • 브라우저를 통해 인스턴스에 명령줄로 액세스
  • 영구 디스크 저장소 5GB($HOME dir)
  • 사전 설치된 Cloud SDK 및 다른 도구
  • gcloud: Compute Engine과 Google Kubernetes Engine(GKE), 여러 Google Cloud 서비스 작업에 사용
  • gsutil: Cloud Storage 작업에 사용
  • kubectl: GKE와 Kubernetes 작업에 사용
  • bq: BigQuery 작업에 사용
  • 자바, Go, Python, Node.js, PHP, Ruby 언어 지원
  • 웹 미리보기 기능
  • 리소스 및 인스턴스 액세스를 위한 자체 인증 기능

주의할 점은 1시간 동안 사용하지 않으면 Cloud Shell 인스턴스는 재활용됩니다. /home 디렉터리만 유지되고 환경 변수를 포함하여 시스템 구성 변경사항은 세션 종료 시 손실됩니다.

 

 Cloud Shell을 열고 기능 살펴보기 

1. Google Cloud 콘솔 제목 표시줄에서 Cloud Shell 활성화(Cloud Shell 아이콘)를 클릭합니다. 확인 메시지가 표시되면 계속을 클릭합니다. Cloud Shell이 Google Cloud Console 창 하단에 열립니다.

  • 다음 아이콘은 Cloud Shell 툴바의 맨 오른쪽에 있습니다.
    • 숨기기/복원: 이 아이콘은 창을 숨기거나 복원하여 개발자가 Cloud Shell을 닫지 않고도 Google Cloud Console에 완전히 액세스할 수 있습니다.
    • 새 창에서 열기: Cloud Shell을 Google Cloud Console 하단에 두면 개별 명령어를 실행할 때 유용합니다. 그러나 파일을 수정하거나 명령어의 전체 출력을 확인하려고 할 때 이 아이콘을 클릭하면 Cloud Shell이 전체 크기의 터미널 창에 표시됩니다.
    • 탭 모두 닫기: 이 아이콘으로 Cloud Shell을 닫습니다. Cloud Shell을 닫을 때마다 가상 머신이 재활용되고 모든 시스템 컨텍스트가 손실됩니다. 그러나 홈 디렉터리에 저장한 데이터는 다음에 Cloud Shell을 시작할 때 계속 사용할 수 있습니다.

 

 Cloud Shell을 사용하여 이 작업의 환경 변수 설정 

1. Cloud Shell에서 다음 명령어를 사용하여 이 작업에 사용되는 환경 변수를 정의합니다.
[BUCKET_NAME]을 작업 1의 첫 번째 버킷 이름으로 바꿉니다.
[BUCKET_NAME_2]를 전역적으로 고유한 이름으로 바꿉니다.
이전에 사용한 전역적으로 고유한 버킷 이름에 2를 추가해도 됩니다.

 

 앞서 만든 사용자 인증 정보 파일을 Cloud Shell로 이동 

1. 첫 번째 Cloud IAM 서비스 계정을 만든 이전 작업에서 JSON으로 인코딩된 사용자 인증 정보 파일을 다운로드했습니다.
로컬 워크스테이션에서 방금 다운로드한 JSON 키를 찾아 파일 이름을 credentials.json으로 바꿉니다.


2. Cloud Shell에서 Cloud Shell 툴바에 있는 점 3개(점 3개로 된 메뉴 아이콘) 아이콘을 클릭하여 추가 옵션을 표시합니다.

업로드를 클릭하여 로컬 머신의 credentials.json 파일을 Cloud Shell VM에 업로드합니다.


3. Cloud Shell에서 Is를 입력하고 ENTER 키를 눌러 파일이 업로드되었는지 확인합니다.

 

 두 번째 Cloud Storage 버킷을 만들고 Google Cloud Console에서 확인 

Cloud SDK에서 제공하는 gsutil 명령어를 사용하면 명령줄에서 Cloud Storage로 작업할 수 있습니다. 이 작업에서는 Cloud Shell에서 gsutil 명령어를 사용합니다.

1. Cloud Shell에서 gsutil 명령어를 사용하여 버킷을 만듭니다.

gsutil mb gs://$MY_BUCKET_NAME_2

이 때 아래 메시지가 표시되면 승인을 클릭합니다.


2. Google Cloud 콘솔의 탐색 메뉴(탐색 메뉴 아이콘)에서 Cloud Storage > 브라우저를 클릭하거나 이미 Storage 브라우저로 이동했다면 새로고침을 클릭합니다. 두 번째 버킷이 버킷 목록에 표시됩니다.

 

 gcloud 명령줄을 사용하여 두 번째 가상 머신 만들기 

1. Cloud Shell에서 다음 명령어를 실행하여 지정된 리전의 모든 영역을 나열합니다.

gcloud compute zones list | grep $MY_REGION


2. 목록에서 첫 번째 열의 영역을 선택합니다. Google Cloud 영역의 이름은 리전 이름, 하이픈, 문자 순으로 구성됩니다.
작업 1의 첫 번째 VM에 사용한 영역과 같거나 다른 영역을 선택할 수 있습니다.

다음 명령어를 실행하여 선택한 영역을 환경 변수에 저장합니다.
[ZONE]을 개발자가 선택한 영역으로 바꿉니다.

MY_ZONE=[ZONE]

다음 명령어를 실행하여 이 영역을 기본 영역으로 설정합니다.

gcloud config set compute/zone $MY_ZONE


3. 다음 명령어를 실행하여 VM을 만드는 데 사용할 환경 변수에 이름을 저장합니다. 두 번째 VM second-vm을 호출합니다.

MY_VMNAME=second-vm

VM 이름을 할당하는 새 환경 변수를 사용하여 이 작업에서 앞서 설정한 기본 영역에 VM을 만듭니다.

gcloud compute instances create $MY_VMNAME \
--machine-type "e2-standard-2" \
--image-project "debian-cloud" \
--image-family "debian-11" \
--subnet "default"


4. 프로젝트의 가상 머신 인스턴스를 나열합니다.

gcloud compute instances list

새로 만든 가상 머신과 첫 번째 가상 머신이 모두 목록에 표시됩니다.


5. Google Cloud 콘솔의 탐색 메뉴(탐색 메뉴 아이콘)에서 Compute Engine > VM 인스턴스를 클릭합니다. gcloud compute instances list의 출력과 마찬가지로 앞서 만든 가상 머신이 모두 표시됩니다.


6. External IP 열을 확인합니다. 직접 만든 첫 번째 VM의 외부 IP 주소가 링크로 표시됩니다. 필요한 경우 HIDE INFO PANEL 버튼을 클릭하여 External IP 열을 표시합니다. HTTP 트래픽을 허용하도록 이 VM의 방화벽을 구성했기 때문에 Google Cloud Console이 링크를 제공합니다.


7. VM의 External IP 열에서 찾은 링크를 클릭합니다. 브라우저의 새 브라우저 탭에 Connection refused 메시지가 표시됩니다. 이 메시지가 발생하는 이유는 VM에 대한 HTTP 트래픽을 위해 방화벽 포트가 열려 있지만 VM에서 실행되는 웹 서버가 없기 때문입니다.

 

 gcloud 명령줄을 사용하여 두 번째 서비스 계정 만들기 

1. Cloud Shell에서 다음 명령어를 실행하여 두 번째 서비스 계정을 만듭니다.

gcloud iam service-accounts create test-service-account2 --display-name "test-service-account2"


2. Cloud Shell에서 다음 명령어를 실행하여 두 번째 서비스 계정에 프로젝트 뷰어 역할을 부여합니다.

gcloud projects add-iam-policy-binding $GOOGLE_CLOUD_PROJECT --member serviceAccount:test-service-account2@${GOOGLE_CLOUD_PROJECT}.iam.gserviceaccount.com --role roles/viewer

참고) GOOGLE_CLOUD_PROJECT는 Cloud Shell에서 자동으로 채워지고 현재 컨텍스트의 프로젝트 ID로 설정되는 환경 변수입니다.


3. Google Cloud 콘솔의 탐색 메뉴(탐색 메뉴 아이콘)에서 IAM 및 관리자 > IAM을 클릭합니다.

test-service-account2라는 새 서비스 계정을 선택합니다.

페이지 오른쪽에 있는 연필 아이콘을 클릭하여 뷰어 역할을 펼칩니다.
test-service-account2가 뷰어 역할의 구성원으로 나열된 것을 확인할 수 있습니다.

 

 3. Cloud Shell에서 Cloud Storage 사용 

 파일을 Cloud Shell로 다운로드하여 Cloud Storage에 복사 

1. Google 제공 Cloud Storage 버킷의 고양이 사진을 Cloud Shell에 복사합니다.

gsutil cp gs://cloud-training/ak8s/cat.jpg cat.jpg


2. 앞서 만든 버킷 중 하나에 파일을 복사합니다.

gsutil cp cat.jpg gs://$MY_BUCKET_NAME_1


3. 첫 번째 버킷의 파일을 두 번째 버킷에 복사합니다.

gsutil cp gs://$MY_BUCKET_NAME_1/cat.jpg gs://$MY_BUCKET_NAME_2/cat.jpg


4. Google Cloud 콘솔의 탐색 메뉴(탐색 메뉴 아이콘)에서 Cloud Storage > 브라우저를 클릭하고 앞서 만든 버킷을 선택한 후 두 버킷이 모두 cat.jpg 파일을 포함하고 있는지 확인합니다.

 

 Cloud Storage 객체의 액세스 제어 목록(ACL) 설정 

1. cat.jpg에 할당된 기본 액세스 목록을 가져오려면(Cloud Storage 버킷에 업로드한 경우) 다음 두 명령어를 실행합니다.
Cloud Shell에서 다음 명령어를 실행합니다.

gsutil acl get gs://$MY_BUCKET_NAME_1/cat.jpg  > acl.txt
cat acl.txt

이 출력을 통해 프로젝트의 프로젝트 소유자나 편집자, 뷰어 역할이 있는 누구나 액세스 권한(소유자/편집자는 소유자 권한, 뷰어는 리더 권한)을 보유함을 알 수 있습니다.

2. 비공개 액세스 권한을 갖도록 객체를 변경하려면 다음 명령어를 실행합니다.

gsutil acl set private gs://$MY_BUCKET_NAME_1/cat.jpg


3. cat.jpg에 할당된 새 ACL을 확인하려면 다음 두 명령어를 실행합니다.

gsutil acl get gs://$MY_BUCKET_NAME_1/cat.jpg  > acl-2.txt
cat acl-2.txt

이제 객체의 원래 작성자(실습 계정)만 소유자 액세스 권한을 보유합니다.

 

 Cloud Shell에서 서비스 계정으로 인증 

1. Cloud Shell에서 다음 명령어를 실행하여 현재 구성을 확인합니다.

gcloud config list

출력에서 zone은 작업 2에서 두 번째 VM을 만들 때 설정한 zone과 같아야 합니다. 계정과 프로젝트는 Qwiklabs 실습 사용자 인증 정보와 일치해야 합니다.


2. Cloud Shell에서 다음 명령어를 실행하여, 로컬 머신에 다운로드한 후 Cloud Shell에 업로드한 사용자 인증 정보(credentials.json)를 통해 인증된 사용자를 이전 작업에서 만든 첫 번째 서비스 계정으로 변경합니다.

gcloud auth activate-service-account --key-file credentials.json

이제 Cloud Shell이 test-service-account로 인증됩니다.

3. 활성 계정을 확인하려면 다음 명령어를 실행합니다.

gcloud config list

이제 계정이 test-service-account 서비스 계정으로 설정됩니다.

4. Cloud Shell에서 승인된 계정 목록을 확인하려면 다음 명령어를 실행합니다.

gcloud auth list


5. 현재 계정(test-service-account)이 개발자가 만든 첫 번째 버킷의 cat.jpg 파일에 액세스할 수 없는지 확인하려면 다음 명령어를 실행합니다.

gsutil cp gs://$MY_BUCKET_NAME_1/cat.jpg ./cat-copy.jpg

앞서 이 작업에서 이 파일의 액세스 권한을 소유자에게만 부여하는 것으로 제한했기 때문에 다음 예와 같이 출력됩니다.

6. 현재 계정(test-service-account)이 개발자가 만든 두 번째 버킷의 cat.jpg 파일에 액세스할 수 있는지 확인합니다.

gsutil cp gs://$MY_BUCKET_NAME_2/cat.jpg ./cat-copy.jpg

이 파일의 액세스 권한이 제한되지 않았으므로 다음 예와 같이 출력됩니다.

 

7. 실습 계정으로 전환하려면 다음 명령어를 실행합니다.
[USERNAME]을 실습 안내 페이지 왼쪽의 Qwiklabs 연결 세부정보 창에 제공된 사용자 이름으로 바꿉니다.

gcloud config set account [USERNAME]


8. 개발자가 처음으로 만든 [BUCKET_NAME] 버킷의 cat.jpg 파일에 액세스할 수 있는지 확인하려면 다음 명령어를 실행합니다.

gsutil cp gs://$MY_BUCKET_NAME_1/cat.jpg ./copy2-of-cat.jpg

실습 계정이 버킷과 객체를 만들고 객체 액세스 제어 목록(ACL)이 비공개로 전환될 때 소유자로 유지되었으므로 실습 계정에서 객체에 계속 액세스할 수 있습니다.

9. 인증되지 않은 사용자를 비롯하여 누구나 첫 번째 Cloud Storage 버킷을 읽을 수 있도록 만듭니다.

gsutil iam ch allUsers:objectViewer gs://$MY_BUCKET_NAME_1

참고) 이는 Cloud Storage에서 공개 웹사이트 콘텐츠를 호스팅하는 데 적합한 설정입니다.


10. Google Cloud 콘솔의 탐색 메뉴(탐색 메뉴 아이콘)에서 Cloud Storage > 브라우저를 클릭합니다.
앞서 만든 첫 번째 스토리지 버킷을 선택합니다. cat.jpg 파일에 Public link가 있습니다. 이 링크를 복사합니다.


11. 시크릿 모드 브라우저 탭을 열고 링크를 주소 표시줄에 붙여넣습니다. 고양이 사진을 확인할 수 있습니다. 이 브라우저 탭을 열어둡니다.

 

 4. Cloud Shell 코드 편집기 살펴보기 

 Cloud Shell 코드 편집기 열기 

1. Cloud Shell에서 편집기 열기 아이콘(Cloud Shell 편집기 아이콘)을 클릭한 후 새 창에서 열기 링크를 클릭합니다.
Cloud 편집기가 포함된 새 탭이 열립니다. Google Cloud Console 및 Cloud Shell은 원래 탭에 그대로 유지됩니다. 탭을 클릭하여 Cloud Shell과 코드 편집기 간에 전환할 수 있습니다.


2. Google Cloud 콘솔 탭에서 터미널 열기를 클릭하고 Cloud Shell에서 다음 명령어를 실행하여 git 저장소를 클론합니다.

git clone https://github.com/googlecodelabs/orchestrate-with-kubernetes.git


3. orchestrate-with-kubernetes 폴더가 Cloud Shell 코드 편집기 창의 왼쪽 창에 표시됩니다.


4. Cloud Shell에서 다음 명령어를 실행하여 테스트 디렉터리를 만듭니다.

mkdir test

test 폴더가 이제 Cloud Shell 코드 편집기 창의 왼쪽 창에 표시됩니다.


5. Cloud Shell 코드 편집기에서 orchestrate-with-kubernetes 왼쪽의 화살표를 클릭하여 폴더를 펼칩니다.

cleanup.sh 파일을 클릭하여 Cloud Shell 코드 편집기 창의 오른쪽 창에서 엽니다.


6. 다음 텍스트를 cleanup.sh 파일의 마지막 줄로 추가합니다.

echo Finished cleanup!

 

7. Cloud Shell에서 다음 명령어를 실행하여 디렉터리를 변경하고 cleanup.sh의 콘텐츠를 표시합니다.

cd orchestrate-with-kubernetes
cat cleanup.sh

cat cleanup.sh의 출력에 추가한 텍스트 줄이 포함되어 있는지 확인합니다.

 

8. Cloud Shell 코드 편집기에서 File 메뉴를 클릭하여 열고 New File을 선택합니다. 파일 이름을 index.html로 지정합니다.


9. 오른쪽 창에서 아래와 같이 HTML 텍스트를 붙여넣습니다.
참고) REPLACE_WITH_CAT_URL 문자열을 이전 작업의 고양이 이미지 URL로 바꿉니다.


10. 탐색 메뉴(탐색 메뉴 아이콘)에서 Compute Engine > VM 인스턴스를 클릭합니다.
첫 번째 VM 행에서 SSH 버튼을 클릭합니다.


11. VM에서 열리는 SSH 로그인 창에서 nginx 웹 서버를 설치합니다.

sudo touch /var/lib/man-db/auto-update
sudo apt-get update
sudo apt-get install nginx


12. Cloud Shell 창에서 코드 편집기를 사용하여 만든 HTML 파일을 가상 머신에 복사합니다.

gcloud compute scp index.html first-vm:index.nginx-debian.html --zone=us-central1-c

참고) 암호를 입력하라는 메시지가 표시되면 Enter 키를 눌러 빈 암호로 응답합니다. 빈 암호를 확인하라는 메시지가 표시되면 Enter 키를 다시 누릅니다.

잘못된 예


13. VM의 SSH 로그인 창에서 홈 디렉터리의 HTML 파일을 nginx 웹 서버의 문서 루트에 복사합니다. nginx 웹 서버를 설치하고 시작 페이지를 맞춤설정합니다.

sudo cp index.nginx-debian.html /var/www/html

파일 옮겨진 것 확인 후 cp 명령어 실행, 사진 없음


14. 탐색 메뉴(탐색 메뉴 아이콘)에서 Compute Engine > VM 인스턴스를 클릭합니다.



15. 첫 번째 VM의 External IP 열에서 링크를 클릭합니다. 고양이 사진이 포함된 웹페이지가 있는 새 브라우저 탭이 열립니다.