VM에 연결

이 문서에서는 Google Distributed Cloud(GDC) 에어 갭에서 가상 머신 (VM) 인스턴스에 대한 네트워크 연결을 설정하는 방법을 설명합니다.

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

이 문서는 Distributed Cloud 환경에서 VM 인스턴스에 연결하는 플랫폼 관리자 또는 애플리케이션 운영자 그룹의 개발자를 대상으로 합니다. 자세한 내용은 GDC 에어 갭 문서의 대상 독자를 참조하세요.

시작하기 전에

VM에 연결하기 전에 다음 필수사항을 충족해야 합니다.

  • 클러스터에 대한 로그인 액세스 권한입니다. 로그인에서 CLI 단계에 따라 클러스터에 로그인합니다.
  • gdcloud 명령줄 인터페이스 (CLI) 명령어를 사용하려면 다운로드, 설치, 및 gdcloud CLI를 구성해야 합니다. Distributed Cloud의 모든 명령어는 gdcloud 또는 kubectl CLI를 사용하며 운영체제 (OS) 환경이 필요합니다.

    kubeconfig 파일 경로 가져오기

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

    1. 로그인하고 생성합니다. Management API 서버의 kubeconfig 파일이 없는 경우 kubeconfig 파일을 생성합니다.

    2. Management API 서버의 kubeconfig 파일 경로를 사용하여 이 안내의 MANAGEMENT_API_SERVER를 바꿉니다.

    IAM 역할 요청

    프로젝트 IAM 관리자에게 문의하여 프로젝트에 대한 다음 역할을 요청합니다.

    • 가상 머신 프로젝트 관리자 (project-vm-admin): 프로젝트 네임스페이스에서 VM을 만들고, 수정하고, 나열하고, 삭제합니다.

    • 프로젝트 뷰어(project-viewer): 프로젝트 네임스페이스 내의 모든 리소스를 봅니다.

    모든 VM 역할은 VM이 있는 프로젝트의 네임스페이스에 바인딩되어야 합니다. 단계에 따라 액세스 권한을 확인합니다.

    VM 연결 설정

    이 섹션에서는 특정 운영체제 (OS)가 있는 VM에 연결을 설정하는 방법을 설명합니다.

    VM에 연결

    특정 OS가 있는 VM에 연결하려면 GDC 콘솔, gdcloud CLI 또는 가상 머신 관리자 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

    VirtualMachine 리소스는 GuestEnvironmentSynced 조건을 사용하여 부팅 상태를 나타냅니다. GuestEnvironmentSynced 조건이 True이면 VM이 부팅을 완료하고 SSH 연결을 할 준비가 되었음을 나타냅니다.

    다음 샘플 스니펫은 GuestEnvironmentSynced 조건이 True로 설정된 VirtualMachine 리소스를 보여줍니다.

    {
        "apiVersion": "virtualmachine.gdc.goog/v1",
        "kind": "VirtualMachine",
        ...
        "status": {
            "conditions": [
                {
                    "lastTransitionTime": "2026-01-25T09:52:52Z",
                    "message": "No message available",
                    "observedGeneration": 3,
                    "reason": "AccessManagementReady",
                    "status": "True",
                    "type": "GuestEnvironmentSynced"
                },
            ],
        },
    }
    

    VM의 GuestEnvironmentSynced 상태가 True인지 확인한 후 다음을 수행하여 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 비공개 키와 10분의 TTL 값으로 VM 인스턴스에 대한 액세스 권한을 부여합니다.

      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 --kubeconfig MANAGEMENT_API_SERVER \
        create -f access_request.yaml
      
    4. 액세스 요청의 상태를 확인합니다.

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

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

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

    5. VM에 연결합니다.

      ssh -i PATH_TO_PRIVATE_KEY USERNAME@EXTERNAL_IP
      

      다음 값을 바꿉니다.

      • PATH_TO_PRIVATE_KEY 를 VM에 추가한 공개 키에 해당하는 비공개 SSH 키 파일의 경로로 바꿉니다.
      • USERNAME 을 SSH 키를 만들 때 지정한 사용자 이름으로 바꿉니다. 예를 들면 cloudysanfrancisco_example_com 또는 cloudysanfrancisco입니다.
      • EXTERNAL_IP를 VM의 외부 인그레스 IP 주소 로 바꿉니다.

    문제 해결

    이 섹션에서는 액세스 요청을 만든 후 VM 인스턴스에 연결하는 동안 발생할 수 있는 문제를 해결하는 방법을 설명합니다.

    다음 단계를 통해 가능한 문제를 식별합니다.

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

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

      VM이 실행 중이 아니면 새 요청을 연결하거나 구성할 수 없습니다.

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

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

    4. VirtualMachineAccessRequest에 configured 상태가 표시되면 다음 요구사항을 확인합니다.

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

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

      이전 명령어에서 수정 가능한 변수를 사용자 값으로 바꿉니다.

    6. VirtualMachineAccessRequest의 상태가 비어 있으면 게스트 환경이 실행 중이 아닐 수 있습니다.