ב-Spanner Omni אנחנו משתמשים ב-TLS 1.3 כדי להצפין את הנתונים שזורמים בין הלקוח לשרת, ובין שרתי Spanner Omni. Spanner Omni מספק mTLS לאבטחה משופרת, שבה שני הצדדים מאמתים את האותנטיות של כל אחד מהם לפני שהם מחליפים נתונים. אם משתמשים בהצפנה, השרתים צריכים לתקשר באמצעות mTLS. אתם יכולים לבחור אם הלקוח והשרת שלכם ישתמשו גם ב-mTLS.
גרסת הטרום-השקה של Spanner Omni לא תומכת בהצפנת TLS, והיא מפסיקה לכתוב נתונים 90 יום אחרי שיוצרים פריסה. כדי לקבל גישה מוקדמת למהדורה עם כל התכונות, אפשר לפנות אל Google.
לפני שמתחילים
חשוב לוודא שאתם עומדים בדרישות הבאות:
יוצרים אשכול Kubernetes. ההגדרה תומכת ב-Google Kubernetes Engine (GKE) וב-Amazon Elastic Kubernetes Service (Amazon EKS). יכול להיות שתצטרכו להתאים אישית את ההגדרה כדי שהיא תפעל בסביבות אחרות.
מוודאים שלקלאסטר Kubernetes יש גישה לארטיפקט של Artifact Registry שמארח את קונטיינר Spanner Omni.
מתקינים ומגדירים את כלי שורת הפקודה
kubectlואת Helm.אם הגדרתם את סביבת Kubernetes במכונות של פלטפורמת הווירטואליזציה vSphere, צריך להשבית את הווירטואליזציה של Time Stamp Counter (TSC) על ידי הוספת
monitor_control.virtual_rdtsc = FALSEלקובץ ההגדרה.vmxשל המכונה הווירטואלית. כך מבטיחים ש-TrueTime יפעל בצורה תקינה.מוודאים שהסביבה עומדת בדרישות המערכת של Spanner Omni.
שלב 1: יצירת האישורים
צריך ליצור שלוש קבוצות של אישורים:
אישורים של API: האישורים האלה עוזרים להגן על השרת של Spanner Omni API.
אישורים לשרתים: עוזרים להגן על התקשורת בין השרתים.
אישורי לקוח: משתמשי קצה או אפליקציות משתמשים בהם כדי לבסס את הזהות שלהם ואת האמון בשרתי Spanner Omni.
רשות אישורים (CA) מנפיקה את האישורים האלה. ב-Spanner Omni יש כלים ליצירת רשות אישורים בחתימה עצמית וכל שלושת סוגי האישורים.
מבצעים את השלבים הבאים באחד מהמחשבים. השלבים מניחים שמרחב השמות הוא spanner-ns. משנים את זה למרחב השמות שרוצים להשתמש בו בפריסה.
אפשר ליצור את האישורים האלה בתחנת העבודה באמצעות Spanner Omni CLI.
1. יצירת רשות אישורים (CA)
כל האישורים מונפקים על ידי רשות אישורים (CA). יכול להיות שבארגון שלכם יש רשות אישורים מרכזית, או שאתם יכולים להשתמש ברשות אישורים ציבורית. אפשר להשתמש באותו CA לכל האישורים, אבל אישורי API ואישורי לקוח חייבים להשתמש באותו CA.
בעזרת Spanner Omni אפשר ליצור רשות אישורים פרטית.
./google/spanner/bin/spanner certificates create-ca --ca-certificate-directory=certs
הפקודה create-ca יוצרת את אישור ה-CA בספרייה certs.
אפשר להעתיק את האישור הזה כדי להשתמש בו כ-CA לאישורי API, או ליצור CA אחר. חשוב לוודא שאתם משתמשים ב-CA הנכון כשאתם יוצרים אישורים.
cp certs/ca.crt certs/ca-api.crt
הספרייה $HOME/.spanner/private-keys מכילה את המפתח הפרטי של רשות האישורים.
חשוב מאוד לגבות את הספרייה הזו ולאבטח אותה. משתמשים שיש להם גישה למפתח הפרטי יכולים לחתום על אישורים שרירותיים שהלקוחות סומכים על רשות האישורים בחתימה עצמית שסומכים עליה. אופציונלי: אפשר ליצור רשות אישורים נוספת (או להשתמש ברשות אישורים חיצונית מהימנה) לאישורי ה-API. במסמך הזה נעשה שימוש באותו CA לכל סוגי האישורים.
2. יצירת אישורי שרת
צריך ליצור שני סוגים של אישורים לשרת:
אישור API: משתמשים באישור הזה כדי להצפין את התקשורת ממערכות שמתקשרות עם הפריסה.
אישור שרת Spanner: שרתי Spanner Omni משתמשים באישור הזה כדי להצפין את התקשורת ביניהם.
ההגדרה הזו מאפשרת גמישות בניהול האישורים האלה. לדוגמה, היא מאפשרת להשתמש ברוטציה של אישורים.
יצירת אישור שרת Spanner
כדי ליצור את אישור השרת, מריצים את הפקודה הבאה:
# Comma-separate names of the Spanner servers; wildcards are supported.
SERVER_NAMES=*.pod.NAMESPACE
./google/spanner/bin/spanner certificates create-server --hostnames=${SERVER_NAMES} --ca-certificate-directory certs --output-directory certs
הפקודה הזו יוצרת את הקבצים server.crt ו-server.key בספרייה certs.
יצירת אישור API
כדי ליצור את אישור ה-API, מריצים את הפקודה הבאה:
OMNI_ENDPOINT=spanner.NAMESPACE
./google/spanner/bin/spanner certificates create-server --filename-prefix=api --hostnames=${OMNI_ENDPOINT} --ca-certificate-directory certs --output-directory certs
הפקודה הזו יוצרת את הקבצים api.crt ו-api.key בספרייה certs. אם צריך, משתמשים ב-CA חיצוני מהימן לאישורי ה-API.
3. יצירת אישורי לקוח
אתם יכולים להשתמש באישורי לקוח כדי לאמת משתמשים ואפליקציות. אישורי לקוח מאפשרים mTLS בין הלקוח לשרת. אם אתם לא מתכננים להשתמש ב-mTLS, אתם יכולים לדלג על השלב הזה.
אותה רשות אישורים שחותמת על אישור ה-API צריכה לחתום על אישורי הלקוח, שצריכים לכלול גם שם משתמש לצורך הרשאה. בדוגמה הזו, משתמשים במשתמש admin, שהוא משתמש ברירת המחדל לכל מסד נתונים חדש. מידע נוסף זמין במאמר אימות והרשאה ב-Spanner Omni.
USERNAME=admin
./google/spanner/bin/spanner certificates create-client $USERNAME --output-directory clientcerts --ca-certificate-directory certs
הפקודה הזו יוצרת את הקבצים client.crt ו-client.key בספרייה clientcerts. שולחים את הקבצים האלה לכל מכונה שמתחברת לפריסה.
אם אתם מתכננים להשתמש באישור לקוח עם ספריית הלקוח של Java, אתם צריכים ליצור את מפתח האישור בפורמט PKCS#8. משתמשים בפקודה הבאה:
USERNAME=admin
./google/spanner/bin/spanner certificates create-client $USERNAME --output-directory clientcerts --ca-certificate-directory certs --generate-pkcs8-key
שלב 2: דחיפת האישורים לאשכול Kubernetes
מריצים את הפקודות הבאות כדי להעביר את האישורים לאשכול Kubernetes:
kubectl create namespace NAMESPACE
kubectl create secret generic tls-certs \
--from-file=ca.crt="certs/ca.crt" \
--from-file=ca-api.crt="certs/ca-api.crt" \
--from-file=server.crt="certs/server.crt" \
--from-file=server.key="certs/server.key" \
--from-file=api.crt="certs/api.crt" \
--from-file=api.key="certs/api.key" \
-n NAMESPACE
שלב 3: יצירת הפריסה עם הצפנת TLS
כדי ליצור פריסה עם הצפנת TLS, פועלים לפי השלבים הבאים.
1. הכנת הגדרות Helm
עוברים אל יצירת הגדרת תרשים Helm ויוצרים את הגדרת הפריסה לסביבה שלכם.
כדי להפעיל TLS, מגדירים את הערכים הבאים בהגדרות של תרשים Helm:
# Enables TLS
global:
insecureMode: false
# Enables client certificate authentication (mTLS)
deployment:
enableClientCertificateAuthentication: true
2. יצירת הפריסה
מריצים את הפקודה הבאה כדי ליצור את הפריסה:
kubectl create ns monitoring
helm upgrade --install spanner-omni oci://us-docker.pkg.dev/spanner-omni/charts/spanner-omni \
--version VERSION \
--set global.platform=gke \
--set global.insecureMode=false \
--set deployment.enableClientCertificateAuthentication=true \
--namespace NAMESPACE \
--set monitoring.enabled=true
הפקודה מפעילה עבודת אתחול. אפשר לעקוב אחרי ההתקדמות באמצעות הצפייה ביומני הרישום של הפעולה הזו:
kubectl logs -n NAMESPACE -l app.kubernetes.io/component=bootstrap -f
הפלט מציין את ההתקדמות. בסיום, תופיע ההודעה 'הפריסה נוצרה בהצלחה'.
3. בדיקת הסטטוס של ה-pods
מריצים את הפקודה הבאה כדי לוודא מה הסטטוס של ה-pod:
kubectl get pods --watch --namespace NAMESPACE
כל הפודים במצב READY.
4. עדכון האישור והפריסה עם פרטים של מאזן עומסים
השלב הזה נדרש אם רוצים שהלקוחות יתחברו מחוץ לאשכול Kubernetes.
# Get the service details
kubectl get service spanner -n NAMESPACE
# The EXTERNAL-IP:PORT is the API or deployment endpoint for your deployment.
# Update the API certificate with these details.
OMNI_ENDPOINT=EXTERNAL_IP,spanner.NAMESPACE.svc
./google/spanner/bin/spanner certificates update --filename_prefix=api --hostnames=${OMNI_ENDPOINT} --ca_certificate_directory certs --output_directory certs --overwrite
# Update the secrets in Kubernetes
kubectl patch secret tls-certs -n NAMESPACE -p "{\"data\":{\"api.crt\":\"$(base64 -w 0 certs/api.crt)\"}}"
שלב 4: אינטראקציה עם Spanner Omni
אתם יכולים לקיים אינטראקציה עם פריסת Spanner Omni מכל מכונת VM באמצעות Spanner Omni CLI.
אם הפעלתם mTLS ללקוחות, צריך להשתמש בדגלים הבאים בכל פקודה:
--client-certificate-directory=CLIENT_CERTIFICATE_DIRECTORY--ca-certificate-file=API_CA_CERT_FILE_PATH
1. כניסה ל-Spanner Omni
מריצים את הפקודה הבאה כדי להתחבר:
./google/spanner/bin/spanner auth login admin --ca-certificate-file=certs/ca-api.crt \
--client-certificate_directory=clientcerts --deployment-endpoint=DEPLOYMENT_ENDPOINT
סיסמת ברירת המחדל היא admin.
Successfully logged in as "admin"
2. יצירת מסד נתונים
מריצים את הפקודה הבאה כדי ליצור מסד נתונים:
./google/spanner/bin/spanner --deployment-endpoint=DEPLOYMENT_ENDPOINT databases create DATABASE_NAME --ca-certificate-file=certs/ca-api.crt --client-certificate-directory=clientcerts
3. פתיחה של SQL Shell
מריצים את הפקודה הבאה כדי לפתוח את המעטפת:
./google/spanner/bin/spanner sql --database=DATABASE_NAME --deployment-endpoint=DEPLOYMENT_ENDPOINT --ca-certificate-file=certs/ca-api.crt --client-certificate-directory=clientcerts
4. יצירת טבלה והוספת נתונים
מריצים את פקודות ה-SQL הבאות:
spanner> CREATE TABLE names (nameId INT64 NOT NULL, name String(100)) PRIMARY KEY (nameId);
Query OK, 0 rows affected (4.62 sec)
spanner> INSERT names (nameId, name) VALUES (1, "Jack");
Query OK, 1 rows affected (0.18 sec)
5. אימות הפריסה
כדי להציג את רשימת מסדי הנתונים, מריצים את הפקודה הבאה:
./google/spanner/bin/spanner databases list --ca-certificate-file=certs/ca-api.crt --client-certificate-directory=clientcerts --deployment-endpoint=DEPLOYMENT_ENDPOINT
הפלט אמור להיראות כך:
| שם | STATE | VERSION_RETENTION_PERIOD | EARLIEST_VERSION_TIME | ENABLE_DROP_PROTECTION |
|---|---|---|---|---|
| DATABASE_NAME | מוכן | שעה | 2025-02-07T12:25:30Z | FALSE |
כדי לשלוח שאילתה לנתונים, מריצים את הפקודה הבאה:
./google/spanner/bin/spanner sql --database=DATABASE_NAME --ca-certificate-file=certs/ca-api.crt --client-certificate-directory=clientcerts --deployment-endpoint=DEPLOYMENT_ENDPOINT
מריצים את פקודות ה-SQL הבאות:
SHOW TABLES;
SELECT * FROM names;
לחלופין, אפשר לפעול לפי ההוראות במאמר שימוש ב-PGAdapter עם Spanner Omni כדי להגדיר את PGAdapter ולבצע אינטראקציה באמצעות כלים כמו psql.
שלב 5: מעקב אחר הפריסה
אם התקנתם את Spanner Omni עם monitoring.enabled=true,
מערכת Prometheus תאסוף מדדים. אפשר להשתמש ב-Grafana כדי להציג את המדדים האלה באופן חזותי.
1. קבלת פרטי השירות
מריצים את הפקודות הבאות כדי לקבל את פרטי השירות:
# Prometheus service details. Default port is 9090.
kubectl get service prometheus-service -n monitoring
# Grafana service details. Default port is 3000.
kubectl get service grafana -n monitoring
המאמרים הבאים
- משתמשים בספריות לקוח ובדרייברים של JDBC כדי לחבר את האפליקציה לפריסה.
- ניהול משתמשים ותפקידים.