במאמר הזה מוסבר איך ליצור פרטי כניסה ולהשתמש בהם כדי לגשת ל-Cloud Storage באמצעות VM Runtime ב-GDC. תוסף Cloud Storage מאפשר להשתמש ב-Containerized Data Importer (CDI) כדי לייבא תמונות של מכונות וירטואליות ממאגרי Cloud Storage. לאחר מכן אפשר ליצור דיסקים וירטואליים מהתמונות האלה ב-Cloud Storage ולצרף אותם למכונות וירטואליות שפועלות באשכול. ה-CDI מופעל אוטומטית באשכול שבו פועל VM Runtime ב-GDC.
לפני שמתחילים
כדי להשלים את המסמך הזה, תצטרכו גישה למקורות המידע הבאים:
- גישה לאשכול ב-Google Distributed Cloud בגרסה 1.12.0 (
anthosBareMetalVersion: 1.12.0) ומעלה. אפשר להשתמש בכל סוג של אשכול שיכול להריץ עומסי עבודה. אם צריך, אפשר להתנסות ב-Google Distributed Cloud ב-Compute Engine או לעיין בסקירה הכללית על יצירת אשכולות. - חשבון שירות ומפתח של חשבון שירות שרוצים להשתמש בהם לגישה ל-Cloud Storage. אם צריך, מגדירים חשבון שירות שיכול לגשת לקטגוריה של Cloud Storage.
סקירה כללית על פרטי כניסה
כדי לגשת ל-Cloud Storage, צריך להשתמש בחשבון שירות שמספק אישורים לקטגוריית האחסון. לחשבון השירות נדרשות הרשאות שונות כדי לגשת לקטגוריית האחסון:
- קטגוריית אחסון ציבורית: אתם משתמשים בחשבון שירות לצורך זיהוי עצמי, אבל לא נדרשות הרשאות ספציפיות.
- מאגר אחסון פרטי: בחשבון האחסון צריך להיות לכם הרשאת צפייה או אדמין במאגר האחסון.
יש שתי דרכים לספק ל-CDI את פרטי הכניסה של חשבון השירות:
- מגדירים את פרטי הכניסה של Google Application Default Credentials (ADC) בצמתים באשכול. למידע נוסף אפשר לעיין במאמר הגדרת ADC לספק שירותי ענן מקומי או אחר.
- צריך לספק Secret שמכיל את המפתח של חשבון השירות כדי לגשת ל-Cloud Storage. בהמשך המאמר מוסבר איך ליצור מפתח לחשבון שירות ו-Secret.
יצירת סוד
מעבירים את מפתח חשבון השירות ל-Kubernetes באמצעות Secret שנוצר במרחב השמות של נפח הנתונים. בקטע data של ה-Secret יש רשומה של creds-gcp.json. הערך הוא הנתונים המקודדים ב-Base64 של קובץ מפתח חשבון השירות. ה-CLI יוצר את הנתונים המקודדים ב-Base64 בשבילכם. אם משתמשים במניפסט YAML כדי ליצור את ה-Secret, צריך קודם ליצור גיבוב 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.
-
מניפסט
יוצרים מניפסט
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: הגיבוב ב-Base64 של התוכן של קובץ המפתח של חשבון השירות. -
SECRET_NAME: השם של הסוד. -
NAMESPACE_NAME: מרחב השמות של הסוד.- יוצרים את הסוד באשכול שבו CDI פועל ובאותו מרחב שמות כמו Data Volume. התכונה CDI מופעלת אוטומטית באשכול שמופעל בו VM Runtime ב-GDC.
-
שומרים וסוגרים את מניפסט הסוד בעורך.
מחילים את מניפסט הסוד באמצעות
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. - הסוד החדש נוצר באותו אשכול.
כדי להעביר סוד באותו אשכול, מבצעים את השלבים הבאים:
יוצרים קובץ
SecretForwardermanifest, כמו 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 ב-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.
כדי להעביר סוד באותו אשכול, מבצעים את השלבים הבאים:
יוצרים קובץ
SecretForwardermanifest, כמו 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: השם של ה-Secret החדש באשכול המרוחק. -
TARGET_NAMESPACE_NAME: מרחבי השמות של הסוד החדש באשכול המרוחק.- יוצרים את הסוד באשכול שבו CDI פועל ובאותו מרחב שמות כמו Data Volume. התכונה CDI מופעלת אוטומטית באשכול שמופעל בו VM Runtime ב-GDC.
-
SOURCE_SECRET_NAME: השם של הסוד במקור שרוצים להעביר. -
SOURCE_NAMESPACE_NAME: מרחב השמות של הסוד במקור שרוצים להעביר.
-
שומרים וסוגרים את קובץ המניפסט
SecretForwarderבכלי העריכה.מחילים את המניפסט
SecretForwarderבאשכול האדמין באמצעותkubectlעםKUBECONFIGשל אשכול האדמין:kubectl apply -f my-forwarded-secret.yaml
שימוש בסוד כדי לייבא תמונה
כדי להשתמש בסוד כדי לייבא תמונה מ-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