在云数据流中指定网络的问题

Problem in specifying the network in cloud dataflow

我没有配置项目,每当我 运行 我的工作时都会收到此错误 网络默认没有为内部连接打开 TCP 端口 1-65535 的规则与其他虚拟机。仅适用目标标签 'dataflow' 或空目标标签集的规则。如果您不指定这样的规则,则任何具有多个 worker 来随机播放数据的管道都将挂起。原因:没有与您的网络关联的防火墙规则。'

google_cloud_options = p_options.view_as(GoogleCloudOptions)
google_cloud_options.region = 'europe-west1'
google_cloud_options.project = 'my-project'
google_cloud_options.job_name = 'rim'
google_cloud_options.staging_location = 'gs://my-bucket/binaries'
google_cloud_options.temp_location = 'gs://my-bucket/temp'
p_options.view_as(StandardOptions).runner = 'DataflowRunner'
p_options.view_as(SetupOptions).save_main_session = True
p_options.view_as(StandardOptions).streaming = True
p_options.view_as(WorkerOptions).subnetwork = 'regions/europe-west1/subnetworks/test'
p = beam.Pipeline(options=p_options)

我试图在命令行中指定 --network 'test' 因为它不是默认配置

您的默认防火墙规则似乎已被修改,dataflow 检测到了这一点并阻止了您的作业启动。你能确认你的防火墙规则没有在你的项目中被修改吗?。请看一下documentation here。您还将在此处找到恢复防火墙规则的命令:

gcloud compute firewall-rules create [FIREWALL_RULE_NAME] \
    --network [NETWORK] \
    --action allow \
    --direction ingress \
    --target-tags dataflow \
    --source-tags dataflow \
    --priority 0 \
    --rules tcp:1-65535

为防火墙选择一个名称,并提供一个网络名称。然后在启动数据流作业时使用 --network 传入网络名称。如果您有一个名为 'default' 的网络,dataflow 将尝试自动使用它,因此您无需传入 --network。如果您删除了该网络,您可能希望重新创建它。

截至目前,直到 Apache Beam 版本 2.19.0。数据流没有为其虚拟机设置网络标记的规定。 相反,在创建防火墙规则时,我们应该为数据流添加一个标签。

gcloud compute firewall-rules create FIREWALL_RULE_NAME \
    --network NETWORK \
    --action allow \
    --direction DIRECTION \
    --target-tags dataflow \
    --source-tags dataflow \
    --priority 0 \
    --rules tcp:12345-12346

查看此 link 了解更多详情 https://cloud.google.com/dataflow/docs/guides/routes-firewall