Membuat dan menggunakan kredensial untuk mengimpor gambar dari Cloud Storage untuk Runtime VM di GDC

Dokumen ini menunjukkan cara membuat dan menggunakan kredensial untuk mengakses Cloud Storage menggunakan VM Runtime di GDC. {i>Cloud Storage<i} plugin memungkinkan Anda menggunakan Pengimpor Data dalam Container (CDI) untuk mengimpor image VM dari bucket Cloud Storage. Anda kemudian dapat membuat dari image ini di Cloud Storage dan memasangnya ke VM yang berjalan di cluster Anda. CDI diaktifkan secara otomatis di cluster yang menjalankan Runtime VM di GDC.

Sebelum memulai

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

Ringkasan kredensial

Untuk mengakses Cloud Storage, Anda menggunakan akun layanan yang menyediakan kredensial yang berbeda ke bucket penyimpanan. Akun layanan memerlukan agar berhasil mengakses bucket penyimpanan:

  • Bucket penyimpanan publik: Anda menggunakan akun layanan untuk identifikasi mandiri, tetapi tidak ada izin akses khusus yang diperlukan.
  • Bucket penyimpanan pribadi: Akun penyimpanan memerlukan penampil atau hak istimewa admin ke bucket penyimpanan.

Ada dua cara untuk memberikan kredensial akun layanan ke CDI:

  • Konfigurasikan Kredensial Default Aplikasi (ADC) Google pada node di cluster Anda. Untuk informasi selengkapnya, lihat Mengautentikasi sebagai akun layanan.
  • Berikan Rahasia yang berisi kunci akun layanan untuk mengakses Cloud Storage. Bagian selanjutnya dari dokumen ini menunjukkan cara membuat kunci akun layanan dan Rahasia.

Buat Secret

Anda meneruskan kunci akun layanan ke Kubernetes menggunakan Secret yang dibuat di namespace Volume Data. Bagian data dari Secret berisi entri untuk creds-gcp.json. Nilainya adalah data layanan yang dienkode dengan base64 file kunci akun. CLI akan membuatkan data yang dienkode dengan base64. Jika Anda menggunakan Manifes YAML untuk membuat Secret, pertama-tama buat hash base64 konten file kunci akun layanan Anda.

CLI

  • Buat Secret menggunakan kubectl:

    kubectl create secret generic SECRET_NAME \
      --from-file=creds-gcp.json=SERVICE_ACCOUNT_KEY_PATH \
      --namespace NAMESPACE_NAME
    

    Ganti nilai berikut:

    • SECRET_NAME: nama untuk Secret Anda.
    • SERVICE_ACCOUNT_KEY_PATH: jalur ke file kunci akun layanan.
    • NAMESPACE_NAME: namespace untuk Secret Anda.
      • Buat Secret Anda di cluster tempat CDI berjalan dan di cluster yang sama sebagai Volume Data. CDI diaktifkan secara otomatis di yang menjalankan VM Runtime di GDC.

Manifes

  1. Buat manifes Secret, seperti my-secret.yaml, di editor pilihan:

    nano my-secret.yaml
    
  2. Salin dan tempel manifes YAML berikut:

    apiVersion: v1
    data:
      creds-gcp.json: BASE64_SERVICE_ACCOUNT_FILE
    kind: Secret
    metadata:
      name: SECRET_NAME
      namespace: NAMESPACE_NAME
    type: Opaque
    

    Ganti nilai berikut:

    • BASE64_SERVICE_ACCOUNT_FILE: hash base64 dari isi file kunci akun layanan Anda.
    • SECRET_NAME: nama untuk Secret Anda.
    • NAMESPACE_NAME: namespace untuk Secret Anda.
      • Buat Secret Anda di cluster tempat CDI berjalan dan di cluster yang sama sebagai Volume Data. CDI diaktifkan secara otomatis di yang menjalankan VM Runtime di GDC.
  3. Simpan dan tutup manifes Secret di editor Anda.

  4. Terapkan manifes Secret menggunakan kubectl:

    kubectl apply -f my-secret.yaml
    

Meneruskan Secret yang sudah ada

Anda dapat membuat SecretForwarder untuk diteruskan, bukan membuat Secret Secret yang ada untuk digunakan. SecretForwarder mendukung penerusan Secret dalam cluster yang sama, atau lintas cluster, seperti dari cluster admin ke cluster pengguna.

Agar dapat menggunakan Secret target untuk mengakses Cloud Storage, Secret sumber harus memiliki kunci creds-gcp.json di bagian data-nya.

Cluster yang sama

Contoh manifes SecretForwarder berikut meneruskan rahasia dengan cara :

apiVersion: baremetal.cluster.gke.io/v1
kind: SecretForwarder
metadata:
  name: cdi-gcs
  namespace: default
spec:
  inClusterTargetSecrets:
    name: gcs-sa
    namespaces:
    - default
  sourceSecret:
    name: gke-connect
    namespace: anthos-creds

Contoh ini melakukan hal berikut:

  • Membuat SecretForwarder bernama cdi-gcs di namespace default.
  • Meneruskan rahasia bernama gke-connect dalam namespace anthos-creds ke secret baru bernama gcs-sa di namespace default.
  • Membuat secret baru di cluster yang sama.

Untuk meneruskan Secret di cluster yang sama, selesaikan langkah-langkah berikut:

  1. Buat manifes SecretForwarder, seperti my-forwarded-secret.yaml, di editor pilihan Anda:

    nano my-forwarded-secret.yaml
    
  2. Salin dan tempel manifes YAML berikut:

    apiVersion: baremetal.cluster.gke.io/v1
    kind: SecretForwarder
    metadata:
      name: SECRET_FORWARDER_NAME
      namespace: NAMESPACE_NAME
    spec:
      inClusterTargetSecrets:
        name: TARGET_SECRET_NAME
        namespaces:
        - TARGET_NAMESPACE_NAME
      sourceSecret:
        name: SOURCE_SECRET_NAME
        namespace: SOURCE_NAMESPACE_NAME
    

    Ganti nilai berikut:

    • SECRET_FORWARDER_NAME: nama untuk {i>SecretForwarder<i}.
    • NAMESPACE_NAME: namespace untuk {i>SecretForwarder<i}.
    • TARGET_SECRET_NAME: nama untuk Secret baru Anda.
    • TARGET_NAMESPACE_NAME: namespace untuk Rahasia.
      • Buat Secret Anda di cluster tempat CDI berjalan dan di cluster yang sama sebagai Volume Data. CDI diaktifkan secara otomatis di yang menjalankan VM Runtime di GDC.
    • SOURCE_SECRET_NAME: nama Secret sumber Anda untuk diteruskan.
    • SOURCE_NAMESPACE_NAME: namespace sumber Rahasia untuk diteruskan.
  3. Simpan dan tutup manifes SecretForwarder di editor Anda.

  4. Terapkan manifes SecretForwarder menggunakan kubectl:

    kubectl apply -f my-forwarded-secret.yaml
    

Di seluruh cluster

Contoh manifes SecretForwarder berikut meneruskan rahasia ke seluruh {i>cluster <i}(klaster):

apiVersion: baremetal.cluster.gke.io/v1
kind: SecretForwarder
metadata:
  name: cdi-gcs
  namespace: cluster-user1
spec:
  RemoteClusterTargetSecrets:
    name: gcs-sa
    namespaces:
    - default
  sourceSecret:
    name: gke-connect
    namespace: anthos-creds

Contoh ini melakukan hal berikut:

  • Membuat SecretForwarder bernama cdi-gcs di namespace cluster-user1.
  • Meneruskan rahasia bernama gke-connect dalam namespace anthos-creds ke secret baru bernama gcs-sa di namespace default.
  • Membuat secret baru di cluster bernama user1.

Untuk meneruskan Secret di cluster yang sama, selesaikan langkah-langkah berikut:

  1. Buat manifes SecretForwarder, seperti my-forwarded-secret.yaml, di editor pilihan Anda:

    nano my-forwarded-secret.yaml
    
  2. Salin dan tempel manifes YAML berikut:

    apiVersion: baremetal.cluster.gke.io/v1
    kind: SecretForwarder
    metadata:
      name: SECRET_FORWARDER_NAME
      namespace: NAMESPACE_NAME
    spec:
      RemoteClusterTargetSecrets:
        name: TARGET_SECRET_NAME
        namespaces:
        - TARGET_NAMESPACE_NAME
      sourceSecret:
        name: SOURCE_SECRET_NAME
        namespace: SOURCE_NAMESPACE_NAME
    

    Ganti nilai berikut:

    • SECRET_FORWARDER_NAME: nama untuk SecretForwarder di cluster jarak jauh.
    • NAMESPACE_NAME: namespace untuk SecretForwarder di cluster jarak jauh.
    • TARGET_SECRET_NAME: nama untuk Secret baru Anda di cluster jarak jauh.
    • TARGET_NAMESPACE_NAME: namespace untuk Secret baru di cluster jarak jauh.
      • Buat Secret Anda di cluster tempat CDI berjalan dan di cluster yang sama sebagai Volume Data. CDI diaktifkan secara otomatis di yang menjalankan VM Runtime di GDC.
    • SOURCE_SECRET_NAME: nama Secret sumber Anda untuk diteruskan.
    • SOURCE_NAMESPACE_NAME: namespace sumber Rahasia untuk diteruskan.
  3. Simpan dan tutup manifes SecretForwarder di editor Anda.

  4. Terapkan manifes SecretForwarder di cluster admin menggunakan kubectl dengan KUBECONFIG cluster admin:

    kubectl apply -f my-forwarded-secret.yaml
    

Menggunakan Secret untuk mengimpor gambar

Untuk menggunakan Secret guna mengimpor gambar dari Cloud Storage saat Anda membuat disk virtual dan VM, selesaikan langkah-langkah berikut:

  1. Buat manifes yang menentukan VirtualMachineDisk dan VirtualMachine, seperti my-vm.yaml, di editor pilihan Anda:

    nano my-vm.yaml
    
  2. Salin dan tempel definisi YAML berikut:

    apiVersion: vm.cluster.gke.io/v1
    kind: VirtualMachineDisk
    metadata:
      name: VM_NAME-boot-dv
    spec:
      size: 20Gi
      source:
        gcs:
          url: IMAGE_URL
          secretRef: SECRET_NAME
    ---
    apiVersion: vm.cluster.gke.io/v1
    kind: VirtualMachine
    metadata:
      name: VM_NAME
    spec:
      interfaces:
        - name: eth0
          networkName: pod-network
          default: true
      disks:
        - boot: true
          virtualMachineDiskName: VM_NAME-boot-dv
    

    Ganti nilai berikut:

    • VM_NAME - nama VM Anda.
    • IMAGE_URL - URL ke disk image Anda Cloud Storage, seperti gs://my-images-bucket/disk.qcow2.
    • SECRET_NAME - nama rahasia Anda.
  3. Simpan dan tutup manifes di editor Anda.

  4. Buat VM dan disk menggunakan kubectl:

    kubectl apply -f my-vm.yaml
    

Langkah selanjutnya