为作业指定网络

本文档介绍如何为运行作业的虚拟机指定网络。

您可以通过指定具有所需访问权限的网络来控制运行作业的虚拟机的连接。例如,您可以指定一个网络,以允许作业访问所需的资源,或限制访问以提高安全性。或者,如果您没有任何网络要求,并且不想为作业配置网络,请跳过指定网络以使用默认网络配置。

如需详细了解网络概念以及何时配置网络,请参阅批量网络概览

准备工作

创建在特定网络上运行的作业

在创建作业时为其指定网络。 具体而言,您需要指定 VPC 网络和要运行此作业的子网。

如果您希望在创建此作业时使用虚拟机实例模板,则必须在虚拟机实例模板中指定网络。否则,请按照以下步骤使用 gcloud CLI 或 Batch API 为作业指定网络。

gcloud

如需使用 gcloud CLI 创建在特定网络上运行的作业,请选择以下选项之一:

使用 gcloud 标志为作业指定网络

如需创建作业并使用 gcloud 标志为作业指定网络,请完成以下步骤:

  1. 创建一个 JSON 文件,用于指定作业的配置详情。

    例如,如需创建基本脚本作业,请创建一个包含以下内容的 JSON 文件。

    {
      "taskGroups": [
        {
          "taskSpec": {
            "runnables": [
              {
                "script": {
                  "text": "echo Hello world! This is task ${BATCH_TASK_INDEX}. This job has a total of ${BATCH_TASK_COUNT} tasks."
                }
              }
            ]
          },
          "taskCount": 3
        }
      ],
      "logsPolicy": {
        "destination": "CLOUD_LOGGING"
      }
    }
    
  2. 使用 gcloud batch jobs submit 命令创建作业。 如需为作业指定网络,请添加 --network--subnetwork 标志。

    gcloud batch jobs submit JOB_NAME \
        --location LOCATION \
        --config JSON_CONFIGURATION_FILE \
        --network projects/HOST_PROJECT_ID/global/networks/NETWORK \
        --subnetwork projects/HOST_PROJECT_ID/regions/REGION/subnetworks/SUBNET
    

    替换以下内容:

    • JOB_NAME:此作业的名称。
    • LOCATION:此作业的位置
    • JSON_CONFIGURATION_FILE:包含作业配置详细信息的 JSON 文件的路径。
    • HOST_PROJECT_ID:您指定的网络所属项目的项目 ID
      • 如果您使用的是共享 VPC 网络,请指定宿主项目。
      • 否则,请指定当前项目。
    • NETWORK:当前项目中的 VPC 网络的名称,或者由当前项目托管或与当前项目共享的共享 VPC 网络的名称。
    • REGION:子网和用于作业的虚拟机所在的区域
      • 如果您添加 allowedLocations 字段以便为作业指定允许的虚拟机位置,则必须在此处指定相同的区域。
      • 否则,区域必须与您为作业选择的位置 (LOCATION) 相同。
    • SUBNET:属于 VPC 网络并且与作业的虚拟机位于同一区域的子网的名称。

使用 JSON 字段为作业指定网络

如需创建作业并使用 JSON 配置文件中的字段为作业指定网络,请完成以下步骤:

  1. 创建一个 JSON 文件,用于指定作业的配置详情。 如需为作业指定网络,请添加 networksubnetwork 字段

    例如,如需创建在特定网络上运行的基本脚本作业,请创建一个包含以下内容的 JSON 文件。

    {
      "taskGroups": [
        {
          "taskSpec": {
            "runnables": [
              {
                "script": {
                  "text": "echo Hello world! This is task ${BATCH_TASK_INDEX}. This job has a total of ${BATCH_TASK_COUNT} tasks."
                }
              }
            ]
          },
          "taskCount": 3
        }
      ],
      "allocationPolicy": {
        "network": {
          "networkInterfaces": [
            {
              "network": "projects/HOST_PROJECT_ID/global/networks/NETWORK",
              "subnetwork": "projects/HOST_PROJECT_ID/regions/REGION/subnetworks/SUBNET"
            }
          ]
        }
      },
      "logsPolicy": {
        "destination": "CLOUD_LOGGING"
      }
    }
    

    替换以下内容:

    • HOST_PROJECT_ID:您指定的网络所属项目的项目 ID
      • 如果您使用的是共享 VPC 网络,请指定宿主项目。
      • 否则,请指定当前项目。
    • NETWORK:当前项目中的 VPC 网络的名称,或者由当前项目托管或与当前项目共享的共享 VPC 网络的名称。
    • REGION:子网和用于作业的虚拟机所在的区域
      • 如果您添加 allowedLocations 字段以便为作业指定允许的虚拟机位置,则必须在此处指定相同的区域。
      • 否则,区域必须与您为作业选择的位置 (LOCATION) 相同。
    • SUBNET:属于 VPC 网络并且与作业的虚拟机位于同一区域的子网的名称。
  2. 使用 gcloud batch jobs submit 命令创建作业。

    gcloud batch jobs submit JOB_NAME \
        --location LOCATION \
        --config JSON_CONFIGURATION_FILE
    

    替换以下内容:

    • JOB_NAME:此作业的名称。
    • LOCATION:此作业的位置
    • JSON_CONFIGURATION_FILE:包含作业配置详细信息的 JSON 文件的路径。

API

如需使用 Batch API 创建作业,请使用 jobs.create 方法并指定作业的配置详细信息。如需为作业指定网络,请添加 networksubnetwork 字段

例如,如需创建在特定网络上运行的基本脚本作业,请发出以下 POST 请求:

POST https://batch.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/jobs?job_id=JOB_NAME

{
  "taskGroups": [
    {
      "taskSpec": {
        "runnables": [
          {
            "script": {
              "text": "echo Hello world! This is task ${BATCH_TASK_INDEX}. This job has a total of ${BATCH_TASK_COUNT} tasks."
            }
          }
        ]
      },
      "taskCount": 3
    }
  ],
  "allocationPolicy": {
    "network": {
      "networkInterfaces": [
        {
          "network": "projects/HOST_PROJECT_ID/global/networks/NETWORK",
          "subnetwork": "projects/HOST_PROJECT_ID/regions/REGION/subnetworks/SUBNET"
        }
      ]
    }
  },
  "logsPolicy": {
    "destination": "CLOUD_LOGGING"
  }
}

替换以下内容:

  • PROJECT_ID:您的项目 ID
  • LOCATION:此作业的位置
  • JOB_NAME:此作业的名称。
  • HOST_PROJECT_ID:您指定的网络所属项目的项目 ID
    • 如果您使用的是共享 VPC 网络,请指定宿主项目。
    • 否则,请指定当前项目 (PROJECT_ID)。
  • NETWORK:当前项目中的 VPC 网络的名称,或者由当前项目托管或与当前项目共享的共享 VPC 网络的名称。
  • REGION:子网和用于作业的虚拟机所在的区域
    • 如果您添加 allowedLocations 字段以便为作业指定允许的虚拟机位置,则必须在此处指定相同的区域。
    • 否则,区域必须与您为作业选择的位置 (LOCATION) 相同。
  • SUBNET:属于 VPC 网络并且与作业的虚拟机位于同一区域的子网的名称。

后续步骤