פלאגין של Cloud Storage מאפשר להשתמש ב-Containerized Data Importer (CDI) כדי לייבא קובצי אימג' של מכונות וירטואליות (VM) מקטגוריות של Cloud Storage אל VM Runtime on GDC. אחרי שמגדירים את פרטי הכניסה לאימות ב-Cloud Storage, אפשר ליצור דיסקים וירטואליים מהתמונות האלה ולצרף אותם למכונות וירטואליות שפועלות באשכול. CDI מופעל באופן אוטומטי באשכולות שמריצים את VM Runtime on GDC.
לפני שמתחילים
כדי להשלים את המשימות שבמסמך הזה, אתם צריכים גישה למשאבים הבאים:
- גישה לאשכול של Google Distributed Cloud בגרסה 1.12.0 (
anthosBareMetalVersion: 1.12.0) ואילך. אפשר להשתמש בכל סוג של אשכול שיכול להריץ עומסי עבודה. במקרה הצורך, תוכלו לנסות את Google Distributed Cloud ב-Compute Engine או לעיין בסקירה הכללית על יצירת אשכולות. - חשבון שירות ומפתח לחשבון שירות שבהם רוצים להשתמש כדי לגשת ל-Cloud Storage. במקרה הצורך, מגדירים חשבון שירות שיכול לגשת לקטגוריה של Cloud Storage.
סקירה כללית על פרטי כניסה
כדי לגשת ל-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.
-
מניפסט
יוצרים מניפסט של
Secret, כמו my-secret.yaml, בעורך לבחירתכם:nano my-secret.yamlמעתיקים ומדביקים את המניפסט הבא ב-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.
-
שומרים וסוגרים את המניפסט של Secret בכלי העריכה.
מחילים את המניפסט של 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. - יוצר את הסוד החדש באותו אשכול.
כדי להעביר סוד באותו אשכול, מבצעים את השלבים הבאים:
יוצרים מניפסט של
SecretForwarder, למשל my-forwarded-secret.yaml, בעורך לבחירתכם:nano my-forwarded-secret.yamlמעתיקים ומדביקים את המניפסט הבא ב-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: מרחב השמות של הסוד במקור שרוצים להעביר.
-
שומרים וסוגרים את המניפסט של
SecretForwarderבכלי העריכה.מחילים את המניפסט
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.
כדי להעביר סוד באותו אשכול, מבצעים את השלבים הבאים:
יוצרים מניפסט של
SecretForwarder, למשל my-forwarded-secret.yaml, בעורך לבחירתכם:nano my-forwarded-secret.yamlמעתיקים ומדביקים את המניפסט הבא ב-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: מרחב השמות של הסוד במקור שרוצים להעביר.
-
שומרים וסוגרים את המניפסט של
SecretForwarderבכלי העריכה.מחילים את המניפסט
SecretForwarderבאשכול האדמין באמצעותkubectlעם ה-KUBECONFIGשל אשכול האדמין:kubectl apply -f my-forwarded-secret.yaml
שימוש ב-Secret כדי לייבא תמונה
כדי להשתמש ב-Secret לייבוא קובץ אימג' מ-Cloud Storage כשיוצרים דיסק וירטואלי ומכונה וירטואלית, מבצעים את השלבים הבאים:
יוצרים מניפסט שמגדיר
VirtualMachineDiskו-VirtualMachine, כמו my-vm.yaml, בעורך לבחירתכם:nano my-vm.yamlמעתיקים ומדביקים את הגדרת ה-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– שם הסוד.
-
שומרים וסוגרים את המניפסט בכלי העריכה.
יוצרים את המכונה הווירטואלית ואת הדיסק באמצעות
kubectl:kubectl apply -f my-vm.yaml