בקטע הזה מתוארת הארכיטקטורה ברמה גבוהה להגדרת בקרת יציאה ממופעים פרטיים של Cloud Data Fusion במהלך שלב הפיתוח ושלב ההרצה של הפייפליין.
בתרשים הבא של ארכיטקטורת המערכת מוצג איך מופע פרטי של Cloud Data Fusion מתחבר לאינטרנט הציבורי כשמפתחים צינור עיבוד נתונים:

אתם יכולים לשלוט בחיבורים לאפליקציות SaaS ולשירותי ענן ציבורי של צד שלישי במהלך הפיתוח או ההרצה של פייפליינים, על ידי ניתוב כל תעבורת הנתונים היוצאת דרך פרויקטים של לקוחות. בתהליך הזה נעזרים במקורות המידע הבאים:
מסלול מותאם אישית ברשת VPC: ברשת VPC מותאמת אישית, התנועה מנותבת דרך מסלול מותאם אישית שיובא למכונות וירטואליות של שערים, שמייצאות לרשת VPC של פרויקט דייר באמצעות VPC Peering.
מכונת Proxy וירטואלית: מכונת Proxy וירטואלית מנתבת תעבורת נתונים יוצאת (egress) מ- Google Cloud מפרויקט הדייר של Cloud Data Fusion אל היעד שצוין דרך האינטרנט הציבורי. אתם יוצרים ומנהלים מכונה וירטואלית של שער בפרויקטים של הלקוחות. מומלץ להגדיר אותם בהגדרה של זמינות גבוהה (HA) באמצעות מאזן עומסים פנימי (ILB). אם יש לכם כמה מופעים פרטיים של Cloud Data Fusion שמשתמשים באותה רשת VPC, אתם יכולים לעשות שימוש חוזר באותה מכונה וירטואלית ב-VPC.
לפני שמתחילים
אפשר להתחבר למקור ציבורי ממופע פרטי ב-Cloud Data Fusion בגרסה 6.4 ואילך. כדי להשתמש באחת מהגרסאות האלה, אפשר ליצור מכונת Cloud Data Fusion פרטית חדשה או לשדרג מכונה קיימת.
כשיוצרים חיבור VPC Network Peering עבור המכונה, בוחרים באפשרות Export routes.
הגדרת בקרת תעבורת נתונים יוצאת במהלך פיתוח צינור עיבוד הנתונים
שליטה ביציאה מאפשרת לכם לשלוט או לסנן את מה שיכול לצאת מהרשת שלכם, וזה שימושי בסביבות של VPC Service Controls. אין פרוקסי מועדף ברשת לביצוע המשימה הזו. דוגמאות לשרתי proxy: Squid proxy, HAProxy ו-Envoy.
בדוגמאות במדריך הזה מוסבר איך להגדיר proxy מסוג HTTP לסינון HTTP במכונות וירטואליות שמשתמשות בתמונה של Debian. בדוגמאות נעשה שימוש בשרת proxy של Squid, שהוא אחת הדרכים להגדרת שרת proxy.
יצירת מכונה וירטואלית של שרת proxy
יוצרים מכונה וירטואלית באותו VPC שבו נמצאת מכונת Cloud Data Fusion הפרטית, עם סקריפט לטעינה בזמן ההפעלה הבא והעברת כתובות IP.
הסקריפט הזה מתקין Squid proxy ומגדיר אותו ליירוט תנועת HTTP ולאפשר גישה לדומיינים .squid-cache.org ו-.google.com. אתם יכולים להחליף את הדומיינים האלה בדומיינים שאתם רוצים לקשר למופע של Cloud Data Fusion.
המסוף
נכנסים לדף VM instances.
לוחצים על Create instance.
משתמשים באותו VPC שמוגדר בו קישור בין רשתות שכנות (peering) עם מכונת Cloud Data Fusion פרטית. מידע נוסף על קישור בין רשתות שכנות (peering) של רשת VPC בתרחיש הזה זמין במאמר לפני שמתחילים.
מפעילים העברת IP עבור המכונה באותה רשת שבה נמצאת מכונת Cloud Data Fusion.
בשדה סקריפט לטעינה בזמן ההפעלה, מזינים את הסקריפט הבא:
#! /bin/bash apt-get -y install squid3 cat <<EOF > /etc/squid/conf.d/debian.conf # # Squid configuration settings for Debian # logformat squid %ts.%03tu %6tr %>a %Ss/%03>Hs %<st %rm %ru %ssl::>sni %Sh/%<a %mt logfile_rotate 10 debug_options rotate=10 # configure intercept port http_port 3129 intercept # allow only certain sites acl allowed_domains dstdomain "/etc/squid/allowed_domains.txt" http_access allow allowed_domains # deny all other http requests http_access deny all EOF # Create a file with allowed egress domains # Replace these example domains with the domains that you want to allow # egress from in Data Fusion pipelines cat <<EOF > /etc/squid/allowed_domains.txt .squid-cache.org .google.com EOF /etc/init.d/squid restart iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 3129 echo 1 > /proc/sys/net/ipv4/ip_forward echo net.ipv4.ip_forward=1 > /etc/sysctl.d/11-gce-network-security.conf iptables -t nat -A POSTROUTING -s 0.0.0.0/0 -p tcp --dport 443 -j MASQUERADE
gcloud
export CDF_PROJECT=<cdf-project>
export PROXY_VM=<proxy-vm>
export ZONE=<vm-zone>
export SUBNET=<subnet>
export VPC_NETWORK=<vpc-network>
export COMPUTE_ENGINE_SA=<compute-engine-sa>
gcloud beta compute --project=$CDF_PROJECT instances create $PROXY_VM --zone=$ZONE --machine-type=e2-medium --subnet=$SUBNET --no-address --metadata=startup-script=\#\!\ /bin/bash$'\n'apt-get\ -y\ install\ squid3$'\n'cat\ \<\<EOF\ \>\ /etc/squid/conf.d/debian.conf$'\n'\#$'\n'\#\ Squid\ configuration\ settings\ for\ Debian$'\n'\#$'\n'logformat\ squid\ \%ts.\%03tu\ \%6tr\ \%\>a\ \%Ss/\%03\>Hs\ \%\<st\ \%rm\ \%ru\ \%ssl::\>sni\ \%Sh/\%\<a\ \%mt$'\n'logfile_rotate\ 10$'\n'debug_options\ rotate=10$'\n'$'\n'\#\ configure\ intercept\ port$'\n'http_port\ 3129\ intercept$'\n'$'\n'\#\ allow\ only\ certain\ sites$'\n'acl\ allowed_domains\ dstdomain\ \"/etc/squid/allowed_domains.txt\"$'\n'http_access\ allow\ allowed_domains$'\n'$'\n'\#\ deny\ all\ other\ http\ requests$'\n'http_access\ deny\ all$'\n'EOF$'\n'$'\n'$'\n'\#\ Create\ a\ file\ with\ allowed\ egress\ domains$'\n'\#\ Replace\ these\ example\ domains\ with\ the\ domains\ that\ you\ want\ to\ allow\ $'\n'\#\ egress\ from\ in\ Data\ Fusion\ pipelines$'\n'cat\ \<\<EOF\ \>\ /etc/squid/allowed_domains.txt$'\n'.squid-cache.org$'\n'.google.com$'\n'EOF$'\n'$'\n'/etc/init.d/squid\ restart$'\n'$'\n'iptables\ -t\ nat\ -A\ PREROUTING\ -p\ tcp\ --dport\ 80\ -j\ REDIRECT\ --to-port\ 3129$'\n'echo\ 1\ \>\ /proc/sys/net/ipv4/ip_forward$'\n'echo\ net.ipv4.ip_forward=1\ \>\ /etc/sysctl.d/11-gce-network-security.conf$'\n'iptables\ -t\ nat\ -A\ POSTROUTING\ -s\ 0.0.0.0/0\ -p\ tcp\ --dport\ 443\ -j\ MASQUERADE --can-ip-forward --maintenance-policy=MIGRATE --service-account=$COMPUTE_ENGINE_SA --scopes=https://www.googleapis.com/auth/devstorage.read_only,https://www.googleapis.com/auth/logging.write,https://www.googleapis.com/auth/monitoring.write,https://www.googleapis.com/auth/servicecontrol,https://www.googleapis.com/auth/service.management.readonly,https://www.googleapis.com/auth/trace.append --tags=http-server,https-server --image=debian-10-buster-v20210420 --image-project=debian-cloud --boot-disk-size=10GB --boot-disk-type=pd-balanced --boot-disk-device-name=instance-1 --no-shielded-secure-boot --shielded-vtpm --shielded-integrity-monitoring --reservation-affinity=any
gcloud compute --project=$CDF_PROJECT firewall-rules create egress-allow-http --direction=INGRESS --priority=1000 --network=$VPC_NETWORK --action=ALLOW --rules=tcp:80 --source-ranges=0.0.0.0/0 --target-tags=https-server
gcloud compute --project=$CDF_PROJECT firewall-rules create egress-allow-https --direction=INGRESS --priority=1000 --network=$VPC_NETWORK --action=ALLOW --rules=tcp:443 --source-ranges=0.0.0.0/0 --target-tags=https-server
יצירת מסלול בהתאמה אישית
יוצרים מסלול מותאם אישית כדי להתחבר למופע של מכונה וירטואלית של שער שיצרתם.
המסוף
כדי ליצור מסלול במסוף Google Cloud , אפשר לעיין במאמר בנושא הוספת מסלול סטטי.
כשמגדירים את המסלול, מבצעים את הפעולות הבאות:
- מגדירים את העדיפות לערך שגדול מ-
1001או שווה לו. - משתמשים באותו פרויקט ובאותו VPC כמו במכונת Cloud Data Fusion הפרטית.
- חשוב לוודא שההגדרה של הקישור בין רשתות שכנות ב-VPC מאפשרת ייצוא של נתיבים, כדי שפרויקט הדייר של Cloud Data Fusion יוכל לייבא את הנתיב המותאם אישית הזה דרך הקישור בין רשתות שכנות ב-VPC.
gcloud
כדי ליצור את המסלול ב-CLI של gcloud:
gcloud beta compute routes create $ROUTE --project=$CDF_PROJECT \ --network=$VPC_NETWORK --priority=1001 \ --destination-range=0.0.0.0/0 \ --next-hop-instance=$PROXY_VM \ --next-hop-instance-zone=$ZONE
הגדרת בקרת תעבורת נתונים יוצאת להפעלת צינור עיבוד נתונים
אחרי שתהיה לכם גישה לאינטרנט הציבורי עם שמות מארחים מותרים ב-Preview וב-Wrangler בסביבת העיצוב, תוכלו לפרוס את הצינור. צינורות Cloud Data Fusion שנפרסו מורצים כברירת מחדל באשכולות Managed Service for Apache Spark.
כדי לוודא שכל התנועה באינטרנט הציבורי מאשכול Managed Service for Apache Spark עוברת דרך מכונה וירטואלית אחת או יותר של Proxy, מוסיפים את אזור ה-DNS הפרטי ואת הרשומות. השלב הזה נדרש כי Cloud NAT לא תומך בסינון.
ברשומות ה-DNS, כוללים את כתובת ה-IP של מכונת ה-VM של ה-proxy או של ה-ILB.
פריסת צינור עיבוד הנתונים
אחרי שמאמתים את צינור עיבוד הנתונים בשלב התכנון, פורסים את צינור עיבוד הנתונים. כברירת מחדל, צינורות נתונים שנפרסו פועלים באשכולות של Managed Service for Apache Spark.
כדי לוודא שכל התנועה באינטרנט הציבורי מאשכול Managed Service for Apache Spark עוברת דרך מכונה וירטואלית אחת או יותר של Proxy, מוסיפים מסלול מותאם אישית עם תגי מכונה וירטואלית proxy ועדיפות 1000 לאותו VPC כמו המכונות הווירטואליות של Managed Service for Apache Spark:

צריך לשנות את צינור הנתונים כך שישתמש בתגים של Managed Service for Apache Spark, כי Cloud NAT לא תומך כרגע בסינון של תעבורת נתונים יוצאת.
המאמרים הבאים
- מידע נוסף על רשתות ב-Cloud Data Fusion