Runtime VM di GDC menggunakan role-based access control (RBAC) untuk memungkinkan Anda menetapkan dan menerapkan izin di seluruh workload virtual machine. Izin ini mengelola akses di seluruh resource yang ditentukan GKE, ditentukan KubeVirt, dan resource inti Kubernetes.
Untuk menyederhanakan pengelolaan akses, VM Runtime di GDC menyediakan ClusterRole yang telah dikonfigurasi sebelumnya untuk operasi administratif, pengeditan, dan tampilan.
Runtime VM di GDC otomatis menggabungkan peran ini ke dalam ClusterRole admin, edit, dan view Kubernetes default. Untuk skenario dengan namespace, peran kubevm.cluster.view khusus memberikan akses baca ke resource di seluruh cluster. Administrator juga dapat menggunakan peran ini sebagai template untuk
mendesain model akses kustom.
ClusterRole yang telah ditetapkan sebelumnya
Bagian ini menjelaskan setiap ClusterRole yang telah ditetapkan. ClusterRole ini hanya tersedia jika VM Runtime on GDC diaktifkan:
- Saat Runtime VM di GDC diaktifkan, empat ClusterRole yang telah ditetapkan akan otomatis dibuat.
- Jika Runtime VM di GDC dinonaktifkan, empat ClusterRole yang telah ditetapkan akan dihapus.
Tabel berikut mencantumkan peran cluster dan izin terkaitnya:
| Peran cluster | Deskripsi | Kata kerja akses |
|---|---|---|
kubevm.admin |
Memberikan akses penuh ke semua resource GKE. |
|
kubevm.edit |
Memberikan akses baca/tulis ke semua resource GKE. |
|
kubevm.view |
Memberikan akses baca ke semua resource GKE. |
|
kubevm.cluster.view |
Memberikan akses baca ke resource di seluruh cluster. Peran cluster ini diperlukan saat peran edit/view terikat ke namespace, sementara akses ke resource di seluruh cluster diperlukan. |
|
ClusterRole Gabungan
ClusterRole kubevm.admin, kubevm.view, dan kubevm.edit tidak digunakan secara langsung. Sebagai gantinya, ketiga peran ini digabungkan ke ClusterRole default Kubernetes, yaitu admin, view, dan edit. Agregasi ini memperluas peran Kubernetes default sehingga dapat digunakan untuk mengelola resource GKE. Dengan
ClusterRoles gabungan,
Anda dapat menggunakan peran default Kubernetes untuk mengelola akses ke resource GKE
atau membuat peran Anda sendiri berdasarkan ClusterRoles yang telah ditetapkan.
Contoh label agregasi
ClusterRole kubevm.edit memiliki label
rbac.authorization.k8s.io/aggregate-to-edit: "true", yang menggabungkannya ke
ClusterRole edit Kubernetes. Izin dalam ClusterRole kubevm.edit diberikan ke peran edit default Kubernetes. ClusterRole kubevm.admin
dan kubevm.view digabungkan dengan cara yang sama dengan
anotasi aggregate-to-admin atau aggregate-to-view.
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
name: kubevm.edit
labels:
kubevm: kubevm.edit
rbac.authorization.k8s.io/aggregate-to-edit: "true"
...
Skenario Pengguna Umum
Bagian berikut menjelaskan cara menggunakan RoleBinding dan ClusterRoleBinding untuk memberikan izin yang ditentukan dalam ClusterRoles yang telah ditetapkan kepada pengguna atau sekumpulan pengguna.
Admin cluster
Untuk memberikan izin admin kepada pengguna atau sekelompok pengguna, buat
ClusterRoleBinding dengan ClusterRole admin default Kubernetes.
Contoh ClusterRoleBinding
Contoh ClusterRoleBinding admin-charlie berikut memberi pengguna charlie
izin admin. ClusterRoleBinding menggunakan izin dari ClusterRole admin Kubernetes default, yang mencakup izin dari ClusterRole kubevm.admin yang telah ditetapkan melalui agregasi.
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: admin-charlie
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: admin
subjects:
- apiGroup: rbac.authorization.k8s.io
kind: User
name: charlie
Cluster viewer
Untuk memberikan izin pelihat kepada pengguna atau sekelompok pengguna, buat ClusterRoleBinding dengan ClusterRole view default Kubernetes. Lihat
Contoh ClusterRoleBinding untuk contoh
ClusterRoleBinding yang serupa.
Editor cluster
Untuk memberikan izin editor kepada pengguna atau sekelompok pengguna, buat
ClusterRoleBinding dengan ClusterRole edit default Kubernetes. Lihat
Contoh ClusterRoleBinding untuk contoh
ClusterRoleBinding yang serupa.
Editor dengan namespace
Untuk memberikan izin editor dengan namespace kepada pengguna atau sekelompok pengguna, Anda perlu membuat dua binding terpisah:
Buat RoleBinding di namespace dan referensikan ClusterRole
editKubernetes default.Buat ClusterRoleBinding yang merujuk ke ClusterRole
kubevm.cluster.viewyang telah ditetapkan. ClusterRoleBinding ini diperlukan, karena beberapa resource, sepertivirtualmachinetypesdanstorageclasses, tidak memiliki namespace.
Contoh binding peran (editor dengan namespace)
Contoh RoleBinding dan ClusterRoleBinding berikut memberi pengguna charlie
izin editor untuk resource di namespace default:
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
name: edit-charlie
namespace: default
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: edit
subjects:
- apiGroup: rbac.authorization.k8s.io
kind: User
name: charlie
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: kubevm-cluster-view-charlie
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: kubevm.cluster.view
subjects:
- apiGroup: rbac.authorization.k8s.io
kind: User
name: charlie
Penampil dengan namespace
Untuk memberikan izin pelihat dengan namespace kepada pengguna atau sekelompok pengguna, Anda perlu membuat dua binding terpisah:
Buat RoleBinding di namespace dan referensikan ClusterRole
viewKubernetes default.Buat ClusterRoleBinding yang merujuk ke ClusterRole
kubevm.cluster.viewyang telah ditetapkan.
Lihat Contoh binding peran (editor dengan namespace) untuk mengetahui contoh RoleBinding dan ClusterRoleBinding yang serupa.
Resource yang digunakan oleh Runtime VM di GDC
Bagian berikut berisi tabel resource yang digunakan oleh Runtime VM di GDC. Bagian ini hanya untuk tujuan informasi. Jika Anda berencana menggunakan peran yang telah ditetapkan dalam skenario pengguna umum yang dijelaskan di bagian sebelumnya, informasi ini tidak memiliki kegunaan khusus.
Namun, jika tidak ingin menggunakan peran yang telah ditetapkan, Anda dapat menggunakan informasi resource ini untuk membuat peran khusus Anda sendiri.
Resource yang ditentukan Google Kubernetes Engine
ClusterRoles yang telah ditetapkan berfokus pada akses ke resource yang ditentukan GKE. Tabel berikut mencantumkan resource GKE dan izin akses yang diberikan oleh setiap ClusterRole yang telah ditetapkan.
| Resource | Dibuat | Berdasarkan cluster | kubevm.admin |
kubevm.view |
kubevm.edit |
kubevm.cluster.view |
|---|---|---|---|---|---|---|
virtualmachineaccessrequests |
– | – | Penuh | Baca | Baca/Tulis | – |
virtualmachinedisks |
– | – | Penuh | Baca | Baca/Tulis | – |
virtualmachines |
– | – | Penuh | Baca | Baca/Tulis | – |
gpuallocations |
– | – | Penuh | Baca | Baca/Tulis | – |
guestenvironmentdata |
Ya | – | Penuh | Baca | Baca/Tulis | – |
vmruntimes |
– | Ya | Penuh | Baca | Baca/Tulis | Baca |
virtualmachinetypes |
– | Ya | Penuh | Baca | Baca/Tulis | Baca |
vmhighavailabilitypolicies |
– | Ya | Penuh | Baca | Baca/Tulis | Baca |
networkinterfaces |
Ya | – | Penuh | Baca | Baca/Tulis | – |
networks |
– | Ya | Penuh | Baca | Baca/Tulis | Baca |
Resource KubeVirt
Runtime VM di GDC didasarkan pada project open source KubeVirt. Secara default, izin untuk resource KubeVirt digabungkan secara otomatis ke peran Kubernetes default, mirip dengan resource yang dikelola GKE. Gunakan informasi resource dalam tabel berikut jika Anda ingin membuat peran khusus Anda sendiri:
| Resource | Dibuat | Berdasarkan cluster |
|---|---|---|
virtualmachineinstances/console |
– | – |
virtualmachineinstances/vnc |
– | – |
virtualmachineinstances/portforward |
– | – |
virtualmachineinstances/start |
– | – |
virtualmachineinstances/perhentian |
– | – |
virtualmachineinstances/restart |
– | – |
virtualmachines |
Ya | – |
virtualmachineinstances |
Ya | – |
datavolumes |
– | – |
storageprofiles |
– | Ya |
cdiconfigs |
– | Ya |
Resource Kubernetes
Saat menggunakan VM Runtime di GDC dan VM, Anda mungkin perlu mengelola akses ke resource Kubernetes berikut. Gunakan informasi resource dalam tabel berikut jika Anda ingin membuat peran khusus Anda sendiri:
| Resource | Dibuat | Berdasarkan cluster |
|---|---|---|
pods |
Ya | – |
services |
– | – |
persistentvolumeclaims |
– | – |
secrets |
– | – |
nodes |
– | Ya |
storageclasses |
– | Ya |
configmaps |
– | – |
Contoh YAML ClusterRole
Anda dapat mengambil YAML untuk ClusterRole dengan perintah kubectl berikut:
kubectl get ClusterRole CLUSTERROLE_NAME -o yaml --kubeconfig KUBECONFIG_PATH
Ganti kode berikut:
CLUSTERROLE_NAME: nama ClusterRole, sepertikubevm.cluster.view.KUBECONFIG_PATH: jalur ke file kubeconfig untuk cluster.
Berikut adalah contoh output perintah untuk masing-masing dari empat ClusterRole yang telah ditetapkan:
kubevm.adminapiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: creationTimestamp: "2022-10-11T21:10:31Z" labels: kubevm: kubevm.admin rbac.authorization.k8s.io/aggregate-to-admin: "true" name: kubevm.admin resourceVersion: "16654950" uid: 3296c279-6e85-4ea6-b250-548bf0c3e935 rules: - apiGroups: - vm.cluster.gke.io resources: - virtualmachineaccessrequests - virtualmachinedisks - virtualmachines - gpuallocations - guestenvironmentdata - vmruntimes - virtualmachinetypes - vmhighavailabilitypolicies verbs: - get - delete - create - update - patch - list - watch - deletecollection - apiGroups: - networking.gke.io resources: - networkinterfaces - networks verbs: - get - delete - create - update - patch - list - watch - deletecollectionkubevm.editapiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: creationTimestamp: "2022-10-11T21:10:31Z" labels: kubevm: kubevm.edit rbac.authorization.k8s.io/aggregate-to-edit: "true" name: kubevm.edit resourceVersion: "16654951" uid: 237bf9ae-b2c8-4303-94dc-e6425a2df331 rules: - apiGroups: - vm.cluster.gke.io resources: - virtualmachineaccessrequests - virtualmachinedisks - virtualmachines - gpuallocations - guestenvironmentdata - vmruntimes - virtualmachinetypes - vmhighavailabilitypolicies verbs: - get - delete - create - update - patch - list - watch - apiGroups: - networking.gke.io resources: - networkinterfaces - networks verbs: - get - delete - create - update - patch - list - watchkubevm.viewapiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: creationTimestamp: "2022-10-11T21:10:31Z" labels: kubevm: kubevm.view rbac.authorization.k8s.io/aggregate-to-view: "true" name: kubevm.view resourceVersion: "16654953" uid: b5b54e2d-0097-4698-abbd-aeac212d0a34 rules: - apiGroups: - vm.cluster.gke.io resources: - virtualmachineaccessrequests - virtualmachinedisks - virtualmachines - gpuallocations - guestenvironmentdata - vmruntimes - virtualmachinetypes - vmhighavailabilitypolicies verbs: - get - list - watch - apiGroups: - networking.gke.io resources: - networkinterfaces - networks verbs: - get - list - watchkubevm.cluster.viewapiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: creationTimestamp: "2022-10-11T21:10:31Z" labels: kubevm: kubevm.cluster.view name: kubevm.cluster.view resourceVersion: "16654956" uid: b25dde64-67da-488b-81d2-1a08f9a4a7c1 rules: - apiGroups: - vm.cluster.gke.io resources: - vmruntimes - virtualmachinetypes - vmhighavailabilitypolicies verbs: - get - list - watch - apiGroups: - networking.gke.io resources: - networks verbs: - get - list - watch