Mengonfigurasi kredensial yang disiapkan untuk cluster pengguna

Dokumen ini menunjukkan cara mengonfigurasi kredensial yang sudah disiapkan untuk cluster pengguna di GKE di VMware.

Dengan kredensial yang telah disiapkan, Anda dapat menyimpan kredensial untuk cluster pengguna di Rahasia dalam cluster admin. Hal ini memberikan elemen keamanan, karena Anda tidak perlu menyimpan sandi dan kunci akun layanan di workstation admin saat membuat cluster pengguna.

Anda menyiapkan Secret di cluster admin terlebih dahulu. Kemudian saat membuat cluster pengguna, Anda dapat menentukan bahwa kredensial tertentu harus diambil dari Secret yang sudah disiapkan di cluster admin. Anda juga dapat menggunakan Secret yang sudah disiapkan saat merotasi kredensial di cluster pengguna.

Sebelum memulai

Buat cluster admin jika Anda belum memilikinya.

Ringkasan prosedur

  1. Isi file konfigurasi Secrets.

  2. Di cluster admin, buat grup Secret. Setiap grup Secret berada di namespace Kubernetes-nya sendiri.

  3. Buat cluster pengguna. Dalam file konfigurasi cluster pengguna, tunjukkan bahwa Anda ingin kredensial diambil dari Secrets dalam namespace tertentu di cluster admin.

  4. Buat grup Rahasia tambahan dan versi tambahan Secret Anda sesuai kebutuhan.

  5. Perbarui kredensial untuk cluster pengguna yang ada sesuai kebutuhan.

  6. Buat cluster pengguna tambahan sesuai keinginan. Di setiap file konfigurasi cluster pengguna, tentukan namespace Secrets. Anda juga dapat menentukan versi Secret yang ingin digunakan untuk kredensial tertentu.

Isi file konfigurasi secret Anda

Buat template untuk file konfigurasi Secrets:

gkectl create-config secrets

Perintah sebelumnya menghasilkan file bernama secrets.yaml. Anda dapat mengubah nama dan lokasi {i>file<i} ini jika mau.

Pahami file konfigurasi dengan membaca dokumen file konfigurasi Secrets. Anda mungkin ingin tetap membuka dokumen ini di tab atau jendela terpisah.

Di file konfigurasi Secrets, isi nilai yang relevan untuk situasi Anda. Anda harus mengisi nilai untuk namespace yang diawali dengan gke-onprem-secrets-.

Berikut adalah contoh file konfigurasi Secret yang memiliki satu grup Secret. Grup ini memiliki nilai untuk kredensial vCenter dan empat kunci akun layanan:

apiVersion: v1
kind: ClusterSecrets
secretGroups:
- namespace: "gke-onprem-secrets-user-cluster-1"
  secrets
    vCenter:
      username: "my-vcenter-account"
      password: "U$icUKEW#INE"
    componentAccessServiceAccount:
      serviceAccountKeyPath: "my-key-folder/component-access-key.json"
    registerServiceAccount:
      serviceAccountKeyPath: "my-key-folder/connect-register-key.json"
    stackdriverServiceAccount:
      serviceAccountKeyPath: "my-key-folder/log-mon-key.json"
    cloudAuditLoggingServiceAccount:
      serviceAccountKeyPath: "my-key-folder/audit-log-key.json"

Membuat Rahasia yang telah disiapkan

Buat Secret yang telah disiapkan di cluster admin:

gkectl prepare secrets --kubeconfig ADMIN_CLUSTER_KUBECONFIG --secret-config SECRETS_CONFIG

Ganti kode berikut:

  • ADMIN_CLUSTER_KUBECONFIG: jalur file kubeconfig cluster admin

  • SECRETS_CONFIG: jalur file konfigurasi Secrets Anda

Lihat Rahasia yang Anda siapkan

Tampilkan Secret yang telah disiapkan di cluster admin:

gkectl list secrets --kubeconfig ADMIN_CLUSTER_KUBECONFIG

Contoh output:

The following secrets have been found:
- namespace: gke-onprem-secrets-user-cluster-1
  - secrets with name prefix: component-access-sa-creds
    name: component-access-sa-creds.1, version 1, age: 58s
  - secrets with name prefix: cloud-audit-logging-service-account-creds
    name: cloud-audit-logging-service-account-creds.1, version: 1, age: 58s
  - secrets with name prefix: register-service-account-creds
    name: register-service-account-creds.1, version: 1, age: 58s
  - secrets with name prefix: stackdriver-service-account-creds
    name: stackdriver-service-account-creds.1, version: 1, age: 58s
  - secrets with name prefix: vsphere-creds
    name: vsphere-creds.1, version: 1, age: 58s

Anda juga dapat menjalankan kubectl get secrets untuk mencantumkan Secret dalam namespace. Misalnya:

kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG get secrets --namespace gke-onprem-secrets-user-cluster-1

Contoh output:

component-access-sa-creds ...
cloud-audit-logging-service-account-creds ...
register-service-account-creds.1 ...
stackdriver-service-account-creds.1 ...
vsphere-creds.1 ...

Dalam output sebelumnya, Anda dapat melihat bahwa setiap nama Secret memiliki ekstensi yang menunjukkan versi Secret tersebut. Dalam contoh ini, semua Secret memiliki versi 1.

Membuat cluster pengguna

Ikuti petunjuk dalam artikel Membuat cluster pengguna.

Saat Anda mengisi file konfigurasi cluster pengguna, masukkan nilai untuk preparedSecrets.namespace. Nilai ini harus cocok dengan namespace yang Anda tentukan sebelumnya dalam file konfigurasi Secrets.

Contoh:

preparedSecrets:
  namespace: "gke-onprem-secrets-user-cluster-1"

Dalam file konfigurasi cluster pengguna Anda, jangan tentukan nilai untuk kolom berikut. Kolom ini tidak diperlukan, karena GKE di VMware mendapatkan kredensial dan kunci dari Secret yang Anda siapkan.

  • vCenter.credentials.fileRef.path
  • componentAccessServiceAccountKeyPath
  • loadBalancer.f5BigIP.credentials.fileRef.path
  • gkeConnect.registerServiceAccountKeyPath
  • stackdriver.serviceAccountKeyPath
  • usageMetering.bigQueryServiceAccountKeyPath
  • cloudAuditLogging.serviceAccountKeyPath
  • privateRegistry.credentials.fileRef.path

Dalam file konfigurasi cluster pengguna, tentukan versi untuk Secret yang sudah disiapkan yang ingin Anda gunakan. Berikut adalah contoh yang menentukan versi 1 untuk masing-masing dari lima Secret:

vCenter:
  credentials:
    secretRef:
      version "1"
...
componentAccessServiceAccountKey:
  secretRef:
    version: "1"
...
gkeConnect:
  registerServiceAccountKey:
    secretRef:
      version: "1"
...
stackdriver:
  serviceAccountKey:
    secretRef:
      version: "1"
...
cloudAuditLogging:
  serviceAccountKey:
    secretRef:
      version: "1"

Nilai untuk version harus berupa string bilangan bulat atau string "latest". Jika Anda tidak menentukan nilai untuk version, versi terbaru akan digunakan.

Selesaikan pembuatan cluster pengguna seperti yang dijelaskan dalam Membuat cluster pengguna.

Membuat Rahasia tambahan yang disiapkan

Bagian ini menunjukkan cara membuat beberapa Secret versi 2 di namespace yang sudah ada.

Buat file konfigurasi Secrets baru bernama secrets-2.yaml. Tentukan namespace yang ada, dan berikan kredensial untuk Secret yang dipilih.

Contoh:

apiVersion: v1
kind: ClusterSecrets
secretGroups:
- namespace: "gke-onprem-secrets-user-cluster-1"
  secrets:
    stackdriverServiceAccount:
      serviceAccountKeyPath: "log-mon-sa-2.json"
    cloudAuditLoggingServiceAccount:
      serviceAccountKeyPath: "audit-log-sa-2.json"

Contoh sebelumnya menyediakan jalur kunci untuk Secret berikut dalam namespace gke-onprem-secrets-user-cluster-1.

  • Versi 2 dari stackdriver-service-account-creds Secret
  • Versi 2 dari cloud-audit-logging-service-account-creds Secret

Buat Secret baru:

gkectl prepare secrets --kubeconfig ADMIN_CLUSTER_KUBECONFIG --secret-config secrets-2.yaml

Tampilkan Secret yang telah disiapkan di cluster admin:

gkectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG list secrets

Contoh output:

The following secrets have been found:
- namespace: gke-onprem-secrets-user-cluster-1
  - secrets with name prefix: component-access-sa-creds
    name: component-access-sa-creds.1, version 1, age: 11h
  - secrets with name prefix: cloud-audit-logging-service-account-creds
    name: cloud-audit-logging-service-account-creds.1, version: 1, age: 11h
    name: cloud-audit-logging-service-account-creds.2, version: 2, age: 33m
  - secrets with name prefix: register-service-account-creds
    name: register-service-account-creds.1, version: 1, age: 11h
  - secrets with name prefix: stackdriver-service-account-creds
    name: stackdriver-service-account-creds.1, version: 1, age: 11h
    name: stackdriver-service-account-creds.2, version: 2, age: 33m
  - secrets with name prefix: vsphere-creds
    name: vsphere-creds.1, version: 1, age: 11h

Dalam output sebelumnya, Anda dapat melihat bahwa ada dua versi Secret stackdriver-service-account-creds dan dua versi Secret cloud-audit-logging-service-account-creds.

Merotasi kredensial untuk cluster pengguna

Bagian ini menunjukkan cara merotasi kredensial yang dipilih untuk cluster pengguna yang sudah ada.

Sebelum merotasi kredensial, periksa versi Secret saat ini yang digunakan di cluster:

gkectl list secrets cluster --cluster-name USER_CLUSTER_NAME  kubeconfig ADMIN_CLUSTER_KUBECONFIG

Contoh output:

The following prepared secrets have been used for cluster "user-cluster-1":
- namespace: gke-onprem-secrets-user-cluster-1
  secret: vsphere-creds.1, version: 1
  secret: f5-creds.1, version: 1
  secret: component-access-sa-creds.1, version 1
  secret: register-service-account-creds.1, version: 1
  secret: stackdriver-service-account-creds.1, version: 1
  secret: cloud-audit-logging-service-account-creds.1, version: 1

Salin file konfigurasi cluster pengguna Anda ke file bernama user-cluster-update.yaml.

Di user-cluster-update.yaml, tambahkan bagian serviceAccountKey. Misalnya, contoh berikut memiliki bagian serviceAccountKey pada stackdriver dan cloudAuditLogging:

stackdriver:
  projectID: "my-project-123"
  clusterLocation: "us-central1"
  serviceAccountKey:
    secretRef:
      version: "2"
cloudAuditLogging:
  projectID: "my-project-123"
  clusterLocation: "us-central-1"
  serviceAccountKey:
    secretRef:
      version: "latest"

Contoh sebelumnya menetapkan bahwa saat cluster pengguna diupdate, cluster akan menggunakan:

  • Versi 2 dari stackdriver-service-account-creds Secret

  • Versi terbaru Secret cloud-audit-logging-service-account-creds. Dalam contoh ini, itu adalah versi 2.

Perbarui kredensial untuk cluster pengguna:

gkectl update credentials stackdriver --kubeconfig ADMIN_CLUSTER_KUBECONFIG --config user-cluster-2.yaml

gkectl update credentials cloudauditlogging --kubeconfig ADMIN_CLUSTER_KUBECONFIG --config user-cluster-2.yaml

Sekarang cluster pengguna menggunakan Secret yang telah disiapkan berikut:

  • Versi 1 dari vsphere-creds
  • Versi 1 dari component-access-sa-creds
  • Versi 1 dari register-service-account-creds
  • Versi 2 dari stackdriver-service-account-creds
  • Versi 2 dari cloud-audit-logging-service-account-creds

Membuat Secret dan cluster pengguna tambahan

Jika Anda berencana untuk membuat cluster pengguna tambahan, pikirkan cara mengatur Secret yang telah disiapkan. Sebaiknya buat namespace terpisah di cluster admin untuk setiap cluster pengguna. Atau, Anda mungkin ingin membagikan namespace Secret yang telah disiapkan dengan sama untuk beberapa atau semua cluster pengguna.

Misalnya, Alice, Bob, dan Carol masing-masing akan memiliki cluster pengguna. Anda dapat membuat tiga grup Rahasia seperti yang ditunjukkan dalam contoh berikut:

apiVersion: v1
kind: ClusterSecrets
secretGroups:
- namespace: "gke-onprem-secrets-alice"
  secrets:
    vCenter:
      username: "alice"
      password: "zC7r^URDPq2t"
    componentAccessServiceAccount:
      serviceAccountKeyPath: "component-access-sa-a.json"
    registerServiceAccount:
      serviceAccountKeyPath: "register-sa-a.json"
    stackdriverServiceAccount:
      serviceAccountKeyPath: "log-mon-sa-a.json"
    cloudAuditLoggingServiceAccount:
      serviceAccountKeyPath: "audit-log-sa-a.json"
- namespace: "gke-onprem-secrets-bob"
  secrets:
    vCenter:
      username: "bob"
      password: "zC8r^URDPq2t"
    componentAccessServiceAccount:
      serviceAccountKeyPath: "component-access-sa-b.json"
    registerServiceAccount:
      serviceAccountKeyPath: "register-sa-b.json"
    stackdriverServiceAccount:
      serviceAccountKeyPath: "log-mon-sa-b.json"
    cloudAuditLoggingServiceAccount:
      serviceAccountKeyPath: "audit-log-sa-b.json"
- namespace: "gke-onprem-secrets-carol"
  secrets:
    vCenter:
      username: "carol"
      password: "zC9r^URDPq2t"
    componentAccessServiceAccount:
      serviceAccountKeyPath: "component-access-sa-c.json"
    registerServiceAccount:
      serviceAccountKeyPath: "register-sa-c.json"
    stackdriverServiceAccount:
      serviceAccountKeyPath: "log-mon-sa-c.json"
    cloudAuditLoggingServiceAccount:
      serviceAccountKeyPath: "audit-log-sa-c.json"

Seiring waktu, Anda dapat membuat versi Secret tambahan di setiap grup Secret.

Dalam file konfigurasi cluster pengguna, berikan nilai untuk serviceAccountKey.secretRef.version guna menentukan versi Secret yang ingin Anda gunakan. Anda dapat menetapkan nilai ke "latest", string kosong, atau string bilangan bulat.

Misalnya, anggap semua Rahasia Anda memiliki versi 1, 2, dan 3. Dan anggaplah ini adalah bagian dari file konfigurasi cluster pengguna untuk Alice.

apiVersion: v1
kind: UserCluster
name: "user-cluster-alice"
preparedSecrets:
  namespace: "gke-onprem-secrets-alice"
...
vCenter:
  credentials:
gkeConnect:
  projectID: "project-a"
  serviceAccountKey:
    secretRef:
      version: "2"
stackdriver:
  projectID: "project-a"
  clusterLocation: "us-central1"
  serviceAccountKey:
    secretRef:
      version: "latest"
cloudAuditLogging:
  projectID: "project-a"
  clusterLocation: "us-central-1"
  serviceAccountKey:
    secretRef:
      version: ""

Pada contoh sebelumnya, kita dapat melihat:

  • Tidak ada secretRef yang ditentukan untuk vCenter, sehingga cluster akan menggunakan versi terbaru vsphere-creds Secret di namespace gke-onprem-secrets-alice.

  • Cluster akan menggunakan Rahasia register-service-account-creds versi 2 di namespace gke-onprem-secrets-alice.

  • Cluster akan menggunakan versi terbaru Secret stackdriver-service-account-creds di namespace gke-onprem-secrets-alice. Dalam contoh ini, versi yang digunakan adalah 3.

  • Versi untuk cloudAuditLogging adalah string kosong, sehingga cluster akan menggunakan versi terbaru Rahasia cloud-audit-logging-service-account-creds dalam namespace gke-onprem-secrets-alice. Dalam contoh ini, versi tersebut adalah versi 3.

  • Tidak ada secretRef.version yang ditentukan untuk akun layanan akses komponen, sehingga cluster akan menggunakan versi terbaru.

Hapus Rahasia yang sudah disiapkan

Untuk mencantumkan semua Secret yang disiapkan dan namespace-nya:

gkectl list secrets --kubeconfig ADMIN_CLUSTER_KUBECONFIG

Jika namespace Rahasia yang disiapkan tidak digunakan oleh cluster pengguna mana pun, Anda dapat menghapus namespace tersebut.

Untuk menghapus namespace Rahasia yang telah disiapkan dan semua Secret di dalamnya:

gkectl delete secret –namespace PREPARED_SECRET_NAMESPACE \
    --kubeconfig ADMIN_CLUSTER_KUBECONFIG

Jika setiap Secret yang disiapkan tidak digunakan oleh cluster pengguna mana pun, Anda dapat menghapus Secret tersebut.

Untuk menghapus Rahasia yang sudah disiapkan satu per satu:

gkectl delete secret –namespace PREPARED_SECRET_NAMESPACE \
    --kubeconfig ADMIN_CLUSTER_KUBECONFIG \
    --secret-name SECRET