Dataproc 组件网关

Google Dataproc 集群附带的一些默认开源组件(例如 Apache HadoopApache Spark)提供了网页界面。这些界面可用于管理和监控集群资源和设施,例如 YARN 资源管理器、Hadoop 分布式文件系统 (HDFS)、MapReduce 和 Spark。组件网关让 Dataproc 的默认组件和可选组件可以安全访问 Web 端点。

使用 Dataproc 映像版本 1.3.29 及更高版本创建的集群可以实现对组件网页界面的访问,无需依赖 SSH 隧道修改防火墙规则来允许入站流量。

注意事项

  • 具有 dataproc.clusters.use IAM 权限的用户可以访问组件网页界面。默认情况下,只有项目成员才具有此权限(请参阅 Dataproc 角色)。
  • 组件网关不能用于访问 REST API(例如 Apache Hadoop YARNApache Livy)以及历史记录服务器。
  • 启用组件网关后,集群中的第一个主实例节点将具有以下附加服务:
  • 组件网关不支持直接访问 node:port 接口,而是自动代理特定的服务子集。如果要访问节点 (node:port) 上的服务,请使用 SSH SOCKS 代理

使用组件网关创建集群

控制台

如需从 Cloud Console 启用组件网关,请勾选 Dataproc 创建集群表单上的组件网关复选框。

gcloud 命令

在终端窗口或 Cloud Shell 中本地运行 Cloud SDK gcloud dataproc clusters create 命令。

gcloud dataproc clusters create cluster-name \
    --enable-component-gateway \
    --region=region \
    other args ...

REST API

EndpointConfig.enableHttpPortAccess 属性设置为 true(作为 clusters.create 请求的一部分)。

查看和访问组件网关网址

在集群上启用组件网关后,您可以通过点击 Cloud Console 上提供的链接,连接集群第一个主实例节点上运行的组件网页界面。组件网关还通过将端口名映射为网址来设置 endpointConfig.httpPorts。作为使用控制台的替代方法,您可以使用 gcloud 命令行工具或 Dataproc REST API 查看此映射信息,然后将网址复制并粘贴到浏览器中以连接组件的界面。

控制台

导航到 Google Cloud Console 上的 Dataproc 集群表单,然后选择您的集群以打开集群详细信息表单。点击网页界面标签页以显示组件网关链接列表,这些链接指向安装在集群上的默认组件和可选组件的网页界面。点击链接以在本地浏览器中打开集群的主节点上运行的网页界面。

gcloud 命令

在终端窗口或 Cloud Shell 中本地运行 Cloud SDK gcloud dataproc clusters describe 命令。

gcloud dataproc clusters describe cluster-name \
    --region=region

输出示例

...
config:
  endpointConfig:
    enableHttpPortAccess: true
    httpPorts:
      HDFS NameNode:
https://584bbf70-7a12-4120-b25c-31784c94dbb4-dot-dataproc.google.com/hdfs/ MapReduce Job History:
https://584bbf70-7a12-4120-b25c-31784c94dbb4-dot-dataproc.google.com/jobhistory/ Spark HistoryServer:
https://584bbf70-7a12-4120-b25c-31784c94dbb4-dot-dataproc.google.com/sparkhistory/ YARN ResourceManager:
https://584bbf70-7a12-4120-b25c-31784c94dbb4-dot-dataproc.google.com/yarn/ YARN Application Timeline:
https://584bbf70-7a12-4120-b25c-31784c94dbb4-dot-dataproc.google.com/apphistory/ ...

REST API

调用 clusters.get 获取端口名称到网址的 endpointConfig.httpPorts 映射。

将组件网关与 VPC-SC 配合使用

组件网关支持 VPC Service Controls。为强制执行服务边界,通过组件网关对界面发送的请求视为 Dataproc API 表面的一部分,控制 dataproc.googleapis.com 权限的所有访问权限政策也将控制对组件网关界面的访问权限

组件网关还支持 VPC-SC 配置,这些配置依赖 Dataproc 集群的专用 Google 连接,没有外部 IP 地址,但您必须手动配置网络,以允许通过受限 Google 虚拟 IP 地址范围 199.36.153.4/30 从 Dataproc 主虚拟机访问 *.dataproc.cloud.google.com

  1. 按照说明为所有 Google API 配置专用 Google 连接
  2. 使用 Cloud DNS 配置 DNS在 Dataproc 主实例节点上本地配置 DNS 以允许访问 *.dataproc.cloud.google.com

使用 Cloud DNS 配置 DNS

创建一个 Cloud DNS 地区,将发往 *.dataproc.cloud.google.com 的流量映射到受限的 Google API 虚拟 IP 地址范围。

  1. 为您的 VPC 网络创建一个托管专用地区。

    gcloud dns managed-zones create ZONE_NAME \
     --visibility=private \
     --networks=https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/NETWORK_NAME \
     --description=DESCRIPTION \
     --dns-name=dataproc.cloud.google.com
     --project=PROJECT_ID
    
    • ZONE_NAME 是您要创建的区域的名称。例如 vpc。以下每个步骤都会用到该地区名称。

    • PROJECT_ID 是托管 VPC 网络的项目的 ID。

    • NETWORK_NAME 为 VPC 网络的名称。

    • DESCRIPTION 是可选项,用于提供关于代管区域的直观易懂的说明。

  2. 启动一项事务。

    gcloud dns record-sets transaction start --zone=ZONE_NAME
    
    • ZONE_NAME 是您的地区名称。
  3. 添加 DNS 记录。

    gcloud dns record-sets transaction add --name=*.dataproc.cloud.google.com. \
        --type=A 199.36.153.4 199.36.153.5 199.36.153.6 199.36.153.7 \
        --zone=ZONE_NAME \
        --ttl=300
    
    • ZONE_NAME 是您的地区名称。
    gcloud dns record-sets transaction add --name=dataproc.cloud.google.com. \
        --type=A 199.36.153.4 199.36.153.5 199.36.153.6 199.36.153.7 \
        --zone=ZONE_NAME \
        --ttl=300
    
    • ZONE_NAME 是您的地区名称。
  4. 执行事务。

    gcloud dns record-sets transaction execute --zone=ZONE_NAME --project=PROJECT_ID
    
    • ZONE_NAME 是您的地区名称。

    • PROJECT_ID 是托管 VPC 网络的项目的 ID。

使用初始化操作在 Dataproc 主实例节点主实例节点上本地配置 DNS

您可以在 Dataproc 主实例节点上本地配置 DNS,以允许专用连接到 dataproc.cloud.google.com。此过程适用于短期测试和开发。不建议在生产工作负载中使用。

  1. 将初始化操作暂存至 Cloud Storage。

    cat <<EOF >component-gateway-vpc-sc-dns-init-action.sh
    #!/bin/bash
    readonly ROLE="$(/usr/share/google/get_metadata_value attributes/dataproc-role)"
    
    if [[ "${ROLE}" == 'Master' ]]; then
      readonly PROXY_ENDPOINT=$(grep "^dataproc.proxy.agent.endpoint=" \
        "/etc/google-dataproc/dataproc.properties" | \
        tail -n 1 | cut -d '=' -f 2- | sed -r 's/\\([#!=:])/\1/g')
    
      readonly HOSTNAME=$(echo ${PROXY_ENDPOINT} | \
        sed -n -E 's;^https://([^/?#]*).*;\1;p')
    
      echo "199.36.153.4 ${HOSTNAME}  # Component Gateway VPC-SC" >> "/etc/hosts"
    fi
    EOF
    
    gsutil cp component-gateway-vpc-sc-dns-init-action.sh gs://BUCKET/
    
    • BUCKET 是可从 Dataproc 集群访问的 Cloud Storage 存储分区。
  2. 创建使用暂存的初始化操作并启用组件网关的 Dataproc 集群。

    gcloud dataproc clusters create cluster-name \
        --region=region \
        --initialization-actions=gs://BUCKET/component-gateway-vpc-sc-dns-init-action.sh \
        --enable-component-gateway \
        other args ...
    
    • BUCKET 是上面第 1 步中使用的 Cloud Storage 存储分区。

后续步骤