hadoop集群上的gcloud compute没有足够的权限

时间:2015-01-02 12:35:15

标签: hadoop google-compute-engine

我在开发控制台上使用click-to-deploy机制安装了hadoop集群。我对自定义设置进行了一些修改,例如各种机器,机器数量。集群已部署。

但现在我登录主人并运行以下命令

sudo gcloud compute firewall-rules list

我收到错误:权限不足

我检查了主节点的权限,我看到了:

权限

用户信息 - 已停用, 计算 - 禁用 存储 - 全 任务队列 - 已禁用 BigQuery -Disabled 云SQL禁用 云数据存储已禁用 云平台已禁用

当我启动单个虚拟机时,我可以为这些方面启用其权限,但是当我启动集群时,我无法做到。这是我在hadoop master上看到权限错误的原因吗?

如何解决?

更多背景:我需要启用防火墙端口,以便我可以使用ip http://:50030 /

查看作业状态

3 个答案:

答案 0 :(得分:2)

您的GCE实例需要通过服务帐户的读取权限才能通过项目中的Cloud SDK(即gcloud compute)列出实例。通常,默认情况下,实例仅被授予对Google云端存储的读取权限。您可以在此处找到有关将Cloud SDK工具与服务帐户配合使用的更多信息:https://cloud.google.com/compute/docs/authentication#tools

创建后,无法修改与实例关联的服务帐户。这些范围只能在创建时授予。

或者,您可以通过从实例中键入以下内容然后按照说明对Cloud SDK进行身份验证:(这是使用您的凭据而不是服务帐户)

gcloud auth login --no-launch-browser

这些都与修改防火墙规则无直接关系。这里有一个使用Cloud SDK操作防火墙规则的综合指南:

https://cloud.google.com/sdk/gcloud/reference/compute/firewall-rules/create

答案 1 :(得分:2)

打开不安全端口的问题

注意:这是一个普遍问题,而不仅限于Hadoop。

开放端口的当前解决方案不是一个好主意,因为Hadoop状态页面是通过HTTP(而不是HTTPS)提供的,这意味着它们以纯文本形式提供,因此,Internet上的任何人也可以访问您的实例和视图或控制您的Hadoop作业或群集或它们包含的数据。

解决方案替代方案

相反,您应该通过加密通道(HTTPS / SSL或使用SSH隧道)发送所有流量,并通过该隧道发送您的浏览器流量。

此时Hadoop根据我的知识不提供HTTPS,因此您可以创建SSH隧道并通过该安全隧道进行浏览。

此解决方案的好处是:

  • 它是安全的:您的浏览器和VM实例之间的所有通信都是通过SSH连接进行的,因此即使连接使用的是HTTP而不是HTTPS,它仍然可以保护外部用户免受
  • 您可以连接到主机名(即您的VM名称),就好像它们位于您的本地网络上一样,例如http://my-host:5392
  • 您可以连接到任何主机上的任何端口,而无需单独打开每个端口

安全连接到GCE VM的完整指南

参见" Securely Connecting to VM Instances"以下SOCKS代理指南之外的更多详细信息的指南,包括防火墙,HTTPS和SSL,SSH上的端口转发,SSH上的SOCKS代理,堡垒主机,VPN,NAT等。

通过SSH隧道+ SOCKS代理安全连接

执行此操作的方法是设置SOCKS proxy,它将使用SSH隧道来保护您与GCE上的Hadoop群集的通信。您可以使用full script或创建自己的,如下所示:

#!/bin/bash

# Modify these variables to match your deployment.
export PROJECT="curious-lemming-42"  # Google Cloud Platform Project
export ZONE="us-central-1"           # zone of Hadoop cluster
export PORT="9000"                   # port on local machine to run proxy;
                                     # just choose an open port
export SERVER="my-instance"          # any VM instance in the cluster

# This command starts the SOCKS proxy on $PORT.
gcloud compute ssh \
    --project="${PROJECT}" \
    --zone="${ZONE}" \
    --ssh-flag="-D" \
    --ssh-flag="${PORT}" \
    --ssh-flag="-N" \
    "${SERVER}"

在本地计算机上打开一个新终端(而不是在GCE VM上)并在那里运行此脚本。在此脚本运行时,您将通过SSH为您的Hadoop集群设置安全代理。

然后,假设您正在使用谷歌浏览器,您可以使用此脚本,也可以在本地计算机上,而不是在GCE VM上,安全地连接到您的Hadoop集群:

#!/bin/bash

# This port must match the port in the other script above.
declare -r PORT="9000"

# Create a directory for the proxy profile to separate it from the others.
# You can change this directory if you wish.
declare -r CHROME_PROXY_PROFILE="${HOME}/chrome-proxy-profile"
if ! [ -d "${CHROME_PROXY_PROFILE}" ]; then
  mkdir -p "${CHROME_PROXY_PROFILE}"
fi

# Run a new instance of Chrome using the custom proxy profile.
declare -r OS_NAME="$(uname -s)"
if [[ "${OS_NAME}" == "Linux" ]]; then
  /usr/bin/google-chrome \
      --user-data-dir="${CHROME_PROXY_PROFILE}" \
      --proxy-server="socks5://localhost:${PORT}"
elif [[ "${OS_NAME}" == "Darwin" ]]; then
  "/Applications/Google Chrome.app/Contents/MacOS/Google Chrome" \
      --user-data-dir="${CHROME_PROXY_PROFILE}" \
      --proxy-server="socks5://localhost:${PORT}"
else
  echo "Unrecognized OS: ${OS_NAME}" >&2
  exit 1
fi

如果您想设置Firefox,请参阅目前无法编写脚本的these directions

背景和详细信息,了解其工作方式和原因

您可以从这些来源中了解有关SSH隧道的更多信息,它是什么以及如何工作:

答案 2 :(得分:0)

GCE平台上使用的防火墙规则是在网络级别定义的,而不是基于每个VM的。在每个防火墙规则中,您可以指定其应用的实例等。为此,一个非常方便的事情是使用标签:为VM或一组VM(或集群)定义相同的标签,以便将规则应用于标记有所述标签的所有VM。

默认情况下,同一网络中的实例之间的流量未经过滤,只有选定的几个端口从VM过滤到开放的互联网。传入连接不是这样的:为此,你必须定义所述防火墙规则,打开传入连接的端口,定义所述连接的目的地,如上所述。

您收到的权限消息是由于您尝试从系统(群集主服务器)访问您的项目,该系统既没有机器权限(由VM的服务帐户定义)修改您的项目(在这种情况下,修改防火墙规则集),当前也没有使用您有权执行相同任务的用户/所有者凭据登录。它也不是必需的:您可以使用SDK / gcutil命令从您自己的工作站轻松定义所述规则集...即,只要您已登录到您的用户/所有者帐户。

在特定情况下,默认情况下,可以从同一网络中的所有VM访问TCP端口50030。如果您从开放网络访问所述端口,则必须在项目范围内定义防火墙规则,以允许所述传入通信。此外,请注意,群集部署系统已添加了几个引用群集的规则。

查看/管理防火墙规则的最便捷方式是通过开发人员控制台