如何在私有子网上运行数据流python?
Apache Beam 2.1.0增加了对在私有子网上的Dataflow runner上提交作业的支持,并且没有公共IP,这是我们需要满足防火墙规则的。我计划使用squid代理访问如何在私有子网上运行数据流python?,python,google-cloud-dataflow,apache-beam,Python,Google Cloud Dataflow,Apache Beam,Apache Beam 2.1.0增加了对在私有子网上的Dataflow runner上提交作业的支持,并且没有公共IP,这是我们需要满足防火墙规则的。我计划使用squid代理访问apt get,pip,等等来安装python依赖项;代理实例已经在运行,我们在setup.py脚本中设置代理 python $DIR/submit.py \ --runner DataflowRunner \ --no_use_public_ips \ --subnetwor
apt get
,pip
,等等来安装python依赖项;代理实例已经在运行,我们在setup.py脚本中设置代理
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
当我尝试通过pythonapi运行时,我在worker启动期间出错,然后才有机会启用代理。在我看来,每个工作人员都会首先尝试安装dataflow sdk:
在此期间,它尝试更新请求
,但未能连接到pip
:
我的代码目前还没有执行,因此在设置代理之前,我无法找到避免此错误的方法。有没有办法在私有子网上启动dataflow python workers?我用NAT网关而不是代理解决了这个问题。按照-下的说明,我必须编辑以下步骤之一,以便通过网关自动路由Dataflow worker实例:
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网关似乎比代理更容易解决,因为它将路由流量,而无需配置工作者。现在仍然可以使用云NAT来完成此操作,如下所示: (
$REGION\u ID
是任何GCP区域,例如us-central1
)
如果您需要将静态IP地址分配给云NAT(也许,在防火墙规则中将NAT IP地址列入白名单),您也可以这样做:
gcloud compute addresses create nat-ip-address --network=$NETWORK_NAME
gcloud compute routers nats create nat-config \
--router=nat-router \
--nat-custom-subnet-ip-ranges=$SUBNET \
--nat-external-ip-pool=nat-ip-address # from above
--region=$REGION_ID
资源:
gcloud compute addresses create nat-ip-address --network=$NETWORK_NAME
gcloud compute routers nats create nat-config \
--router=nat-router \
--nat-custom-subnet-ip-ranges=$SUBNET \
--nat-external-ip-pool=nat-ip-address # from above
--region=$REGION_ID