이전 글 https://jjongguet.tistory.com/171 와 연관됩니다.

테라폼으로 배포한 GKEsshgcloud 로 연결하기 위한 방법을 총 정리했습니다.

 

SSH 키 생성

ssh-keygen 사용한 키 생성

ssh-keygen -t rsa -f {키 파일 위치} -C {GCP계정 이메일}

# 생성하려는 키의 위치가 ~/.ssh/gcp-example 
# GCP계정 이메일이 jjong@gmail.com 이라면
# ssh-keygen -t rsa -f ~/.ssh/gcp-example -C jjong@gmail.com

이때 2개의 키 파일이 생성됩니다. 위의 경우에는 gcp-example 이 생성됩니다.

  • gcp-example파일: private key 라고 지칭, 로컬 → 서버로 접근할때 사용하는 파일
  • gcp-example.pub파일: public key 라고 지칭, 서버에 등록해 두는 목적으로 사용하는 파일

 

권한설정

#권한설정
chmod 400 {private key}

#chmod 400 gcp-example

 

 

SSH 키 등록

GCP Console → 메타데이터 → SSH키 추가→ 아래의 ssh-rsa 로 시작하는 내용 전문을 복사 후 붙여넣기

#public key 값 확인
cat {public key}

#cat gcp-example.pub

(혹시몰라서 키 일부를 가렸습니다)

 

 

SSH 키 Gcloud OS에 등록

  • 이 내용은 ‘내가 로컬에서 사용하고있는 PC’ 에서 ‘GCP에 떠있는 instance’ 에 접근하기 위한 SSH key를 등록하는 과정입니다.

 

ssh 키를 gcloud 명령어에서 사용할수 있도록 등록하는 과정

gcloud compute os-login ssh-keys add \
   --key-file=KEY_FILE_PATH \
   --project=PROJECT

gcloud compute os-login ssh-keys add \
   --key-file="~/.ssh/gcp-example.pub" \ 
   --project="gcpgcpgcp"
  • 프로젝트의 이름이 ‘gcpgcpgcp’라고 가정했을때의 예시입니다.

 

 

인스턴스의 태그 확인

이 과정을 해주는 이유는 GKE를 구성하는 Instance는 모두 Instance Template 을 통해서 만들어지는데, 각각의 Instance로 직접 접근하려면 ‘방화벽’ 항목에서 ‘네트워크 태그’ 를 사용해서 열어주려고 하기때문입니다.

 

VM 인스턴스 → 인스턴스 아무거나 접속 → 네트워크 태그

 

위 사진의 경우엔 네트워크 태그 3개를 확인할수 있습니다.

gke-jjong-test1-gke-d839ca68-node #각각의 인스턴스에 붙는 노드 중 하나
gke-node #gke 내부적으로 붙는 노드 
jjong-test1-gke #인스턴스 템플릿으로 붙으면서 생긴 노드 

이번 게시글에서는 GKE의 특정 노드(gke-jjong-test1-gke-d839ca68-node), 모든 GKE의 노드(gke-node)에 설정하는게 아닌, 인스턴스 템플릿으로 만들어진 노드(jjong-test1-gke)에 설정을 하는것을 목표로 게시글을 작성하겠습니다.

방화벽 때 설정할 태그는 jjong-test1-gke 입니다.

 

내 IP 확인

네이버 → ‘내 ip 주소 확인’ 검색

 

방화벽 생성

네트워크 보안 → 방화벽 정책 → 방화벽 규칙 만들기

이후 아래와 같이 설정

 

이름: 아무렇게나 지정

대상: 지정된 대상 태그

대상 태그: jjong-test1-gke (인스턴스 태그)

소스 IPv4범위: (네이버 → 내 IP주소 조회했을때 나오는 값)

지정된 프로토콜 및 포트: 22(ssh)

 

이렇게 하면 끝이다. gcloud와 ssh명령어를 통해서 이제 서버에 접근할 수 있다

 

gcloud 명령어를 사용한 접근법

gcloud compute ssh --zone {region} {instance id} --project {project name}

예를들어 {region}‘asia-northeast3-b’ 이고

{instance id}‘gke-jjong-test1-gke-jjong-test1-gke-9f262b00-bmhp’ 이고

{project name}‘gke-gcp-test-project’ 라고 가정하면

 

gcloud compute ssh --zone "asia-northeast3-b" "gke-jjong-test1-gke-jjong-test1-gke-9f262b00-bmhp" --project "gke-gcp-test-project"

 

ssh 명령어를 사용한 접근법

ssh -i {private key} {instance의 user}@{instance ip}

예를들어 {private key}~/.ssh/gcp-example 이고

{instance user}jjongguet 이고

{instance ip}1.2.3.4 라면

 

ssh -i ~/.ssh/gcp-example jjongguet@1.2.3.4
jjongguet