Menghubungkan ke VM

Air-gapped Google Distributed Cloud (GDC) menggunakan autentikasi SSH berbasis kunci untuk membuat koneksi ke instance virtual machine (VM) Linux. Secara default, sandi tidak dikonfigurasi untuk pengguna lokal di VM Linux.

Sebelum memulai

Sebelum terhubung ke VM, Anda harus memenuhi prasyarat berikut:

  • Aktifkan pengelolaan akses. Anda tidak dapat melanjutkan tanpa mengaktifkan pengelolaan akses di lingkungan tamu. Secara default, pengelolaan akses diaktifkan di VM baru.
  • Aktifkan akses eksternal VM untuk peer mana pun di port Transmission Control Protocol (TCP) 22.
    • Untuk VM Windows, aktifkan akses eksternal VM di port 3389.
  • Siapkan resource kustom ProjectNetworkPolicy (PNP) di project tempat VM berada.
    • Dengan menyiapkan PNP di project, Anda dapat mengakses VM di luar project atau organisasi.
    • Untuk mendiagnosis apakah Anda tidak memiliki PNP, tanyakan kepada Operator Infrastruktur (IO) Anda.
  • Akses login ke cluster. Ikuti langkah-langkah CLI di Login untuk login ke cluster.
Untuk menggunakan perintah antarmuka command line (CLI) gdcloud, pastikan Anda telah mendownload, menginstal, dan mengonfigurasi CLI gdcloud. Semua perintah untuk Distributed Cloud menggunakan CLI gdcloud atau kubectl, dan memerlukan lingkungan Linux.

Mendapatkan jalur file kubeconfig

Untuk menjalankan perintah terhadap server Management API, pastikan Anda memiliki resource berikut:

  1. Login dan buat file kubeconfig untuk server Management API jika Anda belum memilikinya.

  2. Gunakan jalur ke file kubeconfig server Management API untuk menggantikan MANAGEMENT_API_SERVER dalam petunjuk ini.

Meminta izin dan akses

Untuk melakukan tugas yang tercantum di halaman ini, Anda harus memiliki peran Project VirtualMachine Admin. Ikuti langkah-langkah untuk memverifikasi bahwa Anda memiliki peran Project VirtualMachine Admin (project-vm-admin) di namespace project tempat VM berada.

Untuk operasi VM menggunakan konsol GDC atau gdcloud CLI, minta Admin IAM Project Anda untuk memberi Anda peran Project VirtualMachine Admin dan peran Project Viewer (project-viewer).

Membuat koneksi VM

Bagian ini menjelaskan cara membuat koneksi ke VM Linux dan Windows.

Menghubungkan ke VM Linux

Untuk membuat koneksi ke VM Linux, gunakan konsol GDC, gdcloud CLI, atau Virtual Machine Manager API.

Konsol

  1. Di menu navigasi, klik Virtual Machines > Instances.

  2. Dalam daftar VM, temukan baris untuk VM yang sedang berjalan yang ingin Anda hubungkan. Di kolom Connect, klik SSH.

  3. Terminal browser SSH akan terbuka. Masukkan perintah apa pun di shell atau klik FTP untuk menjelajahi struktur file dan mengupload file.

gdcloud

Hubungkan ke VM menggunakan SSH dengan menjalankan perintah gdcloud compute ssh

gdcloud compute ssh VM_NAME \
  --project=PROJECT_ID

Ganti variabel berikut:

  • VM_NAME: nama VM.
  • PROJECT_ID: ID project yang berisi VM.

Jika telah menetapkan properti default untuk CLI, Anda dapat menghilangkan flag --project dari perintah ini. Contoh:

gdcloud compute ssh VM_NAME

API

Menghubungkan ke VM:

  • Buka terminal.
  • Buat pasangan kunci SSH.
  • Upload kunci publik dan nama pengguna dengan nilai time-to-live (TTL).

GDC mengambil kunci SSH dan nama pengguna, lalu membuat akun pengguna dengan nama pengguna tersebut. Di VM Linux, GDC menyimpan kunci publik di file ~/.ssh/authorized_keys pengguna Anda di VM.

Selesaikan langkah-langkah berikut untuk terhubung ke VM dari command line:

  1. Buat pasangan kunci SSH dan nama pengguna.

    Di workstation Linux dan macOS, gunakan utilitas ssh-keygen untuk membuat pasangan kunci SSH baru. Contoh kode berikut membuat pasangan kunci RSA (Rivest–Shamir–Adleman):

    ssh-keygen -t rsa \
      -f ~/.ssh/KEY_FILENAME \
      -C USERNAME \
      -b 2048
    

    Ganti variabel dengan menggunakan definisi berikut.

    VariabelDefinisi
    KEY_FILENAME Nama untuk file kunci SSH Anda. Misalnya, nama file my-ssh-key menghasilkan file kunci pribadi bernama my-ssh-key dan file kunci publik bernama my-ssh-key.pub.
    USERNAME Nama pengguna Anda di VM, seperti testuser atau testuser_gmail_com.

    Utilitas ssh-keygen menyimpan file kunci pribadi Anda di jalur ~/.ssh/KEY_FILENAME dan file kunci publik Anda di jalur ~/.ssh/KEY_FILENAME.pub.

    Kunci publik untuk pengguna, testuser, mirip dengan contoh berikut:

    ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDAu5kKQCPF... testuser
    
  2. Upload kunci Anda ke VM dan buat resource Kubernetes dengan kunci publik, nama pengguna, dan nilai time to live (TTL) untuk kunci tersebut.

    Contoh berikut menggunakan file access_request.yaml untuk memberikan akses ke instance VM dengan kunci pribadi KEY_FILENAME dan nilai TTL sepuluh menit:

    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
    

    Ganti variabel, menggunakan definisi berikut:

    VariabelDefinisi
    VM_NAMESPACE Namespace untuk VM.
    AR_NAME Nama permintaan akses.
    USERNAME Nama pengguna Anda di VM, seperti testuser atau testuser_gmail_com.
    VM_NAME Nama instance VM.
  3. Buat kunci:

    kubectl --kubeconfig MANAGEMENT_API_SERVER \
      create -f access_request.yaml
    
  4. Periksa status permintaan akses Anda:

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

    Ganti VM_NAMESPACE dengan namespace untuk VM.

    Status configured menunjukkan bahwa Anda dapat terhubung ke VM.

  5. Hubungkan ke VM:

    ssh -i PATH_TO_PRIVATE_KEY USERNAME@EXTERNAL_IP
    

    Ganti nilai berikut:

    • PATH_TO_PRIVATE_KEY dengan jalur ke file kunci SSH pribadi yang sesuai dengan kunci publik yang Anda tambahkan ke VM.
    • USERNAME dengan nama pengguna yang Anda tentukan saat membuat kunci SSH. Misalnya, cloudysanfrancisco_example_com atau cloudysanfrancisco.
    • EXTERNAL_IP dengan alamat IP ingress eksternal VM.

Pemecahan masalah

Bagian ini menjelaskan cara memecahkan masalah yang mungkin terjadi saat menghubungkan ke instance VM setelah membuat permintaan akses.

Ikuti langkah-langkah berikut untuk mengidentifikasi kemungkinan masalah:

  1. Pastikan VM sedang berjalan. Ganti variabel yang dapat diedit dengan nilai Anda dalam perintah berikut:

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

    Jika VM tidak berjalan, Anda tidak dapat terhubung atau mengonfigurasi permintaan baru.

  2. Pastikan VM telah berjalan selama beberapa menit. Jika VM baru saja dimulai, layanan yang diperlukan untuk akses SSH mungkin belum berjalan. Biasanya, proses ini berjalan dalam waktu lima menit setelah booting.

  3. Pastikan Anda tidak melebihi nilai TTL pada permintaan akses. Kunci dihapus setelah waktu mencapai nilai TTL.

  4. Jika VirtualMachineAccessRequest Anda menampilkan status configured, pastikan persyaratan berikut:

    1. Anda mengaktifkan transfer data di ke VM Anda di port 22.
    2. Mesin Anda merutekan ke VM. Misalnya, Anda dapat menggunakan perintah
      curl -vso /dev/null --connect-timeout 5 EXTERNAL_IP:22 untuk memeriksa pemilihan rute.
  5. Jika VirtualMachineAccessRequest Anda menampilkan status failed, lihat status lengkap dan tinjau pesan error yang menunjukkan penyebab permintaan gagal:

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

    Ganti variabel yang dapat diedit dalam perintah sebelumnya dengan nilai Anda sendiri.

  6. Jika status VirtualMachineAccessRequest Anda kosong, lingkungan tamu mungkin tidak berjalan.

Menghubungkan ke VM Windows

Koneksi ke VM Windows memerlukan penggunaan Remote Desktop Protocol (RDP) melalui aplikasi desktop jarak jauh. Untuk mengakses VM melalui RDP, Anda memerlukan sandi yang dapat diambil dari konsol GDC atau VirtualMachinePasswordResetRequest resource kustom dari Virtual Machine Manager API.

Sebelum melanjutkan, Anda harus menginstal klien desktop jarak jauh terlebih dahulu. Gunakan link berikut untuk menyelesaikan langkah-langkah berdasarkan OS spesifik Anda. Untuk mengakses link, Anda memerlukan koneksi internet.

https://remmina.org/how-to-install-remmina/

Untuk membuat koneksi VM Windows, ikuti langkah-langkah berikut:

Konsol

  1. Di menu navigasi, klik Virtual machines > Instances.
  2. Dalam daftar VM, telusuri VM Windows yang sedang berjalan untuk dihubungkan.
  3. Di kolom Tindakan, klik Reset Sandi. Dialog Setel sandi Windows baru akan muncul.
  4. Di kolom Nama pengguna, masukkan nama pengguna Anda.
  5. Klik Set. Dialog New Windows password akan muncul dengan sandi yang dibuat secara acak. Sandi ini berisi karakter alfanumerik dan non-alfanumerik.
  6. Klik Salin.
  7. Buka klien desktop jarak jauh Anda, lalu pilih nama pengguna Anda.
  8. Di kolom input Password, masukkan sandi Anda.
  9. Tekan ENTER atau RETURN.

API

  1. Buat kunci RSA. Anda memerlukan kunci ini untuk mengambil sandi dari resource VirtualMachinePasswordResetRequest.

    openssl genrsa -out private-key.pem 2048
    # Get the RSA public key
    openssl rsa -in private-key.pem -outform PEM -pubout
    
  2. Buat file YAML.

  3. Upload kunci RSA yang Anda buat, nama VM, dan nama pengguna yang Anda berikan untuk mengakses klien desktop jarak jauh:

    apiVersion: virtualmachine.gdc.goog/v1
    kind: VirtualMachinePasswordResetRequest
    metadata:
      namespace: VM_NAMESPACE
      name: PRR_NAME
    spec:
      vmName: VM_NAME
      user: USERNAME
      publicKey: PUBLIC_KEY
    

    Ganti variabel, menggunakan definisi berikut:

    Variabel Definisi
    VM_NAMESPACE Nama namespace tempat VM berada.
    PRR_NAME Nama yang Anda berikan untuk permintaan reset sandi. Misalnya, vmprr2.
    VM_NAME Nama VM. Misalnya, vm-test.
    USERNAME Nama pengguna yang Anda berikan untuk login ke VM dengan klien desktop jarak jauh. Misalnya, test-user.
    PUBLIC_KEY Kunci RSA yang Anda buat pada langkah 2. Anda harus memformat PUBLIC_KEY dalam beberapa baris.

    Contoh berikut menunjukkan file YAML dengan nilai dan pemformatan yang diperlukan untuk melakukan permintaan reset sandi:

    apiVersion: virtualmachine.gdc.goog/v1
    kind: VirtualMachinePasswordResetRequest
    metadata:
      namespace: test-namespace
      name: vmprr2
    spec:
      vmName: vm2
      user: test-user
      publicKey: |-
       -----BEGIN PUBLIC KEY-----
    
       # Input the RSA key data in multi-line format.
    
       -----END PUBLIC KEY-----
    
  4. Terapkan isi file:

    kubectl --kubeconfig=MANAGEMENT_API_SERVER \
      apply -f FILENAME
    

    Ganti FILENAME dengan nama file untuk permintaan reset sandi.

  5. Lihat status resource VirtualMachinePasswordResetRequest. Dengan asumsi VM berada dalam status Running, resource akan membuat sandi dalam waktu satu menit atau kurang.

    kubectl --kubeconfig=MANAGEMENT_API_SERVER \
      -n VM_NAMESPACE \
      describe virtualmachinepasswordresetrequest.virtualmachine.gdc.goog PRR_NAME
    

    Temukan kolom status.encryptedPassword yang berisi sandi yang dibuat.

  6. Salin nilai di status.encryptedPassword dan dekripsi sandi yang dibuat:

    echo ENCRYPTED_PASSWORD | base64 -d > PASSWORD_FILENAME
    openssl pkeyutl -decrypt -in PASSWORD_FILENAME -inkey private-key.pem \
      -pkeyopt rsa_padding_mode:oaep -pkeyopt rsa_oaep_md:sha512 -pkeyopt rsa_mgf1_md:sha512
    

    Ganti kode berikut:

    • ENCRYPTED_PASSWORD: sandi yang dihasilkan dari kolom status.encryptedPassword.
    • PASSWORD_FILENAME: file sementara untuk menyimpan sandi yang didekode base64.

    Setelah itu, Anda akan melihat sandi yang didekripsi sebagai output untuk terhubung ke VM melalui RDP.

  7. Buka klien desktop jarak jauh, lalu klik Remote Connection Profile. Anda akan melihat dialog koneksi.

  8. Di tab Dasar, masukkan nilai Anda ke kolom berikut:

    • Server: alamat IP ingress status akses eksternal VM dengan nomor port akses eksternal VM yang ditambahkan. Untuk mengambil alamat IP ingress, lihat Ingress.
    • Nama pengguna: nama pengguna yang Anda tentukan dalam permintaan reset sandi. Contoh, test-user.
    • Sandi: sandi yang dibuat dan didekripsi dari status permintaan reset sandi.
  9. Klik Simpan dan Hubungkan.