VM Runtime ב-GDC מנהל מגוון רחב של משאבים שקשורים למכונות הווירטואליות שלכם. המשאבים האלה כוללים משאבים שמוגדרים על ידי GKE, משאבים שמוגדרים על ידי KubeVirt ומשאבי Kubernetes. VM Runtime ב-GDC משתמש בבקרת גישה מבוססת-תפקידים (RBAC) כדי להגדיר ולאכוף הרשאות למשאבים מנוהלים. כדי לעזור לכם לעבוד עם המשאבים האלה ולנהל את המכונות הווירטואליות, סיפקנו ארבעה ClusterRole שהוגדרו מראש:
kubevm.adminkubevm.editkubevm.viewkubevm.cluster.view
התפקידים המובנים האלה מספקים מודל גישה כללי למשאבים בהתאמה אישית שקשורים ל-VM Runtime ב-GDC. לכל תפקיד יש הרשאות שנקבעו מראש לביצוע פעולות במשאבים. במסמך הזה מוסבר על משאבים ש-VM Runtime ב-GDC מנהל, כדי שאדמינים של אשכולות יוכלו להתאים אישית את מודל הגישה שלהם.
תפקידים מוגדרים מראש ברמת האשכול
בקטע הזה מתואר כל אחד מהתפקידים ClusterRole המוגדרים מראש. התפקידים ClusterRole האלה זמינים רק כש-VM Runtime מופעל ב-GDC:
- כשמפעילים את VM Runtime ב-GDC, נוצרים אוטומטית ארבעת ה-ClusterRole המוגדרים מראש.
- כשמשביתים את VM Runtime ב-GDC, נמחקים ארבעת התפקידים המוגדרים מראש ברמת האשכול.
בטבלה הבאה מפורטים התפקידים באשכול וההרשאות שקשורות אליהם:
| תפקיד באשכול | תיאור | פעלים שקשורים לגישה |
|---|---|---|
kubevm.admin |
מעניקה גישה מלאה לכל משאבי GKE. |
|
kubevm.edit |
מעניקה הרשאת קריאה/כתיבה לכל משאבי GKE. |
|
kubevm.view |
מעניק הרשאת קריאה לכל משאבי GKE. |
|
kubevm.cluster.view |
מעניק הרשאת קריאה למשאבים ברמת האשכול. התפקיד הזה ברמת האשכול נדרש כשהתפקיד edit/view קשור למרחב שמות, אבל נדרשת גישה למשאבים ברמת האשכול. |
|
Aggregated ClusterRoles
ClusterRole kubevm.admin, kubevm.view ו-kubevm.edit לא נמצאים בשימוש ישיר. במקום זאת, שלושת התפקידים האלה מצורפים לתפקידים באשכולות admin, view ו-edit ב-Kubernetes כברירת מחדל. הצבירה הזו מרחיבה את תפקידי ברירת המחדל של Kubernetes, כך שאפשר להשתמש בהם כדי לנהל משאבי GKE. באמצעות ClusterRoles מצטברים, אפשר להשתמש בתפקידים שמוגדרים כברירת מחדל ב-Kubernetes כדי לנהל את הגישה למשאבי GKE, או ליצור תפקידים משלכם על סמך ClusterRoles מוגדרים מראש.
דוגמה לתווית צבירה
ל-kubevm.edit ClusterRole יש את התווית rbac.authorization.k8s.io/aggregate-to-edit: "true", שמצרפת אותו ל-edit ClusterRole של Kubernetes. ההרשאות ב-kubevm.editClusterRole מוענקות לתפקיד ברירת המחדל edit של Kubernetes. ה-kubevm.admin
ו-ClusterRoles 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 עם ברירת המחדל של Kubernetes admin ClusterRole.
דוגמה ל-ClusterRoleBinding
בדוגמה הבאה של admin-charlie ClusterRoleBinding, למשתמש charlie יש הרשאות אדמין. ה-ClusterRoleBinding משתמש בהרשאות מ-admin ClusterRole של Kubernetes שמוגדר כברירת מחדל, שכולל הרשאות מ-kubevm.admin ClusterRole מוגדר מראש באמצעות צבירה.
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
כדי להעניק הרשאות צפייה למשתמש או לקבוצת משתמשים, צריך ליצור ClusterRoleBinding עם ClusterRole ברירת המחדל של Kubernetes view. במאמר דוגמה ל-ClusterRoleBinding אפשר לראות דוגמה דומה ל-ClusterRoleBinding.
עורך האשכולות
כדי להעניק הרשאות עריכה למשתמש או לקבוצת משתמשים, צריך ליצור ClusterRoleBinding עם ClusterRole ברירת המחדל של Kubernetes edit. במאמר דוגמה ל-ClusterRoleBinding אפשר לראות דוגמה דומה ל-ClusterRoleBinding.
עורך עם מרחב שמות
כדי להעניק הרשאות עריכה במרחב שמות למשתמש או לקבוצת משתמשים, צריך ליצור שני קשרים נפרדים:
יוצרים RoleBinding במרחב השמות ומפנים אל
editClusterRole של ברירת המחדל של 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 במרחב השמות ומפנים אל
viewClusterRole של ברירת המחדל של Kubernetes.יוצרים ClusterRoleBinding שמפנה ל-ClusterRole המוגדר מראש
kubevm.cluster.view.
דוגמאות דומות ל-RoleBinding ול-ClusterRoleBinding מופיעות בקטע דוגמאות לקישור תפקידים (עורך עם מרחב שמות).
משאבים שנעשה בהם שימוש ב-VM Runtime ב-GDC
בקטעים הבאים יש טבלאות של משאבים שמשמשים את VM Runtime ב-GDC. הקטעים האלה מיועדים למטרות מידע בלבד. אם אתם מתכננים להשתמש בתפקידים מוגדרים מראש בתרחישי השימוש האופייניים שמתוארים בקטעים הקודמים, אין צורך במידע הזה.
עם זאת, אם אתם לא רוצים להשתמש בתפקידים שהוגדרו מראש, תוכלו להשתמש במידע על המשאבים כדי ליצור תפקידים מותאמים אישית משלכם.
משאבים שמוגדרים על ידי Google Kubernetes Engine
תפקידי ClusterRole המוגדרים מראש מתמקדים בגישה למשאבים שמוגדרים ב-GKE. בטבלה הבאה מפורטים משאבי GKE והרשאות הגישה שניתנות על ידי כל אחד מהתפקידים המוגדרים מראש של ClusterRole.
| משאב | נוצרו | לפי אשכול | kubevm.admin |
kubevm.view |
kubevm.edit |
kubevm.cluster.view |
|---|---|---|---|---|---|---|
virtualmachineaccessrequests |
– | – | מלא | קריאה | קריאה/כתיבה | – |
virtualmachinedisks |
– | – | מלא | קריאה | קריאה/כתיבה | – |
virtualmachines |
– | – | מלא | קריאה | קריאה/כתיבה | – |
gpuallocations |
– | – | מלא | קריאה | קריאה/כתיבה | – |
guestenvironmentdata |
כן | – | מלא | קריאה | קריאה/כתיבה | – |
vmruntimes |
– | כן | מלא | קריאה | קריאה/כתיבה | קריאה |
virtualmachinetypes |
– | כן | מלא | קריאה | קריאה/כתיבה | קריאה |
vmhighavailabilitypolicies |
– | כן | מלא | קריאה | קריאה/כתיבה | קריאה |
networkinterfaces |
כן | – | מלא | קריאה | קריאה/כתיבה | – |
networks |
– | כן | מלא | קריאה | קריאה/כתיבה | קריאה |
משאבים של KubeVirt
VM Runtime ב-GDC מבוסס על פרויקט הקוד הפתוח KubeVirt. כברירת מחדל, ההרשאות למשאבי KubeVirt מצטברות אוטומטית לתפקידי ברירת המחדל של Kubernetes, בדומה למשאבים שמנוהלים על ידי GKE. אם אתם רוצים ליצור תפקידים מותאמים אישית משלכם, תוכלו להיעזר במידע על המשאבים שבטבלה הבאה:
| משאב | נוצרו | לפי אשכול |
|---|---|---|
virtualmachineinstances/console |
– | – |
virtualmachineinstances/vnc |
– | – |
virtualmachineinstances/portforward |
– | – |
virtualmachineinstances/start |
– | – |
virtualmachineinstances/stop |
– | – |
virtualmachineinstances/הפעלה מחדש |
– | – |
virtualmachines |
כן | – |
virtualmachineinstances |
כן | – |
datavolumes |
– | – |
storageprofiles |
– | כן |
cdiconfigs |
– | כן |
משאבי Kubernetes
כשעובדים עם VM Runtime ב-GDC ובמכונות וירטואליות, יכול להיות שיהיה צורך לנהל את הגישה למשאבי Kubernetes הבאים. אם אתם רוצים ליצור תפקידים מותאמים אישית, תוכלו להיעזר במידע על המשאבים בטבלה הבאה:
| משאב | נוצרו | לפי אשכול |
|---|---|---|
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 של האשכול.
אלה דוגמאות לפלט הפקודה לכל אחד מארבעת התפקידים המוגדרים מראש של ClusterRole:
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