בדף הזה מוסבר איך להגדיר DNS ב-Private Service Connect.
סקירה כללית
DNS היא הדרך המומלצת להתחבר למופעים שמופעל בהם Private Service Connect. שם DNS מאפשר לרשתות שונות להתחבר לאותה מכונה, כאשר לנקודות קצה של Private Service Connect בכל רשת יכולות להיות כתובות IP שונות. בנוסף, שרת proxy ל-Cloud SQL Auth ומחברי שפות דורשים שמות DNS כדי להתחבר למופעים האלה.
למכונות Cloud SQL שמופעל בהן Private Service Connect יכולים להיות שני סוגים של שמות DNS:
שם DNS לכל מופע. האפשרות הזו זמינה למכונות בכל המהדורות של Cloud SQL. למופע הראשי ולכל מופע משוכפל יש שמות DNS שונים לכל מופע.
שם DNS של נקודת קצה גלובלית לכתיבה. האפשרות הזו זמינה במופעים במהדורת Cloud SQL Enterprise Plus, כדי לעזור בשחזור מתקדם מאסון (ADR). נקודת קצה לכתיבה היא שם DNS גלובלי שמקבל באופן אוטומטי את כתובת ה-IP של המופע הראשי הנוכחי. במקרה של יתירות כשל של רפליקה או של פעולת מעבר, נקודת הקצה הזו של הכתיבה מפנה אוטומטית את החיבורים הנכנסים למכונה הראשית החדשה. שימוש בנקודת קצה לכתיבה מאפשר לכם להימנע משינויים בחיבור האפליקציה כשאתם מבצעים גיבוי של רפליקה או פעולת מעבר לגיבוי במקרה של הפסקת חשמל באזור, או תרגיל התאוששות מאסון.
אוטומציה של DNS ב-Private Service Connect
כדי ליצור שם DNS לכל מופע, אפשר להשתמש בתכונת האוטומציה של DNS ב-Cloud SQL כדי להגדיר את רשומות ה-DNS והשם בשבילכם. כשמפעילים אוטומציה של DNS, Cloud SQL מקצה ומנהל באופן אוטומטי רשומות DNS עבור שם ה-DNS לכל מכונה ברשתות ה-VPC המורשות של הלקוח.
אם מפעילים אוטומציה של DNS במכונה במהדורת Cloud SQL Enterprise Plus, אפשר גם להפעיל שם DNS של נקודת קצה גלובלית לכתיבה, שתמיד יומר אוטומטית לכתובת ה-IP של המכונה הראשית הנוכחית.
אפשר גם להגדיר ידנית רשומת DNS לכל מופע (ראו הגדרה ידנית של DNS), אבל מומלץ להשתמש באוטומציה של DNS. הגדרה ידנית של DNS היא אפשרות מדור קודם.
דרישות מוקדמות להפעלת אוטומציה של DNS
- כדי להשתמש באוטומציה של DNS או בשם DNS של נקודת קצה גלובלית לכתיבה, צריך להפעיל את Cloud DNS API.
- אפשר להפעיל אוטומציה של DNS רק אם מפעילים את Private Service Connect (משתמשים בפרמטר
--enable-private-service-connect). - אפשר להפעיל אוטומציה של DNS רק אם צוין לפחות חיבור אוטומטי אחד של Private Service Connect (משתמשים ב-
--psc-auto-connections=network). - אפשר להפעיל שם DNS של נקודת קצה גלובלית לכתיבה רק במופע של Cloud SQL Enterprise Plus שמופעלת בו אוטומציה של DNS.
הגדרת אוטומציה של DNS
אתם יכולים להפעיל אוטומציה של DNS ושם DNS של נקודת קצה גלובלית לכתיבה כשאתם יוצרים מכונה חדשה, עם Private Service Connect מופעל, כמו שמוצג במאמר יצירת מכונת Cloud SQL.
אפשר גם להפעיל או להשבית אוטומציה של DNS עבור מופעים קיימים. כשמבצעים את הפעולה הזו, Cloud SQL מקצה אוטומטית את רשומות ה-DNS המשויכות ברשתות המתאימות או מנקה אותן.
gcloud
gcloud sql instances patch INSTANCE_NAME \ --enable-psc-auto-dns=DNS_ENABLEMENT \ --enable-psc-write-endpoint-dns=GLOBAL_DNS_ENABLEMENT \
REST
שיטת ה-HTTP וכתובת ה-URL: ייראו כך:
POST https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instancesתוכן בקשת ה-JSON ייראה כך:
{ "name": "INSTANCE_NAME", "project": "PROJECT_ID", "region": "REGION_NAME", "databaseVersion": "DATABASE_VERSION", "kind": "sql#instance", "settings": { "availabilityType": "AVAILABILITY_TYPE", "ipConfiguration": { "ipv4Enabled": false, "pscConfig": { "allowedConsumerProjects": [ "ALLOWED_PROJECTS" ], "pscAutoConnections": [ { "consumerProject":"CONSUMER_PROJECT", "consumerNetwork":"projects/PARENT_PROJECT/global/networks/CONSUMER_NETWORK" } ], "pscEnabled": true, "pscAutoDnsEnabled": DNS_ENABLEMENT, "pscWriteEndpointDnsEnabled": GLOBAL_DNS_ENABLEMENT, } }, "kind": "sql#settings", "pricingPlan": "PER_USE", "replicationType": "SYNCHRONOUS", "tier": "MACHINE_TYPE" } }
מחליפים את הפרטים הבאים:
- DNS_ENABLEMENT:
trueאוfalseבהתאם להחלטה אם להפעיל או להשבית את האוטומציה של DNS. - GLOBAL_DNS_ENABLEMENT:
trueאוfalseבהתאם להגדרה שרוצים להפעיל או להשבית בשם ה-DNS של נקודת קצה גלובלית לכתיבה. אםtrue, אז גםenable-psc-auto-dnsצריך להיותtrue.
הצגת שמות DNS
אפשר למצוא את שם ה-DNS של נקודת הקצה הגלובלית לכתיבה של הפרויקט ואת שם ה-DNS של כל מופע באמצעות הפקודה describe.
gcloud
שם DNS לכל מופע
כדי למצוא את שם ה-DNS של המכונה שנוצר באמצעות אוטומציית DNS, משתמשים בפקודה gcloud sql instances describe באופן הבא:
gcloud sql instances describe INSTANCE_NAME \ --project=PROJECT_ID \ --flatten="dnsNames[]" \ --format="csv[no-heading](dnsNames.dnsScope, dnsNames.recordManager, dnsNames.name)" \ | grep "INSTANCE,CLOUD_SQL_AUTOMATION"
הפלט ייראה כך (כאשר DNS_NAME יהיה שם ה-DNS לכל מופע של המופע):
INSTANCE,CLOUD_SQL_AUTOMATION,DNS_NAME
שם ה-DNS יסתיים בשם האזור של המופע ואחריו .sql-psc-goog, כך:
INSTANCE,CLOUD_SQL_AUTOMATION,d73a167a8c3a.2naantchj3tsc.us-central1.sql-psc.goog.
כדי להחזיר רק את שם ה-DNS ללא קישוט, מוסיפים | cut -d, -f3 לסוף הפקודה.
שם ה-DNS של נקודת הקצה הגלובלית לכתיבה
באופן דומה, אפשר להשתמש בפקודה describe כדי למצוא את שם ה-DNS של נקודת הקצה הגלובלית לכתיבה עבור אשכול השכפול:
gcloud sql instances describe INSTANCE_NAME \ --project=INSTANCE_NAME \ --flatten="dnsNames[]" \ --format="csv[no-heading](dnsNames.dnsScope, dnsNames.recordManager, dnsNames.name)" \ | grep "CLUSTER,CLOUD_SQL_AUTOMATION"
הפלט ייראה כך (כאשר GLOBAL_DNS_NAME יהיה שם ה-DNS של נקודת הקצה הגלובלית לכתיבה עבור אשכול השכפול שלכם):
CLUSTER,CLOUD_SQL_AUTOMATION,GLOBAL_DNS_NAME
שם ה-DNS של נקודת הקצה הגלובלית לכתיבה מסתיים ב-.global.sql-psc-goog, כמו בדוגמה הבאה:
CLUSTER,CLOUD_SQL_AUTOMATION,d73a167a8c3a.2naantchj3tsc.global.sql-psc.goog.
כדי להחזיר רק את שם ה-DNS ללא קישוט, מוסיפים | cut -d, -f3 לסוף הפקודה.
REST
שיטת ה-HTTP וכתובת ה-URL: ייראו כך:
GET https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instancesשם ה-DNS לכל מופע ושם ה-DNS של נקודת הקצה הגלובלית לכתיבה יוחזרו בשדה dnsNames של התגובה, כך:
{ "dnsNames": [ { "connectionType": "PRIVATE_SERVICE_CONNECT", "dnsScope": "INSTANCE", "name": "31f5395197d0.3e0v7ztul56ph.us-central1.sql.goog.", "recordManager": "CUSTOMER" }, { "connectionType": "PRIVATE_SERVICE_CONNECT", "dnsScope": "INSTANCE", "name": "31f5395197d0.3e0v7ztul56ph.us-central1.sql-psc.goog", "recordManager": "CLOUD_SQL_AUTOMATION" }, { "connectionType": "PRIVATE_SERVICE_CONNECT", "dnsScope": "CLUSTER", "name": "3lbvojtu2fo6q.3e0v7ztul56ph.global.sql-psc.goog", "recordManager": "CLOUD_SQL_AUTOMATION" } ], }
אפשר להשתמש בשם ה-DNS של נקודת הקצה הגלובלית לכתיבה או בשם ה-DNS של כל מופע כדי להתחבר למופע. איך מתחברים באמצעות רשומת DNS
שדות סטטוס של אוטומציית DNS
אפשר לקבוע את סטטוס ה-DNS של המופע ושל אשכול השכפול בשני שדות הפלט האלה:
-
instanceAutoDnsStatus: מציג את הסטטוס של DNS לכל מופע. -
writeEndpointAutoDnsStatus: מוצג הסטטוס של ה-DNS של נקודת הקצה הגלובלית לכתיבה.
שני השדות יכולים לקבל את הערכים הבאים:
AUTO_DNS_STATUS_UNSPECIFIEDAUTO_DNS_OKAUTO_DNS_FAILEDAUTO_DNS_UNKNOWN
השדות האלה מופיעים בשדה הפלט pscAutoConnections:
"pscAutoConnections": [ { "consumerNetwork": "projects/my-psc-project/global/networks/psc-dns-net2", "consumerNetworkStatus": "VALID", "consumerProject": "my-psc-project", "instanceAutoDnsStatus": "AUTO_DNS_OK", "ipAddress": "10.0.2.4", "status": "ACTIVE", "writeEndpointAutoDnsStatus": "AUTO_DNS_OK" } ]
פתרון בעיות באוטומציה של DNS
אם Cloud DNS API לא מופעל, אם חסרה מדיניות חיבור של Private Service Connect או אם יש שגיאות בשרת העורפי במהלך יצירת רשומת DNS, יכול להיות שאוטומציית ה-DNS לא תצליח ליצור רשומת DNS לכל מופע או שם DNS של נקודת קצה גלובלית לכתיבה.
אם נתקלתם במצב שבו לא הוקצו הרשאות אוטומטיות ל-DNS בצורה נכונה, תוכלו להשתמש בשני דגלים עם update/patch API או gcloud CLI:
-
--reconcile-psc-networking(boolean): אם המדיניות מוגדרת, Cloud SQL מנסה לשחזר חלקים באוטומציה של DNS שלא פועלים. הדגל הזה לא גורם להשבתה. -
--reconcile-psc-networking-force(boolean): דומה ל-reconcile-psc-networking, אבל אם הערך הזה מוגדר, Cloud SQL מנסה לשחזר לחלוטין את כל האוטומציה של ה-DNS, על חשבון השבתה קצרה בחלקים הקיימים של האוטומציה של ה-DNS ב-PSC שפועלים. במקרים מסוימים, זה יכול לעזור כש-reconcile-psc-networkingלא עוזר.
הקצאת שמות DNS בהתאמה אישית
אתם יכולים להגדיר שמות DNS בהתאמה אישית למופעי Cloud SQL של Private Service Connect. פשוט יוצרים רשומת CNAME עם שם ה-DNS של מופע Private Service Connect כערך שלה. לדוגמה, אם רוצים להגדיר את האפליקציות באמצעות שם ה-DNS של מסד הנתונים sample-db.mycompany.example.com כדי להפנות למופע מסד הנתונים עם שם ה-DNS של Private Service Connect abcdef123456.987654321fedcb.us-central1.sql-psc.goog, צריך קודם להגדיר את המופע עם שם DNS מותאם אישית, ואז ליצור רשומת DNS CNAME באמצעות ספק ה-DNS:
| שם | סוג | TTL | משתלם |
|---|---|---|---|
sample-db.mycompany.example.com |
CNAME | 600 | abcdef123456.987654321fedcb.us-central1.sql-psc.goog |
הגדרה ידנית של DNS
מומלץ להשתמש באוטומציה של DNS, כי הגדרת DNS ידנית היא אפשרות מדור קודם. אפשר גם להגדיר ידנית רשומת DNS לכל מופע. שם DNS מספק דרך עקבית להשתמש בשרת ה-proxy לאימות או במחברי שפות כדי להתחבר מרשתות שונות. תגובת ה-API של חיפוש המופע מספקת שם DNS מוצע שאפשר להשתמש בו כדי ליצור את רשומת ה-DNS באזור DNS פרטי ברשת ה-VPC המתאימה.
gcloud
כדי לראות סיכום מידע על מכונת Cloud SQL, כולל שם ה-DNS של המכונה, משתמשים בפקודה
gcloud sql instances describe:gcloud sql instances describe INSTANCE_NAME \ --project=PROJECT_ID
מחליפים את הפרטים הבאים:
- INSTANCE_NAME: השם של מכונת Cloud SQL
- PROJECT_ID: המזהה או מספר הפרויקט של פרויקט Google Cloud שמכיל את המופע
בתשובה, מוודאים ששם ה-DNS מופיע. השם הזה תואם לתבנית הבאה:
INSTANCE_UID.PROJECT_DNS_LABEL.REGION_NAME.sql.goog.. לדוגמה:1a23b4cd5e67.1a2b345c6d27.us-central1.sql.goog..אם רוצים להשתמש בשם DNS מותאם אישית כדי להתחבר למופע Cloud SQL במקום להשתמש בשם ה-DNS המוגדר מראש שמופיע בקטע הזה, צריך להגדיר את ההגדרה של שם נושא חלופי (SAN) מותאם אישית בזמן יצירת המופע. שם ה-DNS המותאם אישית שמוסיפים להגדרת ה-SAN המותאמת אישית, מתווסף לשדה ה-SAN של אישור השרת של המופע. כך תוכלו להשתמש בשם ה-DNS המותאם אישית עם אימות מאובטח של שם המארח.
מידע נוסף על הגדרת SAN מותאם אישית זמין במאמר בנושא יצירת מופעים.
-
כדי ליצור אזור DNS פרטי, משתמשים בפקודה
gcloud dns managed-zones create. האזור הזה משויך לרשת ה-VPC שמשמשת לחיבור למופע Cloud SQL דרך נקודת הקצה של Private Service Connect.gcloud dns managed-zones create ZONE_NAME \ --project=PROJECT_ID \ --description="DESCRIPTION" \ --dns-name=DNS_NAME \ --networks=NETWORK_NAME \ --visibility=private
מחליפים את הפרטים הבאים:
- ZONE_NAME: השם של תחום ה-DNS
- PROJECT_ID: המזהה או מספר הפרויקט של Google Cloud הפרויקט שמכיל את האזור
- DESCRIPTION: תיאור של האזור (לדוגמה, אזור DNS למופע Cloud SQL)
- DNS_NAME: השם של סיומת ה-DNS של האזור, למשל
REGION_NAME.sql.goog.(כאשר REGION_NAME הוא שם האזור של האזור) - NETWORK_NAME: השם של רשת ה-VPC
אחרי שיוצרים את נקודת הקצה של Private Service Connect, כדי ליצור רשומת DNS באזור, משתמשים בפקודה
gcloud dns record-sets create:gcloud dns record-sets create DNS_RECORD \ --project=PROJECT_ID \ --type=RRSET_TYPE \ --rrdatas=RR_DATA \ --zone=ZONE_NAME
מחליפים את הפרטים הבאים:
- DNS_RECORD: השם של רשומת ה-DNS. הרשומה הזו מוגדרת לשם ה-DNS שאחזרתם ממופע Cloud SQL קודם לכן בתהליך הזה (לדוגמה,
1a23b4cd5e67.1a2b345c6d27.us-central1.sql.goog.). - RRSET_TYPE: סוג רשומת המשאב של קבוצת רשומות ה-DNS.
אם כתובת ה-IP הפנימית שהזמנתם לנקודת הקצה של Private Service Connect היא כתובת IPv4, צריך לציין
Aכערך של הפרמטר הזה. אחרת, אם כתובת ה-IP של נקודת הקצה היא כתובת IPv6, צריך לצייןAAAA. - RR_DATA: כתובת ה-IP שהוקצתה לנקודת הקצה של Private Service Connect (לדוגמה,
198.51.100.5). אפשר גם להזין כמה ערכים, כמוrrdata1 rrdata2 rrdata3(לדוגמה,
10.1.2.3 10.2.3.4 10.3. 4.5).
- DNS_RECORD: השם של רשומת ה-DNS. הרשומה הזו מוגדרת לשם ה-DNS שאחזרתם ממופע Cloud SQL קודם לכן בתהליך הזה (לדוגמה,
REST
- קבלת שם ה-DNS של מכונת Cloud SQL.
- PROJECT_ID: המזהה או מספר הפרויקט של פרויקט Google Cloud שמכיל את המופע
- INSTANCE_NAME: השם של המכונה
- יוצרים אזור DNS פרטי. האזור הזה משויך לרשת ה-VPC שמשמשת לחיבור למופע Cloud SQL דרך נקודת הקצה של Private Service Connect.
- PROJECT_ID: המזהה או מספר הפרויקט של Google Cloud הפרויקט שמכיל את תחום ה-DNS
- ZONE_NAME: השם של האזור
- DESCRIPTION: תיאור של התחום (לדוגמה, תחום DNS למופע Cloud SQL)
- DNS_NAME: השם של סיומת ה-DNS של האזור, למשל
REGION_NAME.sql.goog.(כאשר REGION_NAME הוא שם האזור של האזור) - NETWORK_NAME: השם של רשת ה-VPC
- אחרי יצירת נקודת הקצה של Private Service Connect, יוצרים רשומת DNS באזור.
- PROJECT_ID: המזהה או מספר הפרויקט של Google Cloud הפרויקט שמכיל את תחום ה-DNS.
- ZONE_NAME: שם האזור.
- DNS_RECORD: השם של רשומת ה-DNS. הרשומה הזו מוגדרת לשם ה-DNS שאחזרתם ממופע Cloud SQL קודם לכן בהליך הזה (לדוגמה,
1a23b4cd5e67.1a2b345c6d27.us-central1.sql.goog.). - RRSET_TYPE: סוג רשומת המשאב של קבוצת רשומות ה-DNS. אם כתובת ה-IP הפנימית ששמרתם
עבור נקודת הקצה (endpoint) של Private Service Connect היא IPv4, צריך לציין
Aעבור הפרמטר הזה. אחרת, אם כתובת ה-IP של נקודת הקצה היא IPv6, מצייניםAAAA. - TTL: אורך החיים (TTL) של קבוצת הרשומות בשניות (לדוגמה,
300). - RR_DATA: כתובת ה-IP שהוקצתה לנקודת הקצה של Private Service Connect (לדוגמה,
198.51.100.5). אפשר גם להזין כמה ערכים, כמוrrdata1 rrdata2 rrdata3(לדוגמה,10.1.2.3 10.2.3.4 10.3.4.5).
לפני שמשתמשים בנתוני הבקשה, צריך להחליף את הנתונים הבאים:
ה-method של ה-HTTP וכתובת ה-URL:
GET https://sqladmin.googleapis.com/sql/v1/projects/PROJECT_ID/instances/INSTANCE_NAME
כדי לשלוח את הבקשה צריך להרחיב אחת מהאפשרויות הבאות:
אתם אמורים לקבל תגובת JSON שדומה לזו:
{
...
"dnsName": "INSTANCE_ID.PROJECT_DNS_LABEL.REGION_NAME.sql.goog."
}
בשדה dnsName מוצג שם ה-DNS של מכונת Cloud SQL. שמות DNS תמיד מסתיימים בנקודה (.).
לפני שמשתמשים בנתוני הבקשה, צריך להחליף את הנתונים הבאים:
ה-method של ה-HTTP וכתובת ה-URL:
POST https://dns.googleapis.com/dns/v1/projects/PROJECT_ID/managedZones
תוכן בקשת JSON:
{
"name": "ZONE_NAME",
"description": "DESCRIPTION",
"dnsName": "DNS_NAME",
"visibility": "private",
"privateVisibilityConfig": {
"kind": "dns#managedZonePrivateVisibilityConfig",
"networks": [
{
"kind": "dns#managedZonePrivateVisibilityConfigNetwork",
"networkUrl": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/NETWORK_NAME"
}
]
}
}
כדי לשלוח את הבקשה צריך להרחיב אחת מהאפשרויות הבאות:
אתם אמורים לקבל תגובת JSON שדומה לזו:
{
"name": "ZONE_NAME",
"dnsName": "DNS_NAME",
"description": "DESCRIPTION",
"id": "ID",
"nameServers": [
"ns-gcp-private.googledomains.com."
],
"creationTime": "2024-05-10T17:05:34.607Z",
"visibility": "private",
"privateVisibilityConfig": {
"networks": [
{
"networkUrl": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/NETWORK_NAME",
"kind": "dns#managedZonePrivateVisibilityConfigNetwork"
}
],
"gkeClusters": [],
"kind": "dns#managedZonePrivateVisibilityConfig"
},
"cloudLoggingConfig": {
"kind": "dns#managedZoneCloudLoggingConfig"
},
"kind": "dns#managedZone"
}
לפני שמשתמשים בנתוני הבקשה, צריך להחליף את הנתונים הבאים:
ה-method של ה-HTTP וכתובת ה-URL:
POST https://dns.googleapis.com/dns/v1/projects/PROJECT_ID/managedZones/ZONE_NAME
תוכן בקשת JSON:
{
"deletions": []
"additions": [
{
"name": "DNS_RECORD",
"type": "RRSET_TYPE",
"ttl": TTL,
"rrdatas": [
"RR_DATA"
]
}
]
}
כדי לשלוח את הבקשה צריך להרחיב אחת מהאפשרויות הבאות:
אתם אמורים לקבל תגובת JSON שדומה לזו:
{
"additions": [
{
"name": "DNS_RECORD",
"type": "RRSET_TYPE",
"ttl": TTL,
"rrdatas": [
"RR_DATA"
],
"signatureRrdatas": [],
"kind": "dns#resourceRecordSet"
}
],
"deletions": [],
"startTime": "2024-05-10T17:29:44.375Z",
"id": "CHANGE_ID",
"status": "pending",
"kind": "dns#change"
}