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

iqxoj9l9  于 2021-05-30  发布在  Hadoop
关注(0)|答案(3)|浏览(499)

我在dev控制台上使用click-to-deploy机制安装了hadoop集群。我对自定义设置做了一些修改,例如机器种类、机器数量。部署群集。
但现在当我登录到master并运行以下命令时
sudo gcloud计算防火墙规则列表
我得到错误:权限不足
我检查了主节点的权限,发现:
权限
禁用用户信息,禁用计算存储完整任务队列,禁用bigquery-禁用云sql,禁用云数据存储,禁用云平台
当我启动一个单独的vm时,我可以启用它对这些方面的权限,但是当我启动一个集群时,我不能。这就是我在hadoop主机上看到权限错误的原因吗?
怎么能修好呢?
更多背景:我需要启用防火墙端口,这样我就可以看到作业的状态使用ip http://:50030/

4szc88ey

4szc88ey1#

打开不安全端口的问题

注意:这是一个一般性的问题,并不仅仅局限于hadoop。
目前开放端口的解决方案不是一个好主意,因为hadoop状态页是通过http(而不是https)提供的,这意味着它们是以纯文本形式提供的,因此,internet上的任何人都可以访问您的示例,查看或控制您的hadoop作业或集群或它们包含的数据。

替代解决方案

相反,您应该通过加密通道(https/ssl或使用ssh隧道)发送所有流量,并通过该通道发送浏览器流量。
据我所知,hadoop目前不提供https,所以您可以创建一个ssh隧道并通过该安全隧道进行浏览。
此解决方案的好处是:
它是安全的:您的浏览器和vm示例之间的所有通信都是通过ssh连接进行的,因此即使连接使用http而不是https,对于外部用户来说仍然是安全的
您可以连接到主机名(即,您的虚拟机名直接),就像它们在您的本地网络上一样,例如。, http://my-host:5392 您可以连接到任何主机上的任何端口,而不必单独打开每个端口

安全连接到gce虚拟机的完整指南

请参阅“安全连接到虚拟机示例”指南,了解下面的socks代理指南之外的更多详细信息,包括防火墙、https和ssl、ssh端口转发、ssh socks代理、堡垒主机、VPN、NAT等。

通过ssh隧道+socks代理安全连接

方法是设置一个socks代理,它将使用ssh隧道来保护您与gce上hadoop集群的通信。您可以使用完整脚本,也可以创建自己的脚本,如下所示:


# !/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集群设置一个安全代理。
然后,假设您使用的是google chrome,那么您也可以在本地计算机(而不是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,请参阅这些目前无法编写脚本的说明。

背景和细节如何以及为什么这样做

您可以从以下来源了解更多关于ssh隧道、它是什么以及它是如何工作的:
ssh隧道-用示例说明本地和远程端口转发
ssh隧道解释
隧道协议

a14dhokn

a14dhokn2#

在gce平台上使用的防火墙规则是在网络级别定义的,而不是基于每个虚拟机。在每个防火墙规则中,您可以指定它应用于的示例。为此,一个非常方便的方法是使用标记:为一个vm或一组vm(或集群)定义相同的标记,以便将规则应用于所有标记了该标记的vm。
默认情况下,同一网络中的示例之间的通信量是未过滤的,并且只有选定的几个端口从vms过滤到开放的internet。对于传入连接不是这样的:为此,您必须定义所述防火墙规则、向传入连接打开端口、定义所述连接的目的地,如上所述。
您收到的权限消息是由于您正试图从系统(群集主机)访问您的项目,这两个系统都没有对您的项目进行修改的计算机权限(由vm的服务帐户定义)(在本例中,修改防火墙规则集),当前也没有使用有权执行相同任务的用户/所有者凭据登录。它也不是必需的:您可以在自己的工作站上使用sdk/gcutil命令定义所述规则集。。。也就是说,只要您登录到您的用户/所有者帐户。
在您的特定情况下,默认情况下,可以从同一网络中的所有虚拟机访问tcp端口50030。如果您要从开放网络访问所述端口,则必须在项目范围内定义防火墙规则,以允许所述传入通信。另外,请注意,集群部署系统已经为集群添加了若干规则。
查看/管理防火墙规则最方便的方法是通过开发人员控制台

ohtdti5x

ohtdti5x3#

您的gce示例需要通过服务帐户获得读取权限,才能通过您的项目中的cloud sdk(即gcloud compute)列出示例。通常情况下,默认情况下只授予示例对google云存储的读取权限。您可以在此处找到有关在服务帐户中使用云sdk工具的更多信息:https://cloud.google.com/compute/docs/authentication#tools
一旦创建了与示例关联的服务帐户,就不能修改。这些作用域只能在创建时授予。
或者,您可以通过从示例中键入以下内容,然后按照说明对CloudSDK进行身份验证:(这是使用您的凭据,而不是服务帐户)
gcloud auth login--不启动浏览器
这些都与修改防火墙规则没有直接关系。这里有一个使用云sdk操作防火墙规则的全面指南:
https://cloud.google.com/sdk/gcloud/reference/compute/firewall-rules/create

相关问题