בקרת גישה מבוססת-תפקידים (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 התפקיד הזה מעניק הרשאת קריאה למשאבים ברמת האשכול. תפקיד האשכול הזה נדרש כשתפקיד העריכה או הצפייה קשור למרחב שמות, אבל נדרשת גישה למשאבים ברמת האשכול.
  • get
  • list
  • watch

Aggregated ClusterRoles

‫ClusterRole‏ kubevm.admin,‏ kubevm.view ו-kubevm.edit לא נמצאים בשימוש ישיר. במקום זאת, שלושת התפקידים האלה מצורפים לתפקידים באשכולות ברירת המחדל של Kubernetes‏ admin, view ו-edit בהתאמה. הצבירה הזו מרחיבה את תפקידי ברירת המחדל של 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

הרשאת צפייה באשכול

כדי להעניק הרשאות צפייה למשתמש או לקבוצת משתמשים, צריך ליצור 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 שמפנה אל kubevm.cluster.view ClusterRole שהוגדר מראש.

דוגמאות דומות ל-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 של האשכול.

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

  • 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