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

בזמן הריצה של 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.
  • 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

תפקידי 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.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