Google Distributed Cloud (GDC) 에어갭은 키 기반 SSH 인증을 사용하여 가상 머신 (VM) 인스턴스에 대한 연결을 설정합니다. 기본적으로 운영체제 (OS)가 있는 VM의 로컬 사용자에 대한 비밀번호는 구성되지 않습니다.
시작하기 전에
VM에 연결하기 전에 다음 기본 요건을 충족해야 합니다.
- 액세스 관리 사용 설정 게스트 환경에서 액세스 관리를 사용 설정하지 않으면 계속 진행할 수 없습니다. 기본적으로 새 VM에서는 액세스 관리가 사용 설정되어 있습니다.
- 전송 제어 프로토콜 (TCP) 포트 22의 모든 피어에 대해 VM 외부 액세스 사용 설정
ProjectNetworkPolicy
(PNP) 커스텀 리소스를 설정합니다.
- 프로젝트에서 PNP를 설정하면 프로젝트 또는 조직 외부에서 VM에 액세스할 수 있습니다.
- PNP가 없는지 진단하려면 인프라 운영자 (IO)에게 문의하세요.
gdcloud
명령줄 인터페이스 (CLI) 명령어를 사용하려면 gdcloud
CLI를 다운로드, 설치, 구성해야 합니다.
Distributed Cloud의 모든 명령어는 gdcloud
또는 kubectl
CLI를 사용하며 운영체제 (OS) 환경이 필요합니다.
kubeconfig 파일 경로 가져오기
관리 API 서버에 대해 명령어를 실행하려면 다음 리소스가 있어야 합니다.
관리 API 서버의 kubeconfig 파일이 없는 경우 로그인 및 생성합니다.
관리 API 서버의 kubeconfig 파일 경로를 사용하여 이 안내의
MANAGEMENT_API_SERVER
를 바꿉니다.
권한 및 액세스 요청
이 페이지에 나열된 작업을 수행하려면 프로젝트 VirtualMachine 관리자 역할이 있어야 합니다. 단계를 따라 VM이 있는 프로젝트의 네임스페이스에 프로젝트 VirtualMachine 관리자 (project-vm-admin
) 역할이 있는지 확인합니다.
GDC 콘솔 또는 gdcloud CLI를 사용하는 VM 작업의 경우 프로젝트 IAM 관리자에게 프로젝트 VirtualMachine 관리자 역할과 프로젝트 뷰어 (project-viewer
) 역할을 모두 할당해 달라고 요청하세요.
VM 연결 설정
이 섹션에서는 특정 운영체제 (OS)가 있는 VM에 연결하는 방법을 설명합니다.
VM에 연결
특정 OS가 설치된 VM에 연결하려면 GDC 콘솔, gdcloud CLI 또는 Virtual Machine Manager API를 사용합니다.
콘솔
탐색 메뉴에서 가상 머신 > 인스턴스를 클릭합니다.
VM 목록에서 연결할 실행 중인 VM의 행을 찾습니다. 연결 열에서 SSH를 클릭합니다.
SSH 브라우저 터미널이 열립니다. 셸에 명령어를 입력하거나 FTP를 클릭하여 파일 구조를 탐색하고 파일을 업로드합니다.
gdcloud
gdcloud compute ssh
명령어를 실행하여 SSH를 사용하여 VM에 연결
gdcloud compute ssh VM_NAME --project=PROJECT_ID
다음 변수를 바꿉니다.
- VM_NAME: VM의 이름입니다.
- PROJECT_ID: VM이 포함된 프로젝트의 ID입니다.
CLI에 기본 속성을 설정한 경우 이 명령어에서 --project
플래그를 생략할 수 있습니다. 예를 들면 다음과 같습니다.
gdcloud compute ssh VM_NAME
API
VM에 연결합니다.
- 터미널을 엽니다.
- SSH 키 쌍을 만듭니다.
- TTL (수명) 값과 함께 공개 키와 사용자 이름을 업로드합니다.
GDC는 SSH 키와 사용자 이름을 가져와 사용자 이름으로 사용자 계정을 만듭니다. VM에서 GDC는 VM에 있는 사용자의 ~/.ssh/authorized_keys
파일에 공개 키를 저장합니다.
명령줄에서 VM에 연결하려면 다음 단계를 완료하세요.
SSH 키 쌍과 사용자 이름을 만듭니다.
OS 워크스테이션에서
ssh-keygen
유틸리티를 사용하여 새 SSH 키 쌍을 만듭니다. 다음 코드 샘플은 RSA(Rivest–Shamir–Adleman) 키 쌍을 만듭니다.ssh-keygen -t rsa -f ~/.ssh/KEY_FILENAME -C USERNAME -b 2048
다음 정의를 사용하여 변수를 바꿉니다.
변수 정의 KEY_FILENAME
SSH 키 파일의 이름입니다. 예를 들어 my-ssh-key
파일 이름은my-ssh-key
라는 비공개 키 파일과my-ssh-key.pub
라는 공개 키 파일을 생성합니다.USERNAME
VM의 사용자 이름입니다(예: testuser
또는testuser_gmail_com
).ssh-keygen
유틸리티는 비공개 키 파일을~/.ssh/KEY_FILENAME
경로에 저장하고 공개 키 파일을~/.ssh/KEY_FILENAME.pub
경로에 저장합니다.사용자
testuser
의 공개 키는 다음 예시와 비슷합니다.ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDAu5kKQCPF... testuser
VM에 키를 업로드하고 공개 키, 사용자 이름, 키의 TTL (수명) 값을 사용하여 Kubernetes 리소스를 만듭니다.
다음 예에서는
access_request.yaml
파일을 사용하여KEY_FILENAME
비공개 키가 있는 VM 인스턴스에 대한 액세스 권한을 부여하고 TTL 값을 10분으로 설정합니다.apiVersion: virtualmachine.gdc.goog/v1 kind: VirtualMachineAccessRequest metadata: namespace: VM_NAMESPACE name: AR_NAME spec: ssh: key: | ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDAu5kKQCPF... cloudysanfrancisco ttl: 10m user: USERNAME vm: VM_NAME
다음 정의를 사용하여 변수를 바꿉니다.
변수 정의 VM_NAMESPACE
VM의 네임스페이스입니다. AR_NAME
액세스 요청 이름입니다. USERNAME
VM의 사용자 이름입니다(예: testuser
또는testuser_gmail_com
).VM_NAME
VM 인스턴스의 이름입니다. 키를 만듭니다.
kubectl create -f access_request.yaml --kubeconfig MANAGEMENT_API_SERVER
액세스 권한 요청 상태를 확인합니다.
kubectl get virtualmachineaccessrequests.virtualmachine.gdc.goog -n VM_NAMESPACE --kubeconfig MANAGEMENT_API_SERVER
VM_NAMESPACE
을 VM의 네임스페이스로 바꿉니다.configured
상태는 VM에 연결할 수 있음을 나타냅니다.VM에 연결합니다.
ssh -i PATH_TO_PRIVATE_KEY USERNAME@EXTERNAL_IP
다음 값을 바꿉니다.
- VM에 추가한 공개 키에 해당하는 비공개 SSH 키 파일의 경로를 사용하여
PATH_TO_PRIVATE_KEY
USERNAME
를 SSH 키를 만들 때 지정한 사용자 이름으로 바꿉니다. 예를 들면cloudysanfrancisco_example_com
또는cloudysanfrancisco
입니다.EXTERNAL_IP
를 VM의 외부 인그레스 IP 주소로 바꿉니다.
- VM에 추가한 공개 키에 해당하는 비공개 SSH 키 파일의 경로를 사용하여
문제 해결
이 섹션에서는 액세스 요청을 만든 후 VM 인스턴스에 연결하는 동안 발생할 수 있는 문제를 해결하는 방법을 설명합니다.
다음 단계를 따라 가능한 문제를 파악하세요.
VM이 실행 중인지 확인합니다. 다음 명령어에서 수정 가능한 변수를 사용자 값으로 바꿉니다.
kubectl get virtualmachines.virtualmachine.gdc.goog VM_NAME -n VM_NAMESPACE --kubeconfig MANAGEMENT_API_SERVER
VM이 실행되고 있지 않으면 새 요청을 연결하거나 구성할 수 없습니다.
VM이 몇 분 동안 실행되었는지 확인합니다. VM이 방금 시작된 경우 SSH 액세스에 필요한 서비스가 아직 실행되고 있지 않을 수 있습니다. 일반적으로 부팅 후 5분 이내에 실행됩니다.
액세스 요청의 TTL 값을 초과하지 않았는지 확인합니다. 시간이 TTL 값에 도달하면 키가 삭제됩니다.
VirtualMachineAccessRequest
에configured
상태가 표시되면 다음 요구사항을 확인하세요.- 포트 22에서 VM으로의 데이터 전송을 사용 설정했습니다.
- 머신이 VM으로 라우팅됩니다. 예를 들어
curl -vso /dev/null --connect-timeout 5 EXTERNAL_IP:22
명령어를 사용하여 라우팅을 확인할 수 있습니다.
VirtualMachineAccessRequest
에failed
상태가 표시되면 전체 상태를 확인하고 요청이 실패한 원인을 나타내는 오류 메시지를 검토합니다.kubectl describe virtualmachineaccessrequest.virtualmachine.gdc.goog AR_NAME -n VM_NAMESPACE --kubeconfig MANAGEMENT_API_SERVER
이전 명령어의 수정 가능한 변수를 자체 값으로 바꿉니다.
VirtualMachineAccessRequest
상태가 비어 있으면 게스트 환경이 실행되고 있지 않을 수 있습니다.