שליטה בתעבורה יוצאת במופע פרטי

בקטע הזה מתוארת הארכיטקטורה ברמה גבוהה להגדרת בקרת יציאה ממופעים פרטיים של 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.

Google Cloud

לפני שמתחילים

הגדרת בקרת תעבורת נתונים יוצאת במהלך פיתוח צינור עיבוד הנתונים

שליטה ביציאה מאפשרת לכם לשלוט או לסנן את מה שיכול לצאת מהרשת שלכם, וזה שימושי בסביבות של 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.

המסוף

  1. נכנסים לדף VM instances.

    לדף VM instances

  2. לוחצים על Create instance.

  3. משתמשים באותו VPC שמוגדר בו קישור בין רשתות שכנות (peering) עם מכונת Cloud Data Fusion פרטית. מידע נוסף על קישור בין רשתות שכנות (peering) של רשת VPC בתרחיש הזה זמין במאמר לפני שמתחילים.

  4. מפעילים העברת IP עבור המכונה באותה רשת שבה נמצאת מכונת Cloud Data Fusion.

  5. בשדה סקריפט לטעינה בזמן ההפעלה, מזינים את הסקריפט הבא:

    #! /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 לא תומך כרגע בסינון של תעבורת נתונים יוצאת.

המאמרים הבאים