בקרת גישה מבוססת-תפקידים (RBAC) לזמן ריצה של מכונות וירטואליות ב-GDC

‫VM Runtime ב-GDC מנהל מגוון רחב של משאבים שקשורים למכונות הווירטואליות שלכם. המשאבים האלה כוללים משאבים שמוגדרים על ידי GKE, משאבים שמוגדרים על ידי KubeVirt ומשאבי Kubernetes. ‫VM Runtime ב-GDC משתמש בבקרת גישה מבוססת-תפקידים (RBAC) כדי להגדיר ולאכוף הרשאות למשאבים מנוהלים. כדי לעזור לכם לעבוד עם המשאבים האלה ולנהל את המכונות הווירטואליות, סיפקנו ארבעה ClusterRole שהוגדרו מראש:

  • kubevm.admin
  • kubevm.edit
  • kubevm.view
  • kubevm.cluster.view

התפקידים המובנים האלה מספקים מודל גישה כללי למשאבים בהתאמה אישית שקשורים ל-VM Runtime ב-GDC. לכל תפקיד יש הרשאות שנקבעו מראש לביצוע פעולות במשאבים. במסמך הזה מוסבר על משאבים ש-VM Runtime ב-GDC מנהל, כדי שאדמינים של אשכולות יוכלו להתאים אישית את מודל הגישה שלהם.

תפקידים מוגדרים מראש ברמת האשכול

בקטע הזה מתואר כל אחד מהתפקידים ClusterRole המוגדרים מראש. התפקידים ClusterRole האלה זמינים רק כש-VM Runtime מופעל ב-GDC:

  • כשמפעילים את VM Runtime ב-GDC, נוצרים אוטומטית ארבעת ה-ClusterRole המוגדרים מראש.
  • כשמשביתים את VM Runtime ב-GDC, נמחקים ארבעת התפקידים המוגדרים מראש ברמת האשכול.

בטבלה הבאה מפורטים התפקידים באשכול וההרשאות שקשורות אליהם:

תפקיד באשכול תיאור פעלים שקשורים לגישה
kubevm.admin מעניקה גישה מלאה לכל משאבי GKE.
  • get
  • list
  • watch
  • delete
  • create
  • update
  • patch
  • deletecollection
kubevm.edit מעניקה הרשאת קריאה/כתיבה לכל משאבי GKE.
  • get
  • list
  • watch
  • delete
  • create
  • update
  • patch
kubevm.view מעניק הרשאת קריאה לכל משאבי GKE.
  • get
  • list
  • watch
kubevm.cluster.view מעניק הרשאת קריאה למשאבים ברמת האשכול. התפקיד הזה ברמת האשכול נדרש כשהתפקיד edit/view קשור למרחב שמות, אבל נדרשת גישה למשאבים ברמת האשכול.
  • get
  • list
  • watch

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 במרחב השמות ומפנים אל edit ClusterRole של ברירת המחדל של 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 במרחב השמות ומפנים אל view ClusterRole של ברירת המחדל של 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.admin

    apiVersion: 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
      - deletecollection
    
  • kubevm.edit

    apiVersion: 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
      - watch
    
  • kubevm.view

    apiVersion: 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
      - watch
    
  • kubevm.cluster.view

    apiVersion: 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