הגבלת הגישה לשינוי ולבחירה של ComputeClasses

אתם יכולים להשתמש ב-ComputeClasses של Google Kubernetes Engine‏ (GKE) כדי ליצור צמתים שעומדים בדרישות שונות של עומסי עבודה. אפשר להשתמש ב-ComputeClasses כדי ליצור חומרה ל-Pods. בהתאם ל-ComputeClass, יכול להיות שהחומרה הזו תהיה מבוקשת מאוד, הזמינות שלה תהיה מוגבלת או שהיא תהיה יקרה יחסית לארגון שלכם. במדריך הזה מוסבר איך להשתמש ב-Kubernetes RBAC וב-ValidatingAdmissionPolicies כדי להגביל את היצירה, המחיקה, השינוי והבחירה של ComputeClasses.

ההגבלות האלה יכולות לעזור לכם למנוע מצבים כמו הבאים:

  • לפודים שלא צריכים חומרה מיוחדת כמו מעבדי GPU או TPU, נבחרים ComputeClasses שמבקשים את החומרה הזו.
  • גורם לא מורשה יוצר או משנה ComputeClasses כדי לקבל גישה לחומרה ששמורה לעומסי עבודה קריטיים.

במסמך הזה נעשה שימוש בדוגמה של ValidatingAdmissionPolicy שחוסמת סוגים נפוצים של שימוש לרעה, כמו wildcard ComputeClass tolerations או בחירה של ComputeClasses ספציפיים שאסורים לשימוש. אפשר לשנות את ValidatingAdmissionPolicy כדי לעמוד בדרישות שספציפיות לארגון שלכם, כמו חסימת עומסי עבודה מצוותים מסוימים משימוש ב-ComputeClasses.

מטרות

  • אפשר להשתמש ב-ValidatingAdmissionPolicy כדי להגביל את ComputeClasses ש-Pods יכולים לבחור בכל מרחב שמות לרשימה מאושרת.
  • משתמשים בבקרת גישה מבוססת-תפקידים (RBAC) כדי להגביל את המשתמשים שיכולים ליצור, לשנות או למחוק ComputeClasses באשכולות.

עלויות

במסמך הזה משתמשים ברכיבים הבאים של Google Cloud, והשימוש בהם כרוך בתשלום:

כדי להעריך את ההוצאות בהתאם לתחזית השימוש שלכם, אתם יכולים להיעזר במחשבון העלויות.

משתמשים חדשים של Google Cloud ? יכול להיות שאתם זכאים לתקופת ניסיון בחינם.

כשמסיימים את המשימות שמתוארות במסמך הזה אפשר למחוק את המשאבים שיצרתם כדי להימנע מחיובים נוספים. מידע נוסף זמין בקטע הסרת המשאבים.

לפני שמתחילים

  1. נכנסים לחשבון Google Cloud . אם אתם משתמשים חדשים ב- Google Cloud, צרו חשבון כדי שתוכלו להעריך את הביצועים של המוצרים שלנו בתרחישים מהעולם האמיתי. לקוחות חדשים מקבלים בחינם גם קרדיט בשווי 300$ להרצה, לבדיקה ולפריסה של עומסי העבודה.
  2. התקינו את ה-CLI של Google Cloud.

  3. אם אתם משתמשים בספק זהויות חיצוני (IdP), קודם אתם צריכים להיכנס ל-CLI של gcloud באמצעות המאגר המאוחד לניהול זהויות.

  4. כדי לאתחל את ה-CLI של gcloud, הריצו את הפקודה הבאה:

    gcloud init
  5. יוצרים או בוחרים Google Cloud פרויקט.

    תפקידים שנדרשים כדי לבחור או ליצור פרויקט

    • Select a project: כדי לבחור פרויקט לא צריך תפקיד IAM ספציפי – אפשר לבחור כל פרויקט שקיבלתם בו תפקיד.
    • יצירת פרויקט: כדי ליצור פרויקט, צריך את התפקיד Project Creator (יצירת פרויקטים) (roles/resourcemanager.projectCreator), שכולל את ההרשאה resourcemanager.projects.create. איך מקצים תפקידים
    • יוצרים Google Cloud פרויקט:

      gcloud projects create PROJECT_ID

      מחליפים את PROJECT_ID בשם של פרויקט Google Cloud שיוצרים.

    • בוחרים את הפרויקט שיצרתם: Google Cloud

      gcloud config set project PROJECT_ID

      מחליפים את PROJECT_ID בשם הפרויקט ב- Google Cloud .

  6. אם משתמשים בפרויקט קיים, מוודאים שיש את ההרשאות הנדרשות כדי להשלים את ההדרכה. אם משתמשים בפרויקט חדש, לא צריך לוודא כי כבר יש את ההרשאות הנדרשות.

  7. מוודאים שהחיוב מופעל בפרויקט Google Cloud .

  8. מפעילים את Kubernetes Engine API:

    תפקידים שנדרשים להפעלת ממשקי API

    כדי להפעיל ממשקי API, צריך את תפקיד ה-IAM 'אדמין של Service Usage' (roles/serviceusage.serviceUsageAdmin), שכולל את ההרשאה serviceusage.services.enable. איך מקצים תפקידים

    gcloud services enable container.googleapis.com
  9. התקינו את ה-CLI של Google Cloud.

  10. אם אתם משתמשים בספק זהויות חיצוני (IdP), קודם אתם צריכים להיכנס ל-CLI של gcloud באמצעות המאגר המאוחד לניהול זהויות.

  11. כדי לאתחל את ה-CLI של gcloud, הריצו את הפקודה הבאה:

    gcloud init
  12. יוצרים או בוחרים Google Cloud פרויקט.

    תפקידים שנדרשים כדי לבחור או ליצור פרויקט

    • Select a project: כדי לבחור פרויקט לא צריך תפקיד IAM ספציפי – אפשר לבחור כל פרויקט שקיבלתם בו תפקיד.
    • יצירת פרויקט: כדי ליצור פרויקט, צריך את התפקיד Project Creator (יצירת פרויקטים) (roles/resourcemanager.projectCreator), שכולל את ההרשאה resourcemanager.projects.create. איך מקצים תפקידים
    • יוצרים Google Cloud פרויקט:

      gcloud projects create PROJECT_ID

      מחליפים את PROJECT_ID בשם של פרויקט Google Cloud שיוצרים.

    • בוחרים את הפרויקט שיצרתם: Google Cloud

      gcloud config set project PROJECT_ID

      מחליפים את PROJECT_ID בשם הפרויקט ב- Google Cloud .

  13. אם משתמשים בפרויקט קיים, מוודאים שיש את ההרשאות הנדרשות כדי להשלים את ההדרכה. אם משתמשים בפרויקט חדש, לא צריך לוודא כי כבר יש את ההרשאות הנדרשות.

  14. מוודאים שהחיוב מופעל בפרויקט Google Cloud .

  15. מפעילים את Kubernetes Engine API:

    תפקידים שנדרשים להפעלת ממשקי API

    כדי להפעיל ממשקי API, צריך את תפקיד ה-IAM 'אדמין של Service Usage' (roles/serviceusage.serviceUsageAdmin), שכולל את ההרשאה serviceusage.services.enable. איך מקצים תפקידים

    gcloud services enable container.googleapis.com
  16. אם אתם משתמשים במעטפת מקומית, צריך להתקין את הרכיב kubectl:
    gcloud components install kubectl
  17. מוודאים שיש לכם אשכול GKE שמשתמש בגרסה 1.30 ואילך. אפשר גם ליצור אשכול Autopilot לצורך המדריך הזה.
  18. מגדירים את האשכול לקבוצות Google לצורך RBAC:
    1. מגדירים את קבוצת gke-security-groups בדומיין.
    2. מפעילים את קבוצות Google עבור RBAC באשכול.

    מידע נוסף מופיע במאמר בנושא הגדרת קבוצות Google.

התפקידים הנדרשים

כדי לקבל את ההרשאות שנדרשות ליצירת כללי מדיניות של RBAC ואובייקטים של Kubernetes באשכול, צריך לבקש מהאדמין להקצות לכם את תפקיד ה-IAM ‏Kubernetes Engine Admin ‏ (role/container.admin) בפרויקט. כדי לקרוא הסבר על מתן תפקידים, ראו איך מנהלים את הגישה ברמת הפרויקט, התיקייה והארגון.

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

הכנת הסביבה

כדי להכין את האשכול למשימות היצירה והאימות במדריך הזה, פועלים לפי השלבים הבאים:

  1. מתחברים לאשכול:

    gcloud container clusters get-credentials CLUSTER_NAME \
        --location=CONTROL_PLANE_LOCATION
    

    מחליפים את מה שכתוב בשדות הבאים:

    • CLUSTER_NAME: השם של האשכול.
    • CONTROL_PLANE_LOCATION: האזור או התחום (zone) של מישור הבקרה של האשכול, למשל us-central1 או us-central1-a.
  2. יוצרים מרחב שמות לשימוש במדריך הזה. אפשר גם להשתמש בכל מרחב שמות קיים באשכול.

    kubectl create namespace computeclass-vap-tutorial
    
  3. יוצרים מדיניות RBAC שמעניקה גישה לניהול ValidatingAdmissionPolicies ו-ValidatingAdmissionPolicyBindings:

    1. שומרים את קובץ המניפסט הבא בשם validatingadmissionpolicy-editor.yaml:

      apiVersion: rbac.authorization.k8s.io/v1
      kind: ClusterRole
      metadata:
        name: validatingadmissionpolicy-editor
      rules:
      - apiGroups: ["admissionregistration.k8s.io"]
        resources: ["validatingadmissionpolicies","validatingadmissionpolicybindings"]
        verbs: ["get", "list", "create", "update", "patch", "delete"]
      ---
      apiVersion: rbac.authorization.k8s.io/v1
      kind: ClusterRoleBinding
      metadata:
        name: edit-validatingadmissionpolicies
      subjects:
      - kind: User
        name: USER_ACCOUNT
        apiGroup: rbac.authorization.k8s.io
      roleRef:
        apiGroup: rbac.authorization.k8s.io
        kind: ClusterRole
        name: validatingadmissionpolicy-editor
      

      מחליפים את USER_ACCOUNT בכתובת האימייל של חשבון המשתמש.

    2. יוצרים את מדיניות RBAC:

      kubectl apply -f validatingadmissionpolicy-editor.yaml
      
  4. יוצרים ComputeClass באשכול. אם באשכול כבר יש ComputeClass, אפשר לדלג על השלב הזה.

    1. שומרים את קובץ המניפסט הבא בשם access-computeclass.yaml:

      apiVersion: cloud.google.com/v1
      kind: ComputeClass
      metadata:
        name: access-restriction-class
      spec:
        priorities:
        - machineFamily: e2
        nodePoolAutoCreation:
          enabled: true
        whenUnsatisfiable: ScaleUpAnyway
      
    2. יוצרים את ComputeClass:

      kubectl apply -f access-computeclass.yaml
      

יצירת ValidatingAdmissionPolicy

כדי להגביל את ComputeClasses שאפשר לבחור עבור Pods, יוצרים ValidatingAdmissionPolicy ומחילים אותו במרחב שמות ספציפי. משתמשים במפרט ValidatingAdmissionPolicy כדי לקבוע איך אפשר לבחור ComputeClasses עבור Pods. כך יוצרים את המדיניות הזו ומאכפים אותה:

  1. שומרים את המניפסט הבא של ValidatingAdmissionPolicy בתור restrict-computeclass-usage-vap.yaml:

    apiVersion: admissionregistration.k8s.io/v1
    kind: ValidatingAdmissionPolicy
    metadata:
      name: restrict-computeclass-usage
    spec:
      failurePolicy: Fail # If an internal error occurs, deny the request.
      variables:
      # Check whether the admission request is for a Deployment.
      - name: isDeployment
        expression: "object.kind == 'Deployment'"
      # Get the Pod specification from the admission request by reading the
      # spec.template.spec field for Deployments or the spec field for static Pods.
      - name: podSpec
        expression: "variables.isDeployment ? object.spec.template.spec : object.spec"
      # Check whether a node selector or an affinity rule that explicitly requests a
      # disallowed ComputeClass.
      - name: hasForbiddenNodeSelectorOrAffinity
        expression: >-
          (has(variables.podSpec.nodeSelector) &&
          variables.podSpec.nodeSelector['cloud.google.com/compute-class'] == 'COMPUTECLASS_NAME') ||
          (has(variables.podSpec.affinity) &&
          has(variables.podSpec.affinity.nodeAffinity) &&
          has(variables.podSpec.affinity.nodeAffinity.requiredDuringSchedulingIgnoredDuringExecution) &&
          variables.podSpec.affinity.nodeAffinity.requiredDuringSchedulingIgnoredDuringExecution.nodeSelectorTerms.exists(term, has(term.matchExpressions) &&
            term.matchExpressions.exists(
              exp, exp.key == 'cloud.google.com/compute-class' &&
              exp.operator == 'In' && exp.values.exists(v, v == 'COMPUTECLASS_NAME')
            )
          ))
    
      # Check whether the Pod has a toleration for the taint that corresponds to a
      # disallowed ComputeClass.
      - name: hasForbiddenComputeClassToleration
        expression: >-
          has(variables.podSpec.tolerations) &&
          variables.podSpec.tolerations.exists(t, 
            t.key == 'cloud.google.com/compute-class' &&
            (t.operator == 'Exists' || (t.operator == 'Equal' && t.value == 'COMPUTECLASS_NAME')) &&
            has(t.effect) && t.effect == 'NoSchedule')
    
      # Check whether the Pod has a toleration that could match any taint.
      - name: hasWildcardToleration
        expression: >-
          has(variables.podSpec.tolerations) &&
          variables.podSpec.tolerations.exists(t, 
            (t.operator == 'Exists' && !(has(t.key) && t.key != ''))
          )
    
      # Trigger the ValidatingAdmissionPolicy when Pods or Deployments are created or
      # updated.
      matchConstraints:
        resourceRules:
        - apiGroups: [""]
          apiVersions: ["v1"]
          operations: ["CREATE", "UPDATE"]
          resources: ["pods"]
        - apiGroups: ["apps"]
          apiVersions: ["v1"]
          operations: ["CREATE", "UPDATE"]
          resources: ["deployments"]
    
      # Validate whether any of the expressions in the variables section evaluate to
      # true.
      validations:
        - expression: >-
            !(variables.hasForbiddenNodeSelectorOrAffinity ||
              variables.hasForbiddenComputeClassToleration ||
              variables.hasWildcardToleration)
          message: >-
            Pods and Deployments in this namespace cannot request ComputeClass
            COMPUTECLASS_NAME or use wildcard
            tolerations.
    

    מחליפים את COMPUTECLASS_NAME בשם של ComputeClass שרוצים למנוע מ-Pods לבחור.

    ל-ValidatingAdmissionPolicy הזה יש את המאפיינים הבאים:

    • טריגרים ל-Pods סטטיים או ל-Pods בפריסות.
    • החיפוש ימצא Pods שמבצעים את הפעולות הבאות:

      • משתמשים בבורר צמתים או בכלל זיקה לצמתים כדי לבחור במפורש ComputeClass ספציפי שאסור להשתמש בו.
      • צריך להשתמש בטולרנטיות שמתאימה ל-דחייה (taint) של צומת עבור ComputeClass ספציפי שלא מותר לשימוש.
      • משתמשים בטולרנטיות שתואמת לכל הדחיות של הצמתים באשכול.

    זו דוגמה ל-ValidatingAdmissionPolicy. אתם יכולים להשתמש בביטויים כדי להפעיל את המדיניות על סמך התנאים שלכם, למשל כדי למנוע מ-Pods עם תוויות ספציפיות לבחור ComputeClasses מסוימים.

  2. יוצרים את ValidatingAdmissionPolicy:

    kubectl apply -f restrict-computeclass-usage-vap.yaml
    
  3. שומרים את ValidatingAdmissionPolicyBinding הבא בתור restrict-computeclass-usage-binding.yaml:

    apiVersion: admissionregistration.k8s.io/v1
    kind: ValidatingAdmissionPolicyBinding
    metadata:
      name: restrict-computeclass-usage-binding
    spec:
      policyName: restrict-computeclass-usage
      validationActions: ["Deny","Audit"]
      matchResources:
        namespaceSelector:
          matchLabels:
            kubernetes.io/metadata.name: computeclass-vap-tutorial # Replace with the name of any namespace in the cluster.
    

    ה-ValidatingAdmissionPolicyBinding הזה אוכף את ה-ValidatingAdmissionPolicy מהשלב הקודם במרחב השמות computeclass-vap-tutorial. הערכים בשדה validationActions דוחים את ה-Pods או את ה-Deployments שמפירים את ValidatingAdmissionPolicy ומוסיפים רשומה ליומן הביקורת של Kubernetes.

  4. יוצרים את ValidatingAdmissionPolicyBinding:

    kubectl apply -f restrict-computeclass-usage-binding.yaml
    

הגדרה של כללי מדיניות RBAC

בנוסף לשימוש ב-ValidatingAdmissionPolicy כדי למנוע מעומסי עבודה להשתמש ב-ComputeClasses מסוימים, אפשר להשתמש ב-RBAC כדי למנוע מחשבונות ראשיים לא מורשים ליצור ולשנות את ה-ComputeClasses באשכול. בשלבים הבאים מוסבר איך להעניק גישה ל-ComputeClasses לקבוצה ספציפית של משתמשים באמצעות קבוצות Google ל-RBAC:

  1. יוצרים קבוצה לעורכים של ComputeClass:

    1. במסוף Google Admin, עוברים לדף Groups.

      מעבר אל "קבוצות Google"

    2. לוחצים על יצירת קבוצה.

    3. בדף פרטי הקבוצה, מבצעים את הפעולות הבאות:

      1. בשדה שם הקבוצה, מציינים computeclass-editors.
      2. בשדה כתובת אימייל קבוצתית, מציינים את הערך computeclass-editors.
      3. מסמנים את תיבת הסימון אבטחה.
      4. לוחצים על הבא.
    4. בדף Access type, בודקים שבתיבת הסימון Who can view members בעמודה Group members מסומנת.

    5. לוחצים על יצירת קבוצה.

    6. בתפריט הניווט, לוחצים על ספרייה > קבוצות.

    7. מעבירים את העכבר מעל השורה gke-security-groups ולוחצים על צירוף חברים לקבוצה.

    8. בתיבת הדו-שיח Add members to gke-security-groups, מציינים את computeclass-editors ובוחרים את הקבוצה מהתוצאות.

    9. לוחצים על הוספה לקבוצה.

  2. מוסיפים את כתובות האימייל של המשתמשים המורשים לקבוצה computeclass-editors.

  3. שומרים את ה-ClusterRole הבא בתור computeclass-editor-clusterrole.yaml:

    apiVersion: rbac.authorization.k8s.io/v1
    kind: ClusterRole
    metadata:
      name: computeclass-editor
    rules:
    -   apiGroups: ["cloud.google.com"]
      resources: ["computeclasses"]
      verbs: ["create","update"]
    
  4. יוצרים את ClusterRole:

    kubectl apply -f computeclass-editor-clusterrole.yaml
    
  5. שומרים את ClusterRoleBinding הבא בתור computeclass-editor-role-binding.yaml:

    apiVersion: rbac.authorization.k8s.io/v1
    kind: ClusterRoleBinding
    metadata:
      name: computeclass-editor-role-binding
    subjects:
    - kind: Group
      name: computeclass-editors@GROUP_DOMAIN
      apiGroup: rbac.authorization.k8s.io
    roleRef:
      kind: ClusterRole
      name: computeclass-editor
      apiGroup: rbac.authorization.k8s.io # Required for role references
    

    מחליפים את GROUP_DOMAIN בשם הדומיין של קבוצת computeclass-editors.

  6. יוצרים את ClusterRoleBinding:

    kubectl apply -f computeclass-editor-role-binding.yaml
    

אימות ההגבלות

בקטעים הבאים מוסבר איך לוודא שההגבלות שהגדרתם בקטעים הקודמים פועלות כמצופה. אם אתם מגדירים הגבלות משלכם במדיניות ValidatingAdmissionPolicies או במדיניות RBAC, אתם יכולים לבדוק את ההגבלות על ידי יצירת עומס עבודה שמפר את המדיניות הזו.

אימות של ValidatingAdmissionPolicy

  1. שומרים את אחד מהמניפסטים הבאים, שכל אחד מהם מפר תנאי אחר של ValidatingAdmissionPolicy:

    • פריסה שמשתמשת בבורר צמתים כדי לבחור ComputeClass שלא מותר:

      apiVersion: apps/v1
      kind: Deployment
      metadata:
        name: disallowed-computeclass-deployment
        namespace: computeclass-vap-tutorial
      spec:
        replicas: 1
        selector:
          matchLabels:
            app: forbidden-selector-app
        template:
          metadata:
            labels:
              app: forbidden-selector-app
          spec:
            containers:
            - name: my-app-container
              image: nginx:latest
            # The node selector triggers the policy.
            nodeSelector:
              cloud.google.com/compute-class: COMPUTECLASS_NAME
      
    • פריסה עם סבילות ל-ComputeClass אסור:

      apiVersion: apps/v1
      kind: Deployment
      metadata:
        name: disallowed-computeclass-deployment-toleration
        namespace: computeclass-vap-tutorial
      spec:
        replicas: 1
        selector:
          matchLabels:
            app: forbidden-selector-app
        template:
          metadata:
            labels:
              app: forbidden-selector-app
          spec:
            containers:
            - name: my-app-container
              image: nginx:latest
            tolerations:
            - key: cloud.google.com/compute-class
              operator: Equal
              value: COMPUTECLASS_NAME
              effect: NoSchedule
      
    • פריסה עם כלל של צירוף צומת ל-ComputeClass שלא מותר:

      apiVersion: apps/v1
      kind: Deployment
      metadata:
        name: disallowed-computeclass-deployment-toleration
        namespace: computeclass-vap-tutorial
      spec:
        replicas: 1
        selector:
          matchLabels:
            app: forbidden-selector-app
        template:
          metadata:
            labels:
              app: forbidden-selector-app
          spec:
            containers:
            - name: my-app-container
              image: nginx:latest
            affinity:
              nodeAffinity:
                requiredDuringSchedulingIgnoredDuringExecution:
                  nodeSelectorTerms:
                  - matchExpressions:
                    - key: cloud.google.com/compute-class
                      operator: In
                      values:
                      - COMPUTECLASS_NAME
      
    • ‫Pod שיש לו טולרנטיות לכל דחיית צומת באשכול:

      apiVersion: v1
      kind: Pod
      metadata:
        name: disallowed-computeclass-deployment-toleration
        namespace: computeclass-vap-tutorial
      spec:
        containers:
        - name: my-app-container
          image: nginx:latest
        tolerations:
        - operator: Exists
          effect: NoSchedule
      
  2. יוצרים את עומס העבודה לבדיקה:

    kubectl apply -f PATH_TO_WORKLOAD_MANIFEST
    

    הפלט אמור להיראות כך:

    Error from server (BadRequest): admission webhook "validation-policy.kubernetes.io" denied the request: Pods and Deployments in this namespace cannot request ComputeClass COMPUTECLASS_NAME or use wildcard tolerations.
    

אימות הגדרות ה-RBAC

כדי לאמת את הגדרת RBAC, פועלים לפי השלבים הבאים:

  1. מבצעים אימות לאשכול באמצעות פרטי הכניסה של משתמש שהוא חבר בקבוצה computeclass-editors.

  2. בודקים אם המשתמש יכול ליצור ComputeClass:

    kubectl auth can-i create computeclasses.cloud.google.com \
        --as=MEMBER_USER
    

    מחליפים את MEMBER_USER בכתובת האימייל של משתמש שהוא חבר בקבוצה.

    הפלט הוא yes.

  3. מבצעים אימות לאשכול באמצעות פרטי הכניסה של משתמש שלא חבר בקבוצה computeclass-editors.

  4. בודקים אם המשתמש יכול ליצור ComputeClass:

    kubectl auth can-i create computeclasses.cloud.google.com \
        --as=NON_MEMBER_USER
    

    מחליפים את NON_MEMBER_USER בכתובת האימייל של משתמש שלא חבר בקבוצה.

    הפלט הוא no.

אם הפלט של הפקודה kubectl auth can-i הוא yes עבור משתמש שלא חבר בקבוצה, צריך לוודא את הדברים הבאים:

  • הקבוצה computeclass-editors היא חברה בקבוצה gke-security-groups.
  • כתובת האימייל של הקבוצה ב-ClusterRoleBinding היא כתובת האימייל המדויקת של הקבוצה, כמו computeclass-editors@example.com.

הסרת המשאבים

כדי להימנע מחיובים בחשבון Google Cloud בגלל השימוש במשאבים שנעשה במסגרת המדריך הזה, אפשר למחוק את הפרויקט שמכיל את המשאבים, או להשאיר את הפרויקט ולמחוק את המשאבים בנפרד.

אם תפרסו את מדיניות ValidatingAdmissionPolicy ואת מדיניות RBAC שמוסברות במדריך הזה באשכול ייצור, GKE יחסום בקשות API ו-Pods נכנסים שמפירים את המדיניות. כדי להשאיר את המדיניות הזו פעילה, אפשר לדלג על הקטע הזה. בקטעים הבאים מוסבר איך למחוק את הפרויקט או משאבים ספציפיים אם פעלתם לפי המדריך הזה בסביבת למידה או בסביבת בדיקה.

מחיקת הפרויקט

    כדי למחוק Google Cloud פרויקט:

    gcloud projects delete PROJECT_ID

מחיקת משאבים בודדים

  1. מוחקים את ComputeClass שיצרתם:

    kubectl delete computeclass access-restriction-class
    
  2. מוחקים את ValidatingAdmissionPolicy ואת ValidatingAdmissionPolicyBinding:

    kubectl delete validatingadmissionpolicy restrict-computeclass-usage
    kubectl delete validatingadmissionpolicybinding restrict-computeclass-usage-binding
    
  3. מחיקת ClusterRoles ו-ClusterRoleBindings:

    kubectl delete clusterroles \
        computeclass-editor validatingadmissionpolicy-editor
    kubectl delete clusterrolebindings \
        computeclass-editor-role-binding edit-validatingadmissionpolicies
    
  4. מוחקים את מרחב השמות לדוגמה:

    kubectl delete namespace computeclass-vap-tutorial
    

המאמרים הבאים