In diesem Abschnitt wird die allgemeine Architektur zum Einrichten der Steuerung des ausgehenden Traffics von privaten Cloud Data Fusion-Instanzen während der Entwicklungsphase und der Pipelineausführungsphase beschrieben.
Das folgende Systemarchitekturdiagramm zeigt, wie eine private Cloud Data Fusion-Instanz bei der Entwicklung einer Pipeline eine Verbindung zum öffentlichen Internet herstellt:
Sie können Verbindungen zu SaaS-Anwendungen und öffentlichen Cloud-Diensten von Drittanbietern während der Pipelineentwicklung oder -ausführung steuern. Dazu leiten Sie den gesamten ausgehenden Traffic über Kundenprojekte weiter. Für diesen Prozess werden die folgenden Ressourcen verwendet:
Eine benutzerdefinierte VPC-Netzwerkroute: Ein benutzerdefiniertes VPC-Netzwerk leitet den Traffic über eine importierte benutzerdefinierte Route an Gateway-VMs weiter, die mithilfe von VPC-Peering in die VPC eines Mandantenprojekts exportieren.
Proxy-VM: Eine Proxy-VM leitet ausgehenden Traffic aus Google Cloud vom Cloud Data Fusion-Mandantenprojekt zum angegebenen Ziel über das öffentliche Internet. Sie erstellen und verwalten eine Gateway-VM in Ihren Kundenprojekten. Es wird empfohlen, sie in einem Hochverfügbarkeits-Setup mit einem internen Load-Balancer (ILB) zu konfigurieren. Wenn Sie mehrere private Cloud Data Fusion-Instanzen haben, die dasselbe VPC-Netzwerk verwenden, können Sie dieselbe VM in der VPC wiederverwenden.
Hinweis
Sie können eine Verbindung zu einer öffentlichen Quelle von einer privaten Instanz in Cloud Data Fusion ab Version 6.4 herstellen. Wenn Sie eine dieser Versionen verwenden möchten, können Sie eine neue private Cloud Data Fusion-Instanz erstellen oder eine vorhandene Instanz aktualisieren.
Wenn Sie für Ihre Instanz eine VPC-Netzwerk-Peering-Verbindung erstellen, wählen Sie Routen exportieren aus.
Steuerung des ausgehenden Traffics während der Pipeline-Entwicklung einrichten
Mit der Steuerung ausgehenden Traffics können Sie steuern oder filtern, was aus dem Netzwerk herausgehen kann. Dies ist in VPC Service Controls-Umgebungen nützlich. Es gibt keinen bevorzugten Netzwerkproxy zum Ausführen dieser Aufgabe. Beispiele für Proxys sind Squid-Proxy, HAProxy und Envoy.
In den Beispielen in dieser Anleitung wird beschrieben, wie Sie den HTTP-Proxy für die HTTP-Filterung auf VM-Instanzen einrichten, die ein Debian-Image verwenden. In den Beispielen wird ein Squid-Proxyserver, der eine der Methoden zum Einrichten eines Proxyservers.
Proxy-VM erstellen
Erstellen Sie mit dem folgenden Startskript und der folgenden IP-Weiterleitung eine VM in derselben VPC wie Ihre private Cloud Data Fusion-Instanz.
Dieses Skript installiert den Squid-Proxy und konfiguriert ihn so, dass er HTTP-Traffic abfängt und die Domains .squid-cache.org
und .google.com
zulässt. Sie können diese Domains durch die Domains ersetzen, die Sie mit Ihrer Cloud Data Fusion-Instanz verbinden möchten.
Console
Rufen Sie die Seite VM-Instanzen auf.
Klicken Sie auf Instanz erstellen.
Verwenden Sie dieselbe VPC, für die das Netzwerk-Peering mit der privaten Cloud Data Fusion-Instanz eingerichtet ist. Weitere Informationen zu VPC-Netzwerk-Peering, siehe Hinweise
Aktivieren Sie die IP-Weiterleitung für die Instanz im selben Netzwerk wie die Cloud Data Fusion-Instanz.
Geben Sie im Feld Startskript das folgende Skript ein:
#! /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
Benutzerdefinierte Route erstellen
Erstellen Sie eine benutzerdefinierte Route, um eine Verbindung zur von Ihnen erstellten Gateway-VM-Instanz herzustellen.
Console
Informationen zum Erstellen einer Route in der Google Cloud Console finden Sie unter Statische Route hinzufügen.
Gehen Sie beim Konfigurieren der Route so vor:
- Legen Sie die Priorität auf einen Wert größer oder gleich
1001
fest. - Verwenden Sie dasselbe Projekt und dieselbe VPC wie die private Cloud Data Fusion-Instanz.
- Achten Sie darauf, dass Ihre VPC-Netzwerk-Peering-Konfiguration das Exportieren von Routen zulässt, damit die VPC des Cloud Data Fusion-Mandantenprojekts diese benutzerdefinierte Route über VPC-Netzwerk-Peering importiert.
gcloud
So erstellen Sie eine Route in der 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
Steuerung des ausgehenden Traffics für die Pipeline-Ausführung einrichten
Sobald Sie mit den zulässigen Hostnamen in Sehen Sie sich die Vorschau und die Wrangler-Codierung in Ihrer Designumgebung an und stellen Sie die Pipeline bereit. Bereitgestellte Cloud Data Fusion-Pipelines werden standardmäßig auf Dataproc-Clustern ausgeführt.
Damit der gesamte öffentliche Internet-Traffic vom Dataproc-Cluster über eine oder mehrere Proxy-VMs geleitet wird, fügen Sie die private DNS-Zone und die Einträge hinzu. Dieser Schritt ist erforderlich, da Cloud NAT unterstützen Filterung.
Geben Sie in den DNS-Einträgen die IP-Adresse der Proxy-VM oder des internen Load-Balancers an.
Pipeline bereitstellen
Nachdem Sie die Pipeline in der Designphase verifiziert haben, Ihre Pipeline bereitstellen. Bereitgestellte Pipelines werden standardmäßig auf Dataproc-Clustern ausgeführt.
Damit der gesamte öffentliche Internet-Traffic vom Dataproc-Cluster über eine oder mehrere Proxy-VMs geleitet wird, fügen Sie derselben VPC wie die Dataproc-VMs eine benutzerdefinierte Route mit den Instanz-Tags proxy
und der Priorität 1000
hinzu:
Pipeline so ändern, dass Dataproc-Tags verwendet werden, weil Cloud NAT unterstützt derzeit keine Filterung des ausgehenden Traffics.
Nächste Schritte
- Weitere Informationen über Netzwerke in Cloud Data Fusion