2017-09-08 14 views
3

Apache Beam 2.1.0增加了对私有子网上的Dataflow运行器提交作业的支持,并且没有公共IP,我们需要这些IP来满足我们的防火墙规则。我计划使用鱿鱼代理来访问apt-get,pip等来安装python依赖项;一个代理实例已经在运行,我们在我们的setup.py脚本中设置代理。如何在私有子网上运行Dataflow python?

python $DIR/submit.py \ 
     --runner DataflowRunner \ 
     --no_use_public_ips \ 
     --subnetwork regions/us-central1/subnetworks/$PRIVATESUBNET \ 
     --staging_location $BUCKET/staging \ 
     --temp_location $BUCKET/temp \ 
     --project $PROJECT \ 
     --setup_file $DIR/setup.py \ 
     --job_name $JOB_NAME 

当我尝试通过python API运行时,我在启动代理之前在worker-startup期间出错。它看起来对我来说,每个工人首先尝试安装数据流SDK:

,它试图更新requests和失败时连接到pip

enter image description here

的无我的代码已经在这个时候执行了,所以我在设置代理之前无法看到避免这个错误的方法。有没有办法启动私有子网上的数据流python工作?

回答

3

我设法解决这个与NAT网关,而不是代理。 special configurations下与指令一起关注 - 我不得不编辑的步骤之一,通过网关自动将数据流工人实例:

gcloud compute routes create no-ip-internet-route --network my-network \ 
    --destination-range 0.0.0.0/0 \ 
    --next-hop-instance nat-gateway \ 
    --next-hop-instance-zone us-central1-a \ 
    --tags dataflow --priority 800 

我使用的标签dataflow而不是no-ip,这是所有数据流的网络标签工人。

在这种情况下,NAT网关似乎比代理更容易解决问题,因为它将路由流量而不必配置工作人员。