אבטחה באמצעות GKE Sandbox

במאמר הזה מוסבר איך להגדיר את Knative Serving שפועל ב-Google Kubernetes Engine‏ (GKE) כדי להשתמש ב-GKE Sandbox לשיפור הבידוד של עומסי העבודה מליבת המארח.

מטרות

  • כאן מוסבר איך להפעיל את GKE Sandbox באשכול Knative serving.
  • פריסת שירות שמוגדר להפעלה בצמתים בארגז חול.

עלויות

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

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

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

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

הוספת מאגר צמתים של GKE Sandbox לאשכול Knative serving קיים

פועלים לפי השלבים להוספת מאגר צמתים שמופעלת בו האפשרות להשתמש ב-GKE Sandbox לאשכול הקיים של Knative serving. כאן פועלים עומסי העבודה שבהם בחרתם להשתמש ב-GKE Sandbox.

פריסת עומס עבודה במאגר הצמתים של GKE Sandbox

אחרי שיש לכם אשכול GKE עם מאגר צמתים שמופעל בו GKE Sandbox, צריך לעדכן את הגדרת Knative serving. בנוסף, צריך לעדכן את המפרט של כל שירות כדי להשתמש בצמתים החדשים. צריך לבצע את העדכונים האלה רק פעם אחת.

הפעלת דגל התכונה של מחלקת זמן הריצה

בקטע הזה מוסבר איך להפעיל את מחלקת זמן הריצה של Kubernetes באמצעות התכונה Knative ודגלי ההרחבה ב-config-features ConfigMap במרחב השמות knative-serving. כדי להפעיל את מחלקת זמן הריצה, מגדירים את האפשרות ConfigMap ‎kubernetes.podspec-runtimeclassname ל-enabled. מידע נוסף זמין במאמרים Kubernetes runtime class וConfiguring flags במסמכי Features and extensions של Knative.

  1. פותחים את config-features ConfigMap לעריכה:

    kubectl edit configmap config-features -n knative-serving
    
  2. מוסיפים את דגל התכונה kubernetes.podspec-runtimeclassname: enabled לשדה data.

  3. במקום השלבים הקודמים, אפשר להריץ את הפקודה הבאה כדי להוסיף את הדגל הזה לתכונות של Knative:

    kubectl patch configmap config-features \
        --type='json' \
        -p="[{'op': 'replace', 'path': '/data/kubernetes.podspec-runtimeclassname', 'value': 'enabled'}]" \
        -n knative-serving
    
  4. כדי לוודא שהעריכות בוצעו, מריצים את הפקודה הבאה כדי להציג את ConfigMap:

    kubectl get configmap config-features -n knative-serving -o yaml
    

    קובץ ה-ConfigMap אמור להיראות כך:

    apiVersion: v1
    kind: ConfigMap
    metadata:
        name: config-features
        namespace: knative-serving
        labels:
            serving.knative.dev/release: v0.22.0
    data:
        kubernetes.podspec-runtimeclassname: enabled
    

פריסת שירות שהוגדר להרצה ב-GKE Sandbox

אחרי שמפעילים את ה-feature flag של מחלקת זמן הריצה, אפשר ליצור שירותים שמציינים runtimeClassName במפרט. מגדירים את runtimeClassName ל-gvisor כדי לציין ששירות צריך לפעול במאגר הצמתים של GKE Sandbox.

  1. מריצים את הפקודה הבאה כדי לפרוס אפליקציית Knative עם הכיתוב Hello World:

    cat <<EOF | kubectl apply -f -
    apiVersion: serving.knative.dev/v1
    kind: Service
    metadata:
        name: helloworld-go
    spec:
        template:
            spec:
                runtimeClassName: gvisor
                containers:
                    -   image: gcr.io/knative-samples/helloworld-go
                        env:
                        -   name: TARGET
                            value: "gVisor User"
    EOF
    

    אם התכונה של שם מחלקת זמן הריצה של Kubernetes מופעלת, הפקודה אמורה להסתיים ללא שגיאות.

  2. כדי להריץ את הפודים של השירות ואת מחלקת זמן הריצה שהוגדרה להם, מריצים את הפקודה:

    kubectl get pods \
        -o=custom-columns='NAME:.metadata.name,RUNTIME CLASS:.spec.runtimeClassName,STATUS:.status.phase'
    

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

    NAME                                              RUNTIME CLASS   STATUS
    helloworld-go-00001-deployment-55f58477f-fxm6m    gvisor          Running
    

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

אחרי שמוודאים שאפשר לפרוס אפליקציות לא מהימנות במאגר הצמתים החדש של GKE Sandbox, אפשר להוסיף את runtimeClassName: gvisor למפרטי Kubernetes של שירותים לא מהימנים אחרים שרוצים להריץ במאגרי צמתים של GKE Sandbox.

מקורות מידע נוספים: