יצירה ושימוש בפרטי כניסה לייבוא תמונות מ-Cloud Storage ל-VM Runtime ב-GDC

במאמר הזה מוסבר איך ליצור פרטי כניסה ולהשתמש בהם כדי לגשת ל-Cloud Storage באמצעות VM Runtime ב-GDC. תוסף Cloud Storage מאפשר להשתמש בכלי לייבוא נתונים מבוסס-קונטיינרים (CDI) כדי לייבא קובצי אימג' של מכונות וירטואליות מקטגוריות של Cloud Storage. אחר כך תוכלו ליצור דיסקים וירטואליים מהתמונות האלה ב-Cloud Storage ולצרף אותם למכונות וירטואליות שפועלות באשכול. ‫CDI מופעל באופן אוטומטי באשכול שבו פועל VM Runtime ב-GDC.

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

כדי להשלים את המסמך הזה, תצטרכו גישה למקורות המידע הבאים:

סקירה כללית על פרטי כניסה

כדי לגשת ל-Cloud Storage, משתמשים בחשבון שירות שמספק פרטי כניסה לקטגוריית האחסון. כדי שלחשבון השירות תהיה גישה לקטגוריית אחסון, צריך לתת לו הרשאות שונות:

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

יש שתי דרכים לספק ל-CDI את פרטי הכניסה של חשבון השירות:

  • מגדירים את פרטי הכניסה ב-Application Default Credentials ‏ (ADC) של Google בצמתים באשכול. למידע נוסף אפשר לעיין במאמר הגדרת ADC לספק שירותי ענן מקומי או אחר.
  • צריך לספק סוד שמכיל את המפתח של חשבון השירות כדי לגשת ל-Cloud Storage. בהמשך המאמר מוסבר איך ליצור מפתח לחשבון שירות וסוד.

יצירת סוד

מעבירים את המפתח של חשבון השירות ל-Kubernetes באמצעות Secret שנוצר במרחב השמות של נפח הנתונים. המקטע data של הסוד מכיל רשומה של creds-gcp.json. הערך הוא הנתונים בקידוד Base64 של קובץ המפתח של חשבון השירות. ממשק ה-CLI יוצר את הנתונים האלה בקידוד base64 בשבילכם. אם משתמשים במניפסט YAML כדי ליצור את הסוד, קודם צריך ליצור גיבוב Base64 של התוכן בקובץ המפתח של חשבון השירות.

CLI

  • יוצרים את הסוד באמצעות kubectl:

    kubectl create secret generic SECRET_NAME \
      --from-file=creds-gcp.json=SERVICE_ACCOUNT_KEY_PATH \
      --namespace NAMESPACE_NAME
    

    מחליפים את הערכים הבאים:

    • SECRET_NAME: השם של הסוד.
    • SERVICE_ACCOUNT_KEY_PATH: הנתיב לקובץ המפתח של חשבון השירות.
    • NAMESPACE_NAME: מרחב השמות של הסוד.
      • יוצרים את הסוד באשכול שבו CDI פועל ובאותו מרחב שמות כמו Data Volume. ה-CDI מופעל אוטומטית באשכול שמריץ את VM Runtime ב-GDC.

מניפסט

  1. יוצרים מניפסט Secret, כמו my-secret.yaml, בעורך לבחירתכם:

    nano my-secret.yaml
    
  2. מעתיקים ומדביקים את קובץ המניפסט הבא בפורמט YAML:

    apiVersion: v1
    data:
      creds-gcp.json: BASE64_SERVICE_ACCOUNT_FILE
    kind: Secret
    metadata:
      name: SECRET_NAME
      namespace: NAMESPACE_NAME
    type: Opaque
    

    מחליפים את הערכים הבאים:

    • BASE64_SERVICE_ACCOUNT_FILE: הגיבוב ב-Base64 של התוכן של קובץ המפתח של חשבון השירות.
    • SECRET_NAME: השם של הסוד.
    • NAMESPACE_NAME: מרחב השמות של הסוד.
      • יוצרים את הסוד באשכול שבו CDI פועל ובאותו מרחב שמות כמו Data Volume. ה-CDI מופעל אוטומטית באשכול שמריץ את VM Runtime ב-GDC.
  3. שומרים את מניפסט הסוד וסוגרים את העורך.

  4. מחילים את מניפסט הסוד באמצעות kubectl:

    kubectl apply -f my-secret.yaml
    

העברה של סוד קיים

במקום ליצור סוד, אפשר ליצור SecretForwarder כדי להעביר סוד קיים לשימוש. ‫SecretForwarder תומך בהעברת סודות באותו אשכול או בין אשכולות, למשל מאשכול האדמין לאשכול משתמש.

כדי להשתמש בסוד היעד כדי לגשת ל-Cloud Storage, בסוד המקור צריך להיות מפתח creds-gcp.json בקטע data שלו.

אותו אשכול

המניפסט הבא SecretForwarder מעביר סוד באותו אשכול:

apiVersion: baremetal.cluster.gke.io/v1
kind: SecretForwarder
metadata:
  name: cdi-gcs
  namespace: default
spec:
  inClusterTargetSecrets:
    name: gcs-sa
    namespaces:
    - default
  sourceSecret:
    name: gke-connect
    namespace: anthos-creds

בדוגמה הזו:

  • יוצר SecretForwarder בשם cdi-gcs במרחב השמות default.
  • העברה של הסוד שנקרא gke-connect במרחב השמות anthos-creds לסוד חדש שנקרא gcs-sa במרחב השמות default.
  • הסוד החדש נוצר באותו אשכול.

כדי להעביר סוד באותו אשכול, מבצעים את השלבים הבאים:

  1. יוצרים קובץ מניפסט SecretForwarder, כמו my-forwarded-secret.yaml, בכלי העריכה הרצוי:

    nano my-forwarded-secret.yaml
    
  2. מעתיקים ומדביקים את קובץ המניפסט הבא בפורמט YAML:

    apiVersion: baremetal.cluster.gke.io/v1
    kind: SecretForwarder
    metadata:
      name: SECRET_FORWARDER_NAME
      namespace: NAMESPACE_NAME
    spec:
      inClusterTargetSecrets:
        name: TARGET_SECRET_NAME
        namespaces:
        - TARGET_NAMESPACE_NAME
      sourceSecret:
        name: SOURCE_SECRET_NAME
        namespace: SOURCE_NAMESPACE_NAME
    

    מחליפים את הערכים הבאים:

    • SECRET_FORWARDER_NAME: השם של SecretForwarder.
    • NAMESPACE_NAME: מרחב השמות של SecretForwarder.
    • TARGET_SECRET_NAME: השם של הסוד החדש.
    • TARGET_NAMESPACE_NAME: מרחבי השמות של ה-Secret החדש.
      • יוצרים את הסוד באשכול שבו CDI פועל ובאותו מרחב שמות כמו Data Volume. ה-CDI מופעל אוטומטית באשכול שמריץ את VM Runtime ב-GDC.
    • SOURCE_SECRET_NAME: השם של סוד המקור שרוצים להעביר.
    • SOURCE_NAMESPACE_NAME: מרחב השמות של הסוד במקור שרוצים להעביר.
  3. שומרים וסוגרים את קובץ המניפסט SecretForwarder בכלי העריכה.

  4. מחילים את המניפסט SecretForwarder באמצעות kubectl:

    kubectl apply -f my-forwarded-secret.yaml
    

באשכולות שונים

בדוגמה הבאה SecretForwarder, קובץ המניפסט מעביר סוד בין אשכולות:

apiVersion: baremetal.cluster.gke.io/v1
kind: SecretForwarder
metadata:
  name: cdi-gcs
  namespace: cluster-user1
spec:
  RemoteClusterTargetSecrets:
    name: gcs-sa
    namespaces:
    - default
  sourceSecret:
    name: gke-connect
    namespace: anthos-creds

בדוגמה הזו:

  • יוצר SecretForwarder בשם cdi-gcs במרחב השמות cluster-user1.
  • העברה של הסוד שנקרא gke-connect במרחב השמות anthos-creds לסוד חדש שנקרא gcs-sa במרחב השמות default.
  • הפונקציה יוצרת את הסוד החדש באשכול בשם user1.

כדי להעביר סוד באותו אשכול, מבצעים את השלבים הבאים:

  1. יוצרים קובץ מניפסט SecretForwarder, כמו my-forwarded-secret.yaml, בכלי העריכה הרצוי:

    nano my-forwarded-secret.yaml
    
  2. מעתיקים ומדביקים את קובץ המניפסט הבא בפורמט YAML:

    apiVersion: baremetal.cluster.gke.io/v1
    kind: SecretForwarder
    metadata:
      name: SECRET_FORWARDER_NAME
      namespace: NAMESPACE_NAME
    spec:
      RemoteClusterTargetSecrets:
        name: TARGET_SECRET_NAME
        namespaces:
        - TARGET_NAMESPACE_NAME
      sourceSecret:
        name: SOURCE_SECRET_NAME
        namespace: SOURCE_NAMESPACE_NAME
    

    מחליפים את הערכים הבאים:

    • SECRET_FORWARDER_NAME: השם של SecretForwarder באשכול המרוחק.
    • NAMESPACE_NAME: מרחב השמות של SecretForwarder באשכול המרוחק.
    • TARGET_SECRET_NAME: השם של ה-Secret החדש באשכול המרוחק.
    • TARGET_NAMESPACE_NAME: מרחבי השמות של ה-Secret החדש באשכול המרוחק.
      • יוצרים את הסוד באשכול שבו CDI פועל ובאותו מרחב שמות כמו Data Volume. ה-CDI מופעל אוטומטית באשכול שמריץ את VM Runtime ב-GDC.
    • SOURCE_SECRET_NAME: השם של סוד המקור שרוצים להעביר.
    • SOURCE_NAMESPACE_NAME: מרחב השמות של הסוד במקור שרוצים להעביר.
  3. שומרים וסוגרים את קובץ המניפסט SecretForwarder בכלי העריכה.

  4. מחילים את SecretForwarder המניפסט באשכול האדמין באמצעות kubectl עם KUBECONFIG של אשכול האדמין:

    kubectl apply -f my-forwarded-secret.yaml
    

שימוש בסוד כדי לייבא תמונה

כדי להשתמש ב-Secret לייבוא תמונה מ-Cloud Storage כשיוצרים דיסק וירטואלי ומכונה וירטואלית, מבצעים את השלבים הבאים:

  1. יוצרים מניפסט שמגדיר VirtualMachineDisk ו-VirtualMachine, כמו my-vm.yaml,בעורך שבחרתם:

    nano my-vm.yaml
    
  2. מעתיקים ומדביקים את הגדרת ה-YAML הבאה:

    apiVersion: vm.cluster.gke.io/v1
    kind: VirtualMachineDisk
    metadata:
      name: VM_NAME-boot-dv
    spec:
      size: 20Gi
      source:
        gcs:
          url: IMAGE_URL
          secretRef: SECRET_NAME
    ---
    apiVersion: vm.cluster.gke.io/v1
    kind: VirtualMachine
    metadata:
      name: VM_NAME
    spec:
      interfaces:
        - name: eth0
          networkName: pod-network
          default: true
      disks:
        - boot: true
          virtualMachineDiskName: VM_NAME-boot-dv
    

    מחליפים את הערכים הבאים:

    • VM_NAME – השם של המכונה הווירטואלית.
    • IMAGE_URL – כתובת ה-URL של תמונת הדיסק ב-Cloud Storage, לדוגמה: gs://my-images-bucket/disk.qcow2.
    • SECRET_NAME – השם של הסוד.
  3. שומרים את המניפסט וסוגרים אותו בכלי העריכה.

  4. יוצרים את המכונה הווירטואלית והדיסק באמצעות kubectl:

    kubectl apply -f my-vm.yaml
    

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