如何通过防火墙连接数据流作业?如何使用可预测的 IP 地址连接到 Kafka 或 RDBMS?

问题描述 投票:0回答:1

我正在尝试运行需要连接到 Kafka 集群的数据流作业。出于安全原因,Kafka 集群需要一个 IP 地址白名单,因此我需要确保 Dataflow 作业始终从相同的 IP 地址连接。

我怎样才能做到这一点?是否可以为 Dataflow 作业指定一个可预测的 IP 地址?如果不是,有哪些替代解决方案可以确保作业始终从防火墙已知的 IP 地址/“白名单”进行连接?

google-cloud-platform apache-kafka google-cloud-dataflow
1个回答
0
投票

要“强制”Dataflow 工作人员使用可预测的 IP 地址,您需要设置多个 Google Cloud 资源:

  • VPC 网络
  • 特定区域中的子网
  • 可选:来自子网的专用 Google 访问权限 - 这允许网络中的 VM 和工作人员访问 Google Cloud 服务。
  • 一个云路由器,用于管理到 VPC 网络的数据路由
  • 将作为网关的单个外部 IP 地址 - 如果您想拥有多个网关 IP 地址,您可以创建其中的多个。
  • NAT 配置分配 VPC 网络的所有子网使用上述 IP 地址作为网关

最后,当您启动 Dataflow 作业时,您需要在您选择的子网中启动它,并禁止使用外部 IP 地址。

在实践中,这看起来像这样:

设置网络配置

首先在特定区域创建网络和子网:

gcloud compute networks create $NETWORK_NAME \
    --subnet-mode custom

gcloud compute networks subnets create $SUBNETWORK_NAME \
   --network $NETWORK_NAME \
   --region $REGION \
   --range 192.168.1.0/28   # This range can be changed for a larger address space

# Also enable private Google Access:
#  https://cloud.google.com/vpc/docs/configure-private-google-access#gcloud
gcloud compute networks subnets update $SUBNETWORK_NAME \
    --region=$REGION \
    --enable-private-ip-google-access

现在创建路由器和路由器的NAT规则:

gcloud compute routers create $ROUTER_NAME \
    --network $NETWORK_NAME \
    --region $REGION

## Also create a static IP address for this network
gcloud compute addresses create $ADDRESS_NAME \
  --region=$REGION

gcloud compute routers nats create $ROUTER_CONFIG_NAME \
    --router-region $REGION \
    --router $ROUTER_NAME \
    --nat-all-subnet-ip-ranges \
    --nat-external-ip-pool=$ADDRESS_NAME

这就是您需要的所有网络设置。现在您可以启动您的 Dataflow 作业了。

启动数据流作业

启动数据流作业时,需要传递

subnetwork
参数禁用公共IP地址。

在 Python 中:

python sample_pipeline.py \
  --runner=DataflowRunner \
  --project=$PROJECT \
  --region=$REGION \
  --subnetwork=regions/$REGION/subnetworks/$SUBNETWORK_NAME \
  --no_use_public_ips

在 Java 中:

mvn compile exec:java -Dexec.mainClass=my.main.pipeline.Klass \
    -Dexec.args="--runner=DataflowRunner \
                 --project=$PROJECT \
                 --region=$REGION \
                 --subnetwork=regions/$REGION/subnetworks/$SUBNETWORK_NAME \
                 --usePublicIps=false" \
    -Pdataflow-runner
© www.soinside.com 2019 - 2024. All rights reserved.