为 HDFS 配置 DC/OS Access

ENTERPRISE

在 2.1.0-2.6.0-cdh5.11.0 和更早版本中为 HDFS 配置 DC/OS Access

版本

在 HDFS 2.2.0-2.6.0-fdh5.11.0 和更高版本中,这些主题已被划分为“入门”和“安全”部分。早期版本仍需要以下信息。

为 HDFS 配置 DC/OS 访问

本主题介绍如何为 HDFS 配置 DC/OS 访问。根据您的 安全模式,HDFS 需要 服务身份认证 以访问 DC/OS。

安全模式 服务帐户
已禁用 不可用
宽容 可选
严格 必填

如果您在宽容模式下安装服务且未指定服务帐户,Metronome 和 Marathon 将按照此服务的请求是由具有 超级用户权限的帐户做出的那样行事。

先决条件:

创建密钥对

在此步骤中,通过使用企业 DC/OS CLI,创建了 2048 位 的 RSA 公私密钥对。

创建公私密钥对并将每个值保存到当前目录中的单独文件中。

dcos security org service-accounts keypair <private-key>.pem <public-key>.pem

<<<<<<< HEAD 提示: 您可以使用 DC/OS 密钥存储库 保护密钥对。

<<<<<<< HEAD 提示: 您可以使用 DC/OS 密钥存储库 保护密钥对。

提示: 您可以使用 DC/OS 密钥存储库 保护密钥对。

c64725e8abdf15dd384b89db6535a2113ec4dfa6 staging

创建服务帐户

从终端提示中创建一个新的服务帐户(<service-account-id>) containing the public key (<your-public-key>.pem)。

dcos security org service-accounts create -p <your-public-key>.pem -d "HDFS service account" <service-account-id>

提示: 您可以使用以下命令验证您的新服务帐户。

dcos security org service-accounts show <service-account-id>

创建密钥

创建密钥路径 (hdfs/<secret-name>) with your service account (<service-account-id>) and private key specified (<private-key>.pem)。

提示: 如果您在与服务名称匹配的路径中存储密钥(例如,服务名称和密钥路径 是hdfs),则只有名为 hdfs 的服务可以访问密钥。

宽容

dcos security secrets create-sa-secret <private-key>.pem <service-account-id> hdfs/<secret-name>

严格

dcos security secrets create-sa-secret --strict <private-key>.pem <service-account-id> hdfs/<secret-name>

提示: 您可以使用以下命令列出密钥:

dcos security secrets list /

创建和分配权限

使用以下 curl 命令,为 HDFS 服务帐户快速配置所需权限。

提示:

  • 资源中的任何 / 字符必须替换为 %252F ,才能在 curl 命令中传递。
  • 使用 API 管理权限时,您必须首先创建权限,然后分配权限。有时,权限可能已存在。在此情况下,API 返回告知性信息。您可以将其视为确认并继续执行下一个命令。

创建权限。

重要信息: 这些命令使用 `hdfs-role`的默认 Apache HDFS `role` 值。如果您正在运行多个 Apache HDFS实例,使用正确的名称替换 `hdfs-role` 实例 (`-role`). 例如, 如果你有一个 Apache HDFS 例 `hdfs2`, 您将替换代码示例中的每个角色值 `hdfs2-role`。

宽容

运行这些命令,并且指定您的服务帐户名称 (<service-account-id>) 。

curl -X PUT --cacert dcos-ca.crt \
-H "Authorization: token=$(dcos config show core.dcos_acs_token)" $(dcos config show core.dcos_url)/acs/api/v1/acls/dcos:mesos:master:task:user:nobody \
-d '{"description":"Allows Linux user nobody to execute tasks"}' \
-H 'Content-Type: application/json'
curl -X PUT --cacert dcos-ca.crt \
-H "Authorization: token=$(dcos config show core.dcos_acs_token)" $(dcos config show core.dcos_url)/acs/api/v1/acls/dcos:mesos:master:framework:role:hdfs-role \
-d '{"description":"Controls the ability of hdfs-role to register as a framework with the Mesos master"}' \
-H 'Content-Type: application/json'
curl -X PUT --cacert dcos-ca.crt \
-H "Authorization: token=$(dcos config show core.dcos_acs_token)" $(dcos config show core.dcos_url)/acs/api/v1/acls/dcos:mesos:master:reservation:role:hdfs-role \
-d '{"description":"Controls the ability of hdfs-role to reserve resources"}' \
-H 'Content-Type: application/json'
curl -X PUT --cacert dcos-ca.crt \
-H "Authorization: token=$(dcos config show core.dcos_acs_token)" $(dcos config show core.dcos_url)/acs/api/v1/acls/dcos:mesos:master:volume:role:hdfs-role \
-d '{"description":"Controls the ability of hdfs-role to access volumes"}' \
-H 'Content-Type: application/json'
curl -X PUT --cacert dcos-ca.crt \
-H "Authorization: token=$(dcos config show core.dcos_acs_token)" $(dcos config show core.dcos_url)/acs/api/v1/acls/dcos:mesos:master:reservation:principal:<service-account-id> \
-d '{"description":"Controls the ability of <service-account-id> to reserve resources"}' \
-H 'Content-Type: application/json'
curl -X PUT --cacert dcos-ca.crt \
-H "Authorization: token=$(dcos config show core.dcos_acs_token)" $(dcos config show core.dcos_url)/acs/api/v1/acls/dcos:mesos:master:volume:principal:<service-account-id> \
-d '{"description":"Controls the ability of <service-account-id> to access volumes"}' \
-H 'Content-Type: application/json'

严格

运行这些命令,并且指定您的服务帐户名称 (<service-account-id>) 。

curl -X PUT --cacert dcos-ca.crt \
-H "Authorization: token=$(dcos config show core.dcos_acs_token)" $(dcos config show core.dcos_url)/acs/api/v1/acls/dcos:mesos:master:framework:role:hdfs-role \
-d '{"description":"Controls the ability of hdfs-role to register as a framework with the Mesos master"}' \
-H 'Content-Type: application/json'
curl -X PUT --cacert dcos-ca.crt \
-H "Authorization: token=$(dcos config show core.dcos_acs_token)" $(dcos config show core.dcos_url)/acs/api/v1/acls/dcos:mesos:master:reservation:role:hdfs-role \
-d '{"description":"Controls the ability of hdfs-role to reserve resources"}' \
-H 'Content-Type: application/json'
curl -X PUT --cacert dcos-ca.crt \
-H "Authorization: token=$(dcos config show core.dcos_acs_token)" $(dcos config show core.dcos_url)/acs/api/v1/acls/dcos:mesos:master:volume:role:hdfs-role \
-d '{"description":"Controls the ability of hdfs-role to access volumes"}' \
-H 'Content-Type: application/json'
curl -X PUT --cacert dcos-ca.crt \
-H "Authorization: token=$(dcos config show core.dcos_acs_token)" $(dcos config show core.dcos_url)/acs/api/v1/acls/dcos:mesos:master:reservation:principal:<service-account-id> \
-d '{"description":"Controls the ability of <service-account-id> to reserve resources"}' \
-H 'Content-Type: application/json'
curl -X PUT --cacert dcos-ca.crt \
-H "Authorization: token=$(dcos config show core.dcos_acs_token)" $(dcos config show core.dcos_url)/acs/api/v1/acls/dcos:mesos:master:volume:principal:<service-account-id> \
-d '{"description":"Controls the ability of <service-account-id> to access volumes"}' \
-H 'Content-Type: application/json'

使用以下命令将权限和允许的操作授予服务帐户。

运行这些命令,并且指定您的服务帐户名称 (<service-account-id>) 。

curl -X PUT --cacert dcos-ca.crt \
-H "Authorization: token=$(dcos config show core.dcos_acs_token)" $(dcos config show core.dcos_url)/acs/api/v1/acls/dcos:mesos:master:framework:role:hdfs-role/users/<service-account-id>/create
curl -X PUT --cacert dcos-ca.crt -H "Authorization: token=$(dcos config show core.dcos_acs_token)" $(dcos config show core.dcos_url)/acs/api/v1/acls/dcos:mesos:master:reservation:role:hdfs-role/users/<service-account-id>/create
curl -X PUT --cacert dcos-ca.crt -H "Authorization: token=$(dcos config show core.dcos_acs_token)" $(dcos config show core.dcos_url)/acs/api/v1/acls/dcos:mesos:master:volume:role:hdfs-role/users/<service-account-id>/create
curl -X PUT --cacert dcos-ca.crt -H "Authorization: token=$(dcos config show core.dcos_acs_token)" $(dcos config show core.dcos_url)/acs/api/v1/acls/dcos:mesos:master:task:user:nobody/users/<service-account-id>/create
curl -X PUT --cacert dcos-ca.crt -H "Authorization: token=$(dcos config show core.dcos_acs_token)" $(dcos config show core.dcos_url)/acs/api/v1/acls/dcos:mesos:master:reservation:principal:<service-account-id>/users/<service-account-id>/delete
curl -X PUT --cacert dcos-ca.crt -H "Authorization: token=$(dcos config show core.dcos_acs_token)" $(dcos config show core.dcos_url)/acs/api/v1/acls/dcos:mesos:master:volume:principal:<service-account-id>/users/<service-account-id>/delete

创建配置文件

创建用于安装 HDFS 的自定义配置文件,并另存为 config.json

指定服务帐户 (<service-account-id>) and secret path (hdfs/<secret-name>).

{
  "service": {
    "service_account": "<service-account-id>",
    "service_account_secret": "hdfs/<secret-name>"
  }
}

安装 HDFS

使用以下命令安装 HDFS:

dcos package install --options=config.json hdfs