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

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

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

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

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

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

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

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

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

יצירת סוד

אתם מעבירים את המפתח של חשבון השירות ל-Kubernetes באמצעות Secret שנוצר במרחב השמות של Data Volume. הקטע 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 on 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: גיבוב (hash) ב-base64 של תוכן קובץ המפתח של חשבון השירות.
    • ‫SECRET_NAME: השם של הסוד.
    • ‫NAMESPACE_NAME: מרחב השמות של הסוד.
      • יוצרים את הסוד באשכול שבו פועל CDI ובאותו מרחב שמות כמו Data Volume. ‫CDI מופעל באופן אוטומטי באשכול שמריץ את VM Runtime on GDC.
  3. שומרים וסוגרים את המניפסט של Secret בכלי העריכה.

  4. מחילים את המניפסט של Secret באמצעות 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: מרחבי השמות של הסוד החדש.
      • יוצרים את הסוד באשכול שבו פועל CDI ובאותו מרחב שמות כמו Data Volume. ‫CDI מופעל באופן אוטומטי באשכול שמריץ את VM Runtime on 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: השם של הסוד החדש באשכול המרוחק.
    • ‫TARGET_NAMESPACE_NAME: מרחבי השמות של הסוד החדש באשכול המרוחק.
      • יוצרים את הסוד באשכול שבו פועל CDI ובאותו מרחב שמות כמו Data Volume. ‫CDI מופעל באופן אוטומטי באשכול שמריץ את VM Runtime on GDC.
    • ‫SOURCE_SECRET_NAME: השם של הסוד במקור שרוצים להעביר.
    • ‫SOURCE_NAMESPACE_NAME: מרחב השמות של הסוד במקור שרוצים להעביר.
  3. שומרים וסוגרים את המניפסט של SecretForwarder בכלי העריכה.

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

    kubectl apply -f my-forwarded-secret.yaml
    

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

כדי להשתמש ב-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
    

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