Mengontrol traffic keluar di instance pribadi

Bagian ini menjelaskan arsitektur tingkat tinggi untuk menetapkan kontrol keluar dari instance Cloud Data Fusion pribadi selama fase pengembangan dan fase eksekusi pipeline.

Diagram arsitektur sistem berikut menunjukkan cara instance Cloud Data Fusion pribadi terhubung dengan internet publik saat Anda mengembangkan pipeline:

Diagram arsitektur instance pribadi

Anda dapat mengontrol koneksi ke aplikasi SaaS dan layanan cloud publik pihak ketiga selama pengembangan atau eksekusi pipeline, dengan merutekan semua traffic keluar melalui project pelanggan. Proses ini menggunakan resource berikut:

  • Rute jaringan VPC kustom: Jaringan VPC kustom merutekan traffic melalui rute kustom yang diimpor ke VM gateway, yang diekspor ke VPC project tenant menggunakan peering VPC.

  • VM Proxy: VM Proxy merutekan traffic keluar dari Google Cloud dari project tenant Cloud Data Fusion ke tujuan yang ditentukan melalui internet publik. Anda membuat dan mengelola VM gateway di project pelanggan Anda. Sebaiknya Anda mengonfigurasinya dalam penyiapan Ketersediaan Tinggi (HA) menggunakan Load Balancer Internal (ILB). Jika memiliki beberapa instance Cloud Data Fusion pribadi yang menggunakan jaringan VPC yang sama, Anda dapat menggunakan kembali VM yang sama dalam VPC.

Sebelum memulai

Menyiapkan kontrol keluar selama pengembangan pipeline

Kontrol egress memungkinkan Anda mengontrol atau memfilter apa yang dapat keluar dari jaringan Anda, yang berguna di lingkungan Kontrol Layanan VPC. Tidak ada proxy jaringan pilihan untuk melakukan tugas ini. Contoh proxy meliputi proxy Squid, HAProxy, dan Envoy.

Contoh dalam panduan ini menjelaskan cara menyiapkan proxy HTTP untuk pemfilteran HTTP pada instance VM yang menggunakan image Debian. Contoh ini menggunakan server proxy Squid, yang merupakan salah satu cara untuk menyiapkan server proxy.

Membuat VM proxy

Buat VM di VPC yang sama dengan instance Cloud Data Fusion pribadi Anda dengan skrip startup dan penerusan IP berikut.

Skrip ini menginstal proxy Squid, dan mengonfigurasinya untuk mencegat traffic HTTP dan mengizinkan domain .squid-cache.org dan .google.com. Anda dapat mengganti domain ini dengan domain yang ingin Anda hubungkan dengan instance Cloud Data Fusion Anda.

Konsol

  1. Buka halaman VM instances.

    Buka halaman Instance VM

  2. Klik Create instance.

  3. Gunakan VPC yang sama yang telah menyiapkan peering jaringan dengan instance Cloud Data Fusion pribadi. Untuk mengetahui informasi selengkapnya tentang peering jaringan VPC dalam skenario ini, lihat Sebelum memulai.

  4. Aktifkan penerusan IP untuk instance dalam jaringan yang sama dengan instance Cloud Data Fusion.

  5. Di kolom Startup script, masukkan skrip berikut:

    #! /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

Membuat rute kustom

Buat rute kustom untuk terhubung ke instance VM gateway yang Anda buat.

Konsol

Untuk membuat rute di konsol Google Cloud , lihat Menambahkan rute statis.

Saat Anda mengonfigurasi rute, lakukan hal berikut:

  • Tetapkan Priority ke nilai yang lebih besar dari atau sama dengan 1001.
  • Gunakan project dan VPC yang sama dengan instance Cloud Data Fusion pribadi.
  • Pastikan konfigurasi peering jaringan VPC Anda mengizinkan ekspor rute, sehingga VPC project tenant Cloud Data Fusion mengimpor rute kustom ini melalui peering jaringan VPC.

gcloud

Untuk membuat rute di gcloud CLI:

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

Menyiapkan kontrol keluar untuk eksekusi pipeline

Setelah Anda dapat mengakses internet publik dengan nama host yang diizinkan di Pratinjau dan Wrangler di lingkungan desain, deploy pipeline Anda. Pipeline Cloud Data Fusion yang di-deploy berjalan di cluster Managed Service untuk Apache Spark secara default.

Untuk memastikan bahwa semua traffic internet publik dari cluster Managed Service untuk Apache Spark melewati satu atau beberapa VM Proxy, tambahkan zona dan catatan DNS pribadi. Langkah ini diperlukan karena Cloud NAT tidak mendukung pemfilteran.

Dalam data DNS, sertakan alamat IP VM atau ILB proxy.

Men-deploy pipeline

Setelah memverifikasi pipeline dalam fase desain, deploy pipeline Anda. Pipeline yang di-deploy berjalan di cluster Managed Service untuk Apache Spark secara default.

Untuk memastikan bahwa semua traffic internet publik dari cluster Managed Service untuk Apache Spark melewati satu atau beberapa VM Proxy, tambahkan rute kustom dengan tag instance proxy dan prioritas 1000 ke VPC yang sama dengan VM Managed Service untuk Apache Spark:

Buat rute kustom

Ubah pipeline Anda untuk menggunakan tag Managed Service untuk Apache Spark karena Cloud NAT saat ini tidak mendukung pemfilteran keluar apa pun.

Langkah berikutnya