קישור בין רשתות שכנות (peering) של ענן וירטואלי פרטי (VPC) מאפשר להעביר עדכונים של תיעוד שינויים בנתונים (CDC) ממסד נתונים של MongoDB Atlas ל-Datastream דרך רשת פרטית. מכיוון שקישור VPC הוא לא טרנזיטיבי, אתם מנתבים את התנועה דרך מכונה וירטואלית (VM) של תרגום כתובת רשת (NAT) ב-Compute Engine עם כללי חומת אש. בנוסף, אתם יוצרים משתמש ב-MongoDB, מוסיפים את כתובת ה-IP של ה-VM של ה-NAT לרשימת ההיתרים של MongoDB Atlas ויוצרים פרופיל חיבור. ההגדרה הזו לא מספקת זמינות גבוהה. אם צומת MongoDB נכשל בבדיקה של פרופיל החיבור, צריך להריץ באופן ידני את הסקריפט לטעינה בזמן ההפעלה ב-NAT VM.
הגדרת משתמש במסד נתונים של MongoDB
כדי להשתמש ב-Datastream עם מכונה של MongoDB Atlas, קודם צריך ליצור משתמש במסד הנתונים ולתת לו הרשאות גישה:
- בלוח הבקרה של MongoDB Atlas, בקטע Security לוחצים על Database access.
- לוחצים על New database user ובוחרים את שיטת האימות באמצעות סיסמה למשתמש.
- מזינים את שם המשתמש והסיסמה של המשתמש ב-Datastream.
- בקטע Database user privileges, בוחרים באפשרות Grant specific user privileges.
- בקטע הרשאות ספציפיות, מוסיפים את התפקיד הבא:
readAnyDatabase
- לוחצים על הוספת משתמש.
הגדרת רשת הענן הווירטואלי הפרטי (VPC)
מזהים את רשת הענן הווירטואלי הפרטי (VPC) בפרויקט ב- Google Cloud כדי ליצור חיבור בין Datastream ל-MongoDB Atlas. ההנחה בדף הזה היא שאתם משתמשים ב-VPC שמוגדר כברירת מחדל ובתת-הרשת שלו, למשל תת-הרשת שמוגדרת כברירת מחדל באזור us-central1.
- מוודאים שטווח כתובות ה-IP של הרשת שזיהיתם לא חופף לטווח כתובות ה-IP של הרשתות של Datastream או MongoDB Atlas.
- יוצרים הגדרת חיבור מבודד כדי לקשר בין Datastream לבין רשת הענן הווירטואלי הפרטי (VPC):
- חשוב לוודא שבוחרים באפשרות VPC peering בתפריט הנפתח Private connectivity method.
- בוחרים את רשת ה-VPC של
default. - מציינים טווח של כתובות IP שלא נמצאות בשימוש, למשל
10.0.0.0/29, כדי ש-Datastream יוכל להשתמש בו. - שימו לב לטווח כתובות ה-IP שהוקצה לכלל של חומת האש לתעבורת נתונים נכנסת.
- מגדירים חיבור בין רשתות שכנות ב-MongoDB Atlas כדי לקשר בין רשת הענן הווירטואלי הפרטי (VPC) לרשת MongoDB Atlas. למידע נוסף, קראו את המאמר הגדרה של חיבור בין רשתות שכנות (peering) במרכז העזרה של MongoDB:
- מציינים את Google Cloud מזהה הפרויקט ואת שם ברירת המחדל של ה-VPC ב-MongoDB Atlas.
- שימו לב למזהה הפרויקט ולשם ה-VPC שקיבלתם מ-MongoDB Atlas כדי להשלים את הקישור בצד של Google Cloud .
- אחרי שיוצרים את החיבור, בפרויקט MongoDB Atlas עוברים לכרטיסייה Network Access > VPC Peering ורושמים את בלוק ה-CIDR (ניתוב בין-דומיינים ללא מחלקות) של כלל חומת האש לתעבורת נתונים יוצאת.
יצירת מכונה וירטואלית של NAT
נכנסים לדף VM instances במסוף Google Cloud .
לוחצים על Create instance.
בשדה Name, מזינים שם למכונה הווירטואלית, לדוגמה
mongo-nat-gateway.בשדה Region, בוחרים אזור בתוך ברירת המחדל של ה-VPC, לדוגמה
us-central1.בתפריט הניווט, לוחצים על Networking.
בשדה Network tags מוסיפים תג, למשל
mongo-nat-vm. התג הזה משמש את כללי חומת האש.בקטע IP forwarding, מסמנים את התיבה Enable.
בקטע Network interfaces, בוחרים את ה-VPC שמוגדר כברירת מחדל ואת רשת המשנה שלו, לדוגמה
defaultב-us-central1.בתפריט הניווט, לוחצים על מתקדם.
בקטע Automation, מדביקים את הסקריפט הבא בשדה סקריפט לטעינה בזמן ההפעלה. מחליפים את PRIVATE_SRV_RECORD ברשומת ה-SRV הפרטית של אשכול MongoDB Atlas, לדוגמה
my-cluster-pri.abcde.mongodb.net.#!/bin/bash # --- Startup script for MongoDB Atlas NAT gateway --- # This script has two main functions: # 1. Resolves the IP address of a MongoDB Atlas node from its SRV record. # 2. Configures iptables to forward traffic to the resolved MongoDB IP. # -------------------------------------------------------------------------- # --- Part 1: Resolve MongoDB node IP address --- # # EDIT THIS LINE to match your Mongo Atlas private SRV record # export SRV_RECORD=PRIVATE_SRV_RECORD echo "Resolving SRV record for: $SRV_RECORD" # Function to install DNS utilities if needed install_dns_tools() { echo "'dig' not found. Attempting to install DNS utilities..." if command -v apt-get &> /dev/null; then # Wait for any existing apt processes to finish before trying to install packages. # This is common on VM startup where the system might be running automatic updates. echo "Checking for and waiting on existing apt-get processes..." while fuser /var/lib/apt/lists/lock /var/lib/dpkg/lock /var/lib/dpkg/lock-frontend >/dev/null 2>&1; do echo "Another apt process is running. Waiting 10 seconds..." sleep 10 done echo "Apt lock is free. Proceeding with installation." apt-get update && apt-get install -y dnsutils else echo "Error: Could not find apt-get to install DNS utilities." exit 1 fi # Verify that dig is now available if ! command -v dig &> /dev/null; then echo "Error: Failed to install DNS utilities." exit 1 fi } # Check if 'dig' is installed. If not, install it. if ! command -v dig &> /dev/null; then install_dns_tools fi echo "Using 'dig' for DNS resolution." # The `+short` option provides a concise output. # We use `awk` to grab the 4th column (the hostname) and `head` to get the first one. NODE_HOSTNAME=$(dig +short SRV "_mongodb._tcp.${SRV_RECORD}" | awk '{print $4}' | head -n 1) if [ -n "$NODE_HOSTNAME" ]; then NODE_IP=$(dig +short A "$NODE_HOSTNAME") fi # Check if the SRV lookup was successful and we got a hostname. if [ -z "$NODE_HOSTNAME" ]; then echo "Error: Could not resolve SRV record. Check the hostname and your network connection." exit 1 fi echo "Found node hostname: $NODE_HOSTNAME" # Check if the A record lookup was successful. if [ -z "$NODE_IP" ]; then echo "Error: Could not resolve the IP address for node: $NODE_HOSTNAME" exit 1 fi # 3. Print the final result of the lookup. echo "Successfully resolved IP address of a node: $NODE_IP" # --- Part 2: Configure iptables for NAT --- # Substitute the resolved IP address into the DB_ADDR variable. export DB_ADDR=$NODE_IP export DB_PORT=27017 # Enable the VM to receive packets whose destinations do # not match any running process local to the VM echo 1 > /proc/sys/net/ipv4/ip_forward # Ask the Metadata server for the IP address of the VM nic0 # network interface: md_url_prefix="http://169.254.169.254/computeMetadata/v1/instance" vm_nic_ip="$(curl -H "Metadata-Flavor: Google" ${md_url_prefix}/network-interfaces/0/ip)" # Clear any existing iptables NAT table entries (all chains): iptables -t nat -F # Create a NAT table entry in the prerouting chain, matching # any packets with destination database port, changing the destination # IP address of the packet to the MongoDB instance IP address: iptables -t nat -A PREROUTING \ -p tcp --dport $DB_PORT \ -j DNAT \ --to-destination $DB_ADDR # Create a NAT table entry in the postrouting chain, matching # any packets with destination database port, changing the source IP # address of the packet to the NAT VM's primary internal IPv4 address: iptables -t nat -A POSTROUTING \ -p tcp --dport $DB_PORT \ -j SNAT \ --to-source $vm_nic_ip # Save iptables configuration: iptables-save echo "Startup script completed successfully. iptables rules are configured and saved."
לוחצים על Create כדי להפעיל את המכונה הווירטואלית.
אחרי שהמכונה הווירטואלית פועלת, שימו לב לכתובת ה-IP הפנימית שלה, לדוגמה
10.128.0.2.
יצירת כללים לחומת האש לתעבורת נתונים נכנסת ויוצאת
אתם צריכים ליצור שני כללים של חומת אש ברשת ה-VPC.
יוצרים כלל חומת אש לתעבורת נתונים נכנסת (ingress) עם המאפיינים הבאים:
- שם: INGRESS_RULE_NAME
- כיוון: כניסה (ingress)
- פעולה: אישור
- פרמטר יעד: תג היעד
mongo-nat-vm - פרמטר המקור: טווח כתובות ה-IP שמשמש את הגדרת החיבור המבודד של Datastream, לדוגמה
10.0.0.0/29 - פרוטוקול: TCP
- יציאה:
27017
יוצרים כלל חומת אש לתעבורת נתונים יוצאת עם המאפיינים הבאים:
- שם: EGRESS_RULE_NAME
- כיוון: תעבורת נתונים יוצאת (egress)
- פעולה: אישור
- פרמטר יעד: תג היעד
mongo-nat-vm - Destination parameter: בלוק ה-CIDR של MongoDB Atlas, לדוגמה
192.168.240.0/21 - פרוטוקול: TCP
- יציאה:
27017
הגדרת רשימות היתרים של כתובות IP ב-MongoDB Atlas
מאשרים את כתובת ה-IP הפנימית של ה-VM של ה-NAT בהגדרות האבטחה של MongoDB Atlas:
- נכנסים לחשבון MongoDB Atlas.
- בתפריט הניווט, לוחצים על Security ואז על Network access.
- לוחצים על הוספת כתובת IP.
- בשדה Access list entry, מזינים את כתובת ה-IP הפנימית של המכונה הווירטואלית של ה-NAT שיצרתם ברשת ה-VPC.
- לוחצים על אישור וממתינים עד שהסטטוס ישתנה לפעיל.
יצירת פרופיל החיבור
יוצרים פרופיל חיבור ב-Datastream למסד הנתונים.
נכנסים לדף Connection profiles במסוף Google Cloud .
לוחצים על Create profile ובוחרים באפשרות MongoDB.
בשדה Hostname, מזינים את כתובת ה-IP הפנימית של המכונה הווירטואלית של NAT שיצרתם ברשת ה-VPC.
בשדה יציאה, מזינים
27017.מזינים את שם המשתמש והסיסמה של המשתמש במסד הנתונים.
מוסיפים את התוויות
tlsו-tls_allow_invalid_hostnamesומגדירים את הערכים שלהן ל-true. למידע נוסף על הגדרת תוויות, ראו יצירת פרופיל חיבור למסד נתונים של MongoDB.בוחרים באפשרות Private connectivity בתור שיטת הקישוריות.
בוחרים את הגדרת החיבור המבודד שיצרתם.
לוחצים על Create כדי לשמור את פרופיל החיבור.
מריצים בדיקה כדי לוודא את החיבור למסד הנתונים.