Terhubung ke VM yang menggunakan Runtime VM di GDC

Dokumen ini ditujukan bagi pemilik aplikasi yang menjalankan GKE di Bare Metal. Dokumen ini menunjukkan cara terhubung ke virtual machine (VM) yang menggunakan VM Runtime di GDC. Anda dapat terhubung ke VM secara langsung menggunakan alamat IP, atau menggunakan alat bawaan untuk akses SSH atau konsol.

Sebelum memulai

Untuk menyelesaikan dokumen ini, Anda memerlukan akses ke referensi berikut:

Mengonfigurasi akses SSH tanpa sandi ke VM

Akses SSH langsung dan tanpa sandi ke VM Anda difasilitasi oleh agen tamu yang diinstal oleh Runtime VM di GDC. Di antara tugas-tugas lainnya, agen tamu menginstal dan mengakhiri masa berlaku kunci SSH. Kemampuan ini memungkinkan tunnel SSH untuk mengakses VM Anda dari klien di luar jaringan cluster.

Mengaktifkan agen tamu

Untuk mengaktifkan agen tamu:

  1. Periksa resource kustom VirtualMachine Anda untuk mengonfirmasi bahwa resource tersebut telah dikonfigurasi untuk mengaktifkan agen tamu:

    kubectl get gvm VM_NAME -o yaml --kubeconfig KUBECONFIG
    

    Kolom spec.osType harus ditetapkan ke sistem operasi VM Anda, Linux atau Windows. Bagian spec.guestEnvironment tidak boleh dikonfigurasi secara eksplisit sebagai kosong. Jika bagian ini dikonfigurasi sebagai kosong (guestEnvironment: {}), Anda dapat menghapusnya sepenuhnya untuk mengaktifkan agen tamu.

    Resource kustom VirtualMachine untuk VM yang ingin Anda akses akan terlihat seperti ini:

    apiVersion: vm.cluster.gke.io/v1
    kind: VirtualMachine
    metadata:
      name: sample-vm
    spec:
      compute:
        cpu:
          vcpus: 2
        memory:
          capacity: 4Gi
    ...
      osType: Linux
    ...
    
  2. Jika perlu, gunakan kubectl edit untuk mengupdate resource kustom VirtualMachine.

  3. Untuk memastikan agen tamu berfungsi, periksa status di resource kustom VM Anda:

    kubectl get gvm VM_NAME --kubeconfig KUBECONFIG
    

    Saat agen tamu bekerja, Anda akan melihat status: "True" untuk kondisi GuestEnvironmentEnabled dan GuestEnvironmentDataSynced.

    apiVersion: vm.cluster.gke.io/v1
    kind: VirtualMachine
    metadata:
      ...
      name: vm-sample-01
      ...
    status:
      conditions:
      - lastTransitionTime: "2022-10-05T22:40:26Z"
        message: ""
        observedGeneration: 1
        reason: UserConfiguration
        status: "True"
        type: GuestEnvironmentEnabled
      - lastTransitionTime: "2022-10-06T21:55:57Z"
        message: ""
        observedGeneration: 1
        reason: GuestEnvironmentDataSynced
        status: "True"
        type: GuestEnvironmentSynced
      ...
    

Mengaktifkan akses SSH tanpa sandi

Untuk mengaktifkan akses SSH tanpa sandi untuk VM Anda:

  1. Buat file manifes VirtualMachineAccessRequest, seperti vm-access-request.yaml, di editor pilihan Anda:

    apiVersion: vm.cluster.gke.io/v1
    kind: VirtualMachineAccessRequest
    metadata:
      name: VMAR_NAME
      namespace: VM_NAMESPACE
    spec:
      vm: VM_NAME
      user: USERNAME
      ssh:
        key: PUBLIC_SSH_KEY
        ttl: EXPIRATION_TIME
    

    Ganti kode berikut:

    • VMAR_NAME: nama resource permintaan akses.
    • VM_NAMESPACE: namespace untuk VM yang ingin Anda akses.
    • VM_NAME: nama VM yang ingin Anda akses.
    • USERNAME: nama pengguna untuk pengguna yang mengakses VM.
    • PUBLIC_SSH_KEY: kunci publik untuk akses SSH. Biasanya, ini adalah isi file id_rsa.pub.
    • EXPIRATION_TIME: kolom ttl (time-to-live) menentukan berapa lama kunci SSH valid.

      Misalnya, jika Anda menentukan 30m, masa berlaku kunci SSH akan habis setelah 30 menit.

      Flag ini menggunakan unit berikut:

      • s untuk detik
      • m untuk menit
      • h untuk jam
      • d untuk hari
  2. Gunakan kubectl apply untuk membuat VirtualMachineAccessRequest dari file manifes. Misalnya, jika Anda menamai file manifes vm-access-request.yaml,

    kubectl apply -f MANIFEST --kubeconfig KUBECONFIG
    

    Ganti kode berikut:

    • MANIFEST: nama file manifes permintaan akses. Contoh, vm-access-request.yaml.
    • KUBECONFIG: jalur ke file kubeconfig cluster yang menghosting VM yang Anda akses.
  3. Untuk memverifikasi bahwa konfigurasi permintaan akses Anda berhasil, periksa status VirtualMachineAccessRequest:

    kubectl get vmar VMAR_NAME -o yaml --kubeconfig KUBECONFIG
    

    Jika konfigurasi berhasil, bagian status akan menyertakan state: configured:

    apiVersion: vm.cluster.gke.io/v1
    kind: VirtualMachineAccessRequest
    metadata:
      ...
      annotations:
        kubectl.kubernetes.io/last-applied-configuration: |
          {"apiVersion":"vm.cluster.gke.io/v1","kind":"VirtualMachineAccessRequest",
          "metadata":{"annotations":{},"name":"vmar-sample","namespace":"default"},
          "spec":{"ssh":{"key":"ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQ...jMLHFc=
              sample-user@sample-host","ttl":"5h"},"user":"sample-user","vm":"vm-sample-01"}}
      creationTimestamp: "2022-10-06T21:55:57Z"
      finalizers:
      - vm.cluster.gke.io/vmar-finalizer
      generation: 2
      name: vmar-sample
      namespace: default
      resourceVersion: "13033921"
      uid: 282d72ad-f48d-4e89-af22-336940ac9f58
    spec:
      ssh:
        key: ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQ...jMLHFc= sample-user@sample-host
        ttl: 5m0s
      user: sample-user
      vm: vm-sample-01
    status:
      processedAt: "2022-10-06T21:55:57Z"
      state: configured
    

Menonaktifkan agen tamu

Saat Anda membuat VM baru dan menetapkan kolom osType, agen tamu akan diaktifkan. Saat fitur ini berada dalam Pratinjau, Anda dapat menonaktifkannya dengan mengedit resource kustom VirtualMachine. Menonaktifkan agen tamu akan menonaktifkan akses SSH tanpa sandi ke VM Anda.

Untuk menonaktifkan agen tamu:

  1. Gunakan kubectl untuk menghentikan VM sebelum Anda membuat perubahan pada konfigurasi:

    kubectl virt stop VM_NAME --kubeconfig KUBECONFIG
    
  1. Edit resource VM Anda:

    kubectl edit gvm VM_NAME --kubeconfig KUBECONFIG
    
  2. Update konfigurasi VirtualMachine untuk menambahkan spec.guestEnvironment kosong secara eksplisit:

    apiVersion: vm.cluster.gke.io/v1alpha1
    kind: VirtualMachine
    metadata:
      name: vm-example
      namespace: default
    spec:
      compute:
      ...
      osType: Linux
      guestEnvironment: {}
    
  3. Simpan dan tutup manifes VM yang diupdate di editor Anda.

  4. Gunakan kubectl untuk memulai VM:

    kubectl virt start VM_NAME --kubeconfig KUBECONFIG
    

Hubungkan menggunakan alamat IP

Jika VM memiliki alamat IP yang dapat diakses dan Anda sudah memiliki kredensial untuk mengakses VM tersebut, Anda dapat terhubung menggunakan protokol seperti SSH, VNC, atau RDP.

Hubungkan melalui alamat IP

Jika Anda dapat terhubung langsung ke alamat IP VM, gunakan salah satu metode berikut:

SSH

  1. Dapatkan detail VM Anda untuk melihat alamat IP-nya:

    kubectl get gvm VM_NAME --namespace VM_NAMESPACE --kubeconfig KUBECONFIG
    

    Ganti nilai berikut:

    • VM_NAME: nama untuk VM Anda.
    • VM_NAMESPACE: namespace untuk VM Anda.

    Contoh output berikut menunjukkan informasi VM dan alamat IP:

    NAME   STATUS    AGE   IP
    vm1    Running   7m    10.200.0.21
    
  2. Hubungkan ke VM Anda menggunakan klien SSH:

    ssh USERNAME@IP_ADDRESS -i PATH_TO_KEY
    

    Ganti nilai berikut:

    • USERNAME: nama pengguna untuk akun di VM Anda.
    • IP_ADDRESS: alamat IP VM Anda yang diperoleh di langkah sebelumnya.
    • PATH_TO_KEY: jalur ke kunci SSH pribadi.

VNC atau RDP

Virtual Network Computing (VNC) dan Remote Desktop Protocol (RDP) memungkinkan Anda menggunakan konsol grafis untuk mengakses VM. Saat menggunakan alamat IP, Anda harus mengaktifkan VNC atau RDP di OS tamu sebelum dapat menggunakan salah satu untuk terhubung ke VM. Untuk informasi tentang cara mengaktifkan dan menggunakan VNC atau RDP, baca dokumentasi untuk OS tamu Anda.

Anda juga memerlukan kredensial yang ada untuk login ke VM, seperti kredensial yang Anda tentukan untuk membuat kredensial pengguna awal saat membuat VM.

  1. Dapatkan detail VM Anda untuk melihat alamat IP-nya:

    kubectl get gvm VM_NAME --namespace VM_NAMESPACE --kubeconfig KUBECONFIG
    

    Ganti nilai berikut:

    • VM_NAME: nama untuk VM Anda.
    • VM_NAMESPACE: namespace untuk VM Anda.

    Contoh output berikut menunjukkan informasi VM dan alamat IP:

    NAME   STATUS    AGE   IP
    vm1    Running   7m    10.200.0.21
    
  2. Hubungkan ke alamat IP VM Anda yang diperoleh pada langkah sebelumnya menggunakan alat klien dan port yang sesuai, seperti port VNC 5900 atau port RDP 3389.

Menghubungkan melalui Layanan

Jika VM Anda terhubung ke pod-network default dan Anda tidak dapat berkomunikasi langsung ke alamat IP VM, ekspos VM di balik load balancer Service.

  1. Buat manifes Service, seperti my-service-load-balancer.yaml, di editor pilihan Anda:

    nano my-service-load-balancer.yaml
    
  2. Salin dan tempel manifes YAML berikut:

    apiVersion: v1
    kind: Service
    metadata:
      name: VM_NAME-service
    spec:
      selector:
        kubevirt/vm: VM_NAME
      ports:
      - name: PORT_NAME
        protocol: PROTOCOL_TYPE
        port: EXTERNAL_PORT
        targetPort: TARGET_PORT
      type: LoadBalancer
    

    Dalam jenis manifes Service ini, ganti nilai berikut:

    • VM_NAME: nama VM Anda yang akan diekspos untuk akses jarak jauh.
    • PORT_NAME: nama protokol Anda, seperti ssh, vnc, atau rdp.
    • PROTOCOL_TYPE: jenis protokol, seperti tcp untuk SSH dan RDP, atau udp untuk VNC.
    • EXTERNAL_PORT: nomor port eksternal yang akan diekspos dan yang Anda gunakan untuk terhubung.
    • TARGET_PORT: port target, seperti 22 untuk SSH.
  3. Simpan dan tutup manifes Service di editor Anda.

  4. Buat Service menggunakan kubectl:

    kubectl apply -f my-service-load-balancer.yaml  --kubeconfig KUBECONFIG
    
  5. Dapatkan alamat EXTERNAL-IP layanan load balancer:

    kubectl get service VM_NAME-service --kubeconfig KUBECONFIG
    

    Alamat IP load balancer ditampilkan, seperti ditunjukkan dalam contoh output berikut:

    NAME          TYPE           CLUSTER-IP       EXTERNAL-IP   PORT(S)        AGE
    vm1-service   LoadBalancer   172.26.232.167   10.200.0.51   22:31141/TCP   6d20h
    
  6. Hubungkan ke alamat EXTERNAL-IP load balancer dengan protokol standar, seperti menggunakan klien SSH:

    ssh USERNAME@LOAD_BALANCER_IP_ADDRESS  -i PATH_TO_KEY
    

    Ganti nilai berikut:

    • USERNAME: nama pengguna untuk akun di VM Anda.
    • LOAD_BALANCER_IP_ADDRESS: Alamat IP load balancer Anda.
    • PATH_TO_KEY: jalur ke kunci SSH pribadi.

Terhubung langsung menggunakan SSH

Jika klien terhubung ke jaringan fisik yang sama dengan cluster Anthos di node bare metal dan Anda tidak memerlukan penggunaan tunnel SSH untuk terhubung ke cluster, Anda dapat terhubung menggunakan kubectl virt ssh.

  1. Untuk menggunakan SSH guna menghubungkan VM Linux dari konsol dengan add-on virtctl:

    kubectl virt ssh USERNAME@VM_NAME --namespace VM_NAMESPACE --kubeconfig KUBECONFIG
    

    Ganti nilai berikut:

    • USERNAME: nama pengguna untuk mengakses VM Anda. Akun ini dibuat jika tidak ada di VM.
    • VM_NAME: nama VM Anda.
  2. Setelah Anda berhasil terhubung menggunakan SSH VM dan tidak lagi memerlukan koneksi, keluar dari sesi SSH:

    exit
    

Menghubungkan langsung menggunakan konsol

Jika Anda tidak memiliki konektivitas jaringan langsung ke VM Linux untuk akses SSH, hubungkan ke konsol VM menggunakan Runtime VM di konsol GDC. Metode ini membuka konsol seri. Setelah terhubung, Anda diberikan {i>prompt<i} perintah, bukan konsol grafis.

  1. Untuk mengakses VM Linux dari konsol, gunakan add-on virtctl:

    kubectl virt console VM_NAME --kubeconfig KUBECONFIG
    

    Ganti VM_NAME dengan nama VM Anda.

    Saat diminta, masukkan kredensial pengguna untuk VM Anda. Kredensial ini harus ada di VM, atau diterapkan saat VM dibuat. Jika perlu, lihat bagian berikut untuk membuat kredensial pengguna awal saat Anda membuat VM.

  2. Setelah Anda berhasil terhubung ke konsol VM dan tidak lagi memerlukan koneksi, keluar dari sesi dan konsol VM:

    Ctrl + ]
    

Menghubungkan langsung menggunakan VNC

Anda dapat menggunakan perintah kubectl virt vnc untuk membuka konsol grafis Virtual Network Computing (VNC) untuk mengakses VM Anda. Metode ini berfungsi untuk VM yang menjalankan OS tamu Windows atau Linux. Saat Anda menggunakan perintah kubectl virt vnc, Runtime VM di GDC akan membuka VNC, sehingga Anda tidak perlu mengaktifkan VNC di OS tamu.

Anda memerlukan kredensial yang ada untuk login ke VM, seperti kredensial yang Anda tentukan untuk membuat kredensial pengguna awal saat membuat VM.

  1. Untuk mengakses VM menggunakan VNC, gunakan add-on virtctl:

    kubectl virt vnc VM_NAME --kubeconfig KUBECONFIG
    

    Ganti VM_NAME dengan nama VM Anda.

    Saat diminta, masukkan kredensial pengguna untuk VM Anda.

  2. Setelah Anda berhasil terhubung ke sesi VNC VM dan tidak lagi memerlukan koneksi, logout dari VM untuk menutup koneksi VNC.

Membuat kredensial pengguna awal

Saat terhubung ke VM menggunakan konsol, Anda harus menentukan kredensial pengguna. Proses pembuatan kredensial pengguna awal berbeda untuk sistem operasi tamu Linux dan Windows.

OS tamu Linux

Untuk VM Linux, kredensial pengguna dapat dibangun di image kustom Anda, atau dapat ditentukan saat Anda membuat VM.

  • Gunakan parameter --configure-initial-password dengan perintah kubectl virt create:

    kubectl virt create vm VM_NAME \
        --image ubuntu20.04 \
        --os-type Linux \
        --configure-initial-password USERNAME:PASSWORD \
        --kubeconfig KUBECONFIG
    

    Ganti nilai berikut:

    • VM_NAME: nama untuk VM Anda.
    • USERNAME: nama pengguna untuk akun yang akan dibuat di VM.
    • PASSWORD: sandi untuk akun pengguna.

    Contoh perintah ini membuat VM Linux yang menjalankan Ubuntu 20.04. Sebaiknya Anda mengubah kredensial awal setelah pertama kali login ke VM.

OS tamu Windows

Gunakan langkah-langkah berikut untuk mereset sandi pengguna yang sudah ada atau membuat sandi awal untuk pengguna baru:

  1. Aktifkan agen tamu di VM Windows Anda:

    1. Konfigurasi VM untuk mengaktifkan agen tamu.

    2. Menggunakan VNC atau RDP untuk terhubung ke VM.

    3. Di VM, buka drive guest agent. Dalam sebagian besar kasus, ini adalah drive E:.

    4. Gunakan PowerShell untuk menjalankan install.ps1.

      Tindakan ini akan menginstal dan memulai agen tamu. Agen tamu akan dimulai secara otomatis untuk mulai ulang VM berikutnya.

    5. Tutup sesi jarak jauh.

  2. Di workstation admin, gunakan perintah berikut untuk mereset (atau menetapkan jika Anda menggunakan nama pengguna baru) sandi VM Windows:

    kubectl virt reset-windows-password VM_NAME \
        --user=USERNAME \
        --namespace=VM_NAMESPACE
    

    Ganti kode berikut:

    • VM_NAME: nama VM.
    • USERNAME: nama pengguna yang sandinya ingin Anda reset (atau setel). Jika nama pengguna baru, perintah ini akan membuat akun Windows baru dan menetapkan sandi awal.
    • VM_NAMESPACE: (Opsional) namespace VM. Flag ini bersifat opsional. Jika tidak ditentukan, namespace default, default, akan digunakan.

    Untuk mereset (atau menyetel) sandi tanpa dialog konfirmasi, gunakan flag --force opsional. Saat Anda menggunakan tanda --force, dialog akan memperingatkan Anda tentang konsekuensi reset sandi untuk akun yang sudah ada. Tanpa tanda --force, perintah akan meminta Anda untuk mengonfirmasi reset sandi dengan teks berikut:

    This command creates an account and sets an initial password for the
    user USERNAME if the account does not already exist.
    If the account already exists, resetting the password can cause the
    LOSS OF ENCRYPTED DATA secured with the current password, including
    files and stored passwords.
    
    Would you like to set or reset the password for USERNAME (Y/n)?
    

    Setelah Anda mengonfirmasi (atau memaksakan) reset sandi, perintah tersebut akan menampilkan sandi baru untuk VM dan nama pengguna yang ditentukan:

    Resetting and retrieving password for USERNAME on VM_NAME
    
    vm_name:    VM_NAME
    username:   USERNAME
    password:   PASSWORD
    

Langkah selanjutnya