VM에 연결

Google Distributed Cloud (GDC) 에어갭 어플라이언스는 키 기반 SSH 인증을 사용하여 가상 머신 (VM) 인스턴스에 대한 연결을 설정합니다. 기본적으로 운영체제 (OS)가 있는 VM의 로컬 사용자에 대한 비밀번호는 구성되지 않습니다.

시작하기 전에

VM에 연결하기 전에 다음 기본 요건을 충족해야 합니다.

  • 액세스 관리 사용 설정 게스트 환경에서 액세스 관리를 사용 설정하지 않으면 계속 진행할 수 없습니다. 기본적으로 새 VM에서는 액세스 관리가 사용 설정되어 있습니다.
  • 전송 제어 프로토콜 (TCP) 포트 22의 모든 피어에 대해 VM 외부 액세스 사용 설정
  • VM이 있는 프로젝트에서 ProjectNetworkPolicy (PNP) 커스텀 리소스를 설정합니다.
    • 프로젝트에서 PNP를 설정하면 프로젝트 또는 조직 외부에서 VM에 액세스할 수 있습니다.
    • PNP가 없는지 진단하려면 인프라 운영자 (IO)에게 문의하세요.
  • 클러스터에 대한 로그인 액세스 권한 로그인의 CLI 단계에 따라 클러스터에 로그인합니다.
  • gdcloud 명령줄 인터페이스 (CLI) 명령어를 사용하려면 gdcloud CLI를 다운로드, 설치, 구성해야 합니다. GDC 오프라인 어플라이언스의 모든 명령어는 gdcloud 또는 kubectl CLI를 사용하며 운영체제 (OS) 환경이 필요합니다.

    kubeconfig 파일 경로 가져오기

    관리 API 서버에 대해 명령어를 실행하려면 다음 리소스가 있어야 합니다.

    1. 관리 API 서버 이름을 찾거나 플랫폼 관리자 (PA)에게 서버 이름을 문의합니다.

    2. 관리 API 서버의 kubeconfig 파일이 없는 경우 로그인 및 생성합니다.

    3. 이 안내에서 경로를 사용하여 MANAGEMENT_API_SERVER{"</var>"}}을 바꿉니다.

    권한 및 액세스 요청

    이 페이지에 나열된 작업을 수행하려면 프로젝트 VirtualMachine 관리자 역할이 있어야 합니다. 단계에 따라 VM이 있는 프로젝트의 네임스페이스에서 확인하거나 프로젝트 IAM 관리자가 프로젝트 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를 사용합니다.

    콘솔

    1. 탐색 메뉴에서 가상 머신 > 인스턴스를 클릭합니다.

    2. VM 목록에서 연결할 실행 중인 VM의 행을 찾습니다. 연결 열에서 SSH를 클릭합니다.

    3. 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에 연결하려면 다음 단계를 완료하세요.

    1. 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
      
    2. 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 인스턴스의 이름입니다.
    3. 키를 만듭니다.

      kubectl create -f access_request.yaml --kubeconfig MANAGEMENT_API_SERVER
      
    4. 액세스 권한 요청 상태를 확인합니다.

      kubectl get virtualmachineaccessrequests.virtualmachine.gdc.goog -n VM_NAMESPACE --kubeconfig MANAGEMENT_API_SERVER
      

      VM_NAMESPACE을 VM의 네임스페이스로 바꿉니다.

      configured 상태는 VM에 연결할 수 있음을 나타냅니다.

    5. 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 인스턴스에 연결하는 동안 발생할 수 있는 문제를 해결하는 방법을 설명합니다.

    다음 단계를 따라 가능한 문제를 파악하세요.

    1. VM이 실행 중인지 확인합니다. 다음 명령어에서 수정 가능한 변수를 사용자 값으로 바꿉니다.

      kubectl get virtualmachines.virtualmachine.gdc.goog VM_NAME -n VM_NAMESPACE --kubeconfig MANAGEMENT_API_SERVER
      

      VM이 실행되고 있지 않으면 새 요청을 연결하거나 구성할 수 없습니다.

    2. VM이 몇 분 동안 실행되었는지 확인합니다. VM이 방금 시작된 경우 SSH 액세스에 필요한 서비스가 아직 실행되고 있지 않을 수 있습니다. 일반적으로 부팅 후 5분 이내에 실행됩니다.

    3. 액세스 요청의 TTL 값을 초과하지 않았는지 확인합니다. 시간이 TTL 값에 도달하면 키가 삭제됩니다.

    4. VirtualMachineAccessRequestconfigured 상태가 표시되면 다음 요구사항을 확인하세요.

      1. 포트 22에서 VM으로의 데이터 전송을 사용 설정했습니다.
      2. 머신이 VM으로 라우팅됩니다. 예를 들어
        curl -vso /dev/null --connect-timeout 5 EXTERNAL_IP:22 명령어를 사용하여 라우팅을 확인할 수 있습니다.
    5. VirtualMachineAccessRequestfailed 상태가 표시되면 전체 상태를 확인하고 요청이 실패한 원인을 나타내는 오류 메시지를 검토합니다.

      kubectl describe virtualmachineaccessrequest.virtualmachine.gdc.goog AR_NAME -n VM_NAMESPACE --kubeconfig MANAGEMENT_API_SERVER
      

      이전 명령어의 수정 가능한 변수를 자체 값으로 바꿉니다.

    6. VirtualMachineAccessRequest 상태가 비어 있으면 게스트 환경이 실행되고 있지 않을 수 있습니다.