במאמר הזה מוסבר איך ליצור פרטי כניסה ולהשתמש בהם כדי לגשת ל-Cloud Storage באמצעות VM Runtime ב-GDC. תוסף Cloud Storage מאפשר להשתמש בכלי לייבוא נתונים מבוסס-קונטיינרים (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 את פרטי הכניסה של חשבון השירות:
- מגדירים את פרטי הכניסה ב-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.
-
מניפסט
יוצרים מניפסט
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. - הסוד החדש נוצר באותו אשכול.
כדי להעביר סוד באותו אשכול, מבצעים את השלבים הבאים:
יוצרים קובץ מניפסט
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: מרחבי השמות של ה-Secret החדש.- יוצרים את הסוד באשכול שבו 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.
כדי להעביר סוד באותו אשכול, מבצעים את השלבים הבאים:
יוצרים קובץ מניפסט
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: השם של ה-Secret החדש באשכול המרוחק. -
TARGET_NAMESPACE_NAME: מרחבי השמות של ה-Secret החדש באשכול המרוחק.- יוצרים את הסוד באשכול שבו CDI פועל ובאותו מרחב שמות כמו Data Volume. ה-CDI מופעל אוטומטית באשכול שמריץ את VM Runtime ב-GDC.
-
SOURCE_SECRET_NAME: השם של סוד המקור שרוצים להעביר. -
SOURCE_NAMESPACE_NAME: מרחב השמות של הסוד במקור שרוצים להעביר.
-
שומרים וסוגרים את קובץ המניפסט
SecretForwarderבכלי העריכה.מחילים את
SecretForwarderהמניפסט באשכול האדמין באמצעותkubectlעםKUBECONFIGשל אשכול האדמין:kubectl apply -f my-forwarded-secret.yaml
שימוש בסוד כדי לייבא תמונה
כדי להשתמש ב-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