בזמן הריצה של VM ב-GDC נעשה שימוש בבקרת גישה מבוססת-תפקידים (RBAC) כדי לאפשר לכם להגדיר ולאכוף הרשאות בעומסי העבודה של המכונות הווירטואליות. ההרשאות האלה מנהלות את הגישה למשאבים שמוגדרים ב-GKE, למשאבים שמוגדרים ב-KubeVirt ולמשאבי ליבה ב-Kubernetes.
כדי לייעל את ניהול הרשאות הגישה, סביבת זמן הריצה של VM ב-GDC מספקת ClusterRoles שהוגדרו מראש לפעולות ניהול, עריכה וצפייה.
סביבת זמן הריצה של VM ב-GDC צוברת באופן אוטומטי את התפקידים האלה ל-ClusterRoles של Kubernetes שמוגדרים כברירת מחדל: admin, edit ו-view. בתרחישים של מרחבי שמות, תפקיד kubevm.cluster.view ייעודי מספק גישת קריאה למשאבים ברמת האשכול. אדמינים יכולים גם להשתמש בתפקידים האלה כתבניות ליצירת מודלים של גישה בהתאמה אישית.
תפקידי ClusterRoles מוגדרים מראש
בקטע הזה מתוארים כל אחד מהתפקידים המוגדרים מראש ב-ClusterRoles. התפקידים האלה ב-ClusterRoles זמינים רק כשסביבת זמן הריצה של VM ב-GDC מופעלת:
- כשמפעילים את VM Runtime on GDC, ארבעת התפקידים ClusterRoles שמוגדרים מראש נוצרים באופן אוטומטי.
- כשמשביתים את VM Runtime on GDC, ארבעת התפקידים המוגדרים מראש של ClusterRoles נמחקים.
בטבלה הבאה מפורטים התפקידים באשכול וההרשאות שקשורות אליהם:
| תפקיד באשכול | תיאור | פעלים שקשורים לגישה |
|---|---|---|
kubevm.admin |
גישה מלאה לכל המשאבים של GKE. |
|
kubevm.edit |
הרשאת קריאה/כתיבה לכל משאבי GKE. |
|
kubevm.view |
הרשאת קריאה לכל המשאבים של GKE. |
|
kubevm.cluster.view |
מעניק גישת קריאה למשאבים ברמת האשכול. תפקיד האשכול הזה נדרש כשתפקיד העריכה/הצפייה קשור למרחב שמות, ונדרשת גישה למשאבים ברמת האשכול. |
|
תפקידי ClusterRoles מצטברים
לא משתמשים ישירות ב-ClusterRoles kubevm.admin, kubevm.view ו-kubevm.edit. במקום זאת, שלושת התפקידים האלה נצברים לתפקידי ClusterRoles שמוגדרים כברירת מחדל ב-Kubernetes: admin, view ו-edit, בהתאמה. הצבירה הזו מרחיבה את תפקידי ברירת המחדל של Kubernetes, כך שאפשר להשתמש בהם כדי לנהל את המשאבים של GKE. באמצעות ClusterRoles נצברים, אתם יכולים להשתמש בתפקידי ברירת המחדל של Kubernetes כדי לנהל את הגישה למשאבי GKE, או ליצור תפקידים משלכם על סמך ClusterRoles מוגדרים מראש.
דוגמה לתווית צבירה
ל-ClusterRole kubevm.edit יש את התווית rbac.authorization.k8s.io/aggregate-to-edit: "true", שצוברת אותו ל-ClusterRole edit של Kubernetes. ההרשאות ב-kubevm.edit ClusterRole ניתנות לתפקיד ברירת המחדל edit של Kubernetes. התפקידים kubevm.admin ו-kubevm.view נאספים באופן דומה עם ההערות aggregate-to-admin או 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"
...
תרחישי שימוש נפוצים
בקטעים הבאים מוסבר איך להשתמש ב-RoleBinding וב-ClusterRoleBinding כדי להעניק למשתמש או לקבוצת משתמשים את ההרשאות שצוינו ב-ClusterRoles המוגדרים מראש.
אדמין של אשכול
כדי לתת הרשאות אדמין למשתמש או לקבוצת משתמשים, יוצרים ClusterRoleBinding עם ClusterRole שמוגדר כברירת מחדל ב-Kubernetes, admin.
דוגמה ל-ClusterRoleBinding
בדוגמה הבאה של ClusterRoleBinding ב-admin-charlie, למשתמש charlie ניתנות הרשאות אדמין. ה-ClusterRoleBinding משתמש בהרשאות מ-ClusterRole של Kubernetes admin שמוגדר כברירת מחדל, שכולל הרשאות מ-ClusterRole kubevm.admin המוגדר מראש באמצעות צבירה.
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
צפייה באשכול
כדי להעניק הרשאות צפייה למשתמש או לקבוצת משתמשים, יוצרים ClusterRoleBinding עם ClusterRole שמוגדר כברירת מחדל ב-Kubernetes, view. במאמר דוגמה ל-ClusterRoleBinding תוכלו לראות דוגמה דומה ל-ClusterRoleBinding.
עורך אשכולות
כדי להעניק הרשאות עריכה למשתמש או לקבוצת משתמשים, יוצרים ClusterRoleBinding עם ברירת המחדל של Kubernetes edit ClusterRole. במאמר דוגמה ל-ClusterRoleBinding תוכלו לראות דוגמה דומה ל-ClusterRoleBinding.
עורך עם מרחב שמות
כדי להעניק הרשאות עריכה במרחב שמות למשתמש או לקבוצת משתמשים, צריך ליצור שני קישורים נפרדים:
יוצרים RoleBinding במרחב השמות ומפנים ל-ClusterRole של
editשמוגדר כברירת מחדל ב-Kubernetes.יוצרים ClusterRoleBinding שמפנה ל-ClusterRole
kubevm.cluster.viewשהוגדר מראש. צריך את ה-ClusterRoleBinding הזה כי לחלק מהמשאבים, כמוvirtualmachinetypesו-storageclasses, אין מרחב שמות.
דוגמאות לקישור תפקידים (עריכה במרחב שמות)
בדוגמאות הבאות של RoleBinding ו-ClusterRoleBinding, למשתמש charlie ניתנות הרשאות עריכה למשאבים במרחב השמות 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
צופה במרחב שמות
כדי לתת הרשאות צפייה במרחב שמות למשתמש או לקבוצת משתמשים, צריך ליצור שני קישורים נפרדים:
יוצרים RoleBinding במרחב השמות ומפנים ל-ClusterRole של
viewשמוגדר כברירת מחדל ב-Kubernetes.יוצרים ClusterRoleBinding שמפנה ל-ClusterRole
kubevm.cluster.viewשהוגדר מראש.
דוגמאות דומות ל-RoleBinding ול-ClusterRoleBinding מופיעות בקטע דוגמאות לקישור תפקידים (עורך מרחב שמות).
המשאבים שמשמשים את VM Runtime on GDC
בקטעים הבאים מפורטים בטבלאות המשאבים שמשמשים את VM Runtime on GDC. הקטעים האלה מיועדים למטרות מידע בלבד. אם אתם מתכננים להשתמש בתפקידים מוגדרים מראש בתרחישי המשתמשים הרגילים שמתוארים בקטעים הקודמים, אין שימוש ספציפי למידע הזה.
אם אתם לא רוצים להשתמש בתפקידים המוגדרים מראש, אתם יכולים להשתמש במידע על המשאבים כדי ליצור תפקידים בהתאמה אישית.
משאבים שמוגדרים ב-Google Kubernetes Engine
התפקידים המוגדרים מראש של ClusterRoles מתמקדים בגישה למשאבים שמוגדרים ב-GKE. בטבלה הבאה מפורטים המשאבים של GKE והרשאות הגישה שניתנות על ידי כל אחד מהתפקידים המוגדרים מראש ב-ClusterRoles.
| משאב | נוצר | Cluster-wise | kubevm.admin |
kubevm.view |
kubevm.edit |
kubevm.cluster.view |
|---|---|---|---|---|---|---|
virtualmachineaccessrequests |
– | – | מלא | קריאה | קריאה/כתיבה | – |
virtualmachinedisks |
– | – | מלא | קריאה | קריאה/כתיבה | – |
virtualmachines |
– | – | מלא | קריאה | קריאה/כתיבה | – |
gpuallocations |
– | – | מלא | קריאה | קריאה/כתיבה | – |
guestenvironmentdata |
כן | – | מלא | קריאה | קריאה/כתיבה | – |
vmruntimes |
– | כן | מלא | קריאה | קריאה/כתיבה | קריאה |
virtualmachinetypes |
– | כן | מלא | קריאה | קריאה/כתיבה | קריאה |
vmhighavailabilitypolicies |
– | כן | מלא | קריאה | קריאה/כתיבה | קריאה |
networkinterfaces |
כן | – | מלא | קריאה | קריאה/כתיבה | – |
networks |
– | כן | מלא | קריאה | קריאה/כתיבה | קריאה |
משאבי KubeVirt
סביבת זמן הריצה של VM ב-GDC מבוססת על פרויקט הקוד הפתוח KubeVirt. כברירת מחדל, ההרשאות למשאבי KubeVirt נצברות באופן אוטומטי לתפקידי ברירת המחדל של Kubernetes, בדומה למשאבים שמנוהלים על ידי GKE. אם אתם רוצים ליצור תפקידים בהתאמה אישית, תוכלו להשתמש במידע על המשאבים שבטבלה הבאה:
| משאב | נוצר | Cluster-wise |
|---|---|---|
virtualmachineinstances/console |
– | – |
virtualmachineinstances/vnc |
– | – |
virtualmachineinstances/portforward |
– | – |
virtualmachineinstances/start |
– | – |
virtualmachineinstances/stop |
– | – |
virtualmachineinstances/restart |
– | – |
virtualmachines |
כן | – |
virtualmachineinstances |
כן | – |
datavolumes |
– | – |
storageprofiles |
– | כן |
cdiconfigs |
– | כן |
משאבים ב-Kubernetes
כשעובדים עם VM Runtime on GDC ועם מכונות וירטואליות, יכול להיות שתצטרכו לנהל את הגישה למשאבים הבאים ב-Kubernetes. אם אתם רוצים ליצור תפקידים בהתאמה אישית, תוכלו להיעזר במידע על המשאבים שבטבלה הבאה:
| משאב | נוצר | Cluster-wise |
|---|---|---|
pods |
כן | – |
services |
– | – |
persistentvolumeclaims |
– | – |
secrets |
– | – |
nodes |
– | כן |
storageclasses |
– | כן |
configmaps |
– | – |
דוגמאות ל-YAML של ClusterRole
כדי לאחזר את קובץ ה-YAML של ClusterRoles, מריצים את הפקודה הבאה של kubectl:
kubectl get ClusterRole CLUSTERROLE_NAME -o yaml --kubeconfig KUBECONFIG_PATH
מחליפים את מה שכתוב בשדות הבאים:
-
CLUSTERROLE_NAME: השם של ClusterRole, למשלkubevm.cluster.view. -
KUBECONFIG_PATH: הנתיב לקובץ kubeconfig של האשכול.
דוגמאות לפלט הפקודה של כל אחד מארבעת התפקידים המוגדרים מראש ב-ClusterRoles:
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