您的服务定义可将密钥引用环境变量或文件。
基于文件的密钥
您可以将密钥引用为提高其他进程安全性的文件,或者您的服务需要从容器中安装的文件中读取密钥。引用基于文件的密钥对以下内容特别有用:
- Kerberos keytab 或其他凭据文件。
- SSL 证书。
- 包含敏感数据的配置文件。
任务沙盒 () 中提供基于文件的密钥。$MESOS_SANDBOX/<configured-path>
).
先决条件
-
现有密钥。以下示例使用了存储在
my-secret
路径名为developer
的密钥。如果您完成创建密钥中的步骤,则您将满足此先决条件。 -
您必须 获取根证书,才能发布此部分的 curl 命令。
-
您的[安全模式]的适当权限。(/mesosphere/dcos/cn/2.0/security/ent/#security-modes).
权限 执行模式 dcos:adminrouter:service:marathon full
所有安全模式 dcos:service:marathon:marathon:services:/[service-group full
严格
和宽容
安全模式在
strict
模式,用户也可能需要以下内容。dcos:adminrouter:ops:mesos full
:查看 任务 面板信息。dcos:adminrouter:ops:slave full
:查看任务的详细信息,包括日志。
只要密钥的路径和组的路径匹配正确,服务将能够访问密钥值。
该程序根据您是否要将密钥提供给 pod 或单个服务而有所不同。
配置服务以使用密钥
程序因接口而异。请参阅与您所需界面相对应的部分。
配置服务以通过 Web 界面使用密钥
-
单击 Services 选项卡。
-
单击右上方的 + 图标。
图 1. 运行服务
-
单击 JSON Editor 切换按钮。
-
选择默认 JSON 架构的内容并删除它们,以便黑框中不显示任何文本。
-
复制以下简单应用定义之一,并将其粘贴到黑框中。此应用定义在开发人员组内创建新服务,并引用了存储在开发人员路径内的密钥。
基于环境变量的密钥:
{ "id":"/developer/service", "cmd":"sleep 100", "env":{ "MY_SECRET":{ "secret":"secret0" } }, "secrets":{ "secret0":{ "source":"developer/my-secret" } } }
在上述示例中,DC/OS 存储环境变量 下的密钥。
"MY_SECRET"
. 观察"env"
和"secrets"
对象如何用于定义基于环境变量的密钥。基于文件的密钥:
{ "id": "developer/service", "cmd": "sleep 100", "container": { "type": "MESOS", "volumes": [ { "containerPath": "path", "secret": "secretpassword" } ] }, "secrets": { "secretpassword": { "source": "developer/databasepassword" } } }
在上述示例中,密钥将具有文件名
path
,并且将在任务的沙盒中可用 ($MESOS_SANDBOX/path
).由于服务和密钥路径匹配,服务将能够访问该密钥。有关路径的更多详细信息,请参阅空间
-
单击 审查并运行。
-
单击 运行服务。
-
单击服务的组名,例如,开发人员。
-
单击服务名称。
-
单击其任务名称。
-
滚动浏览详细信息选项卡,找到基于环境变量的密钥
DCOS_SECRETS_DIRECTIVE
如果要测试基于文件的密钥是否成功,可以将
cat path
添加到应用程序cmd
,以将密钥打印到stdout
日志。例如:
{ "id": "developer/service", "cmd": "cat path && sleep 100", "container": { "type": "MESOS", "volumes": [ { "containerPath": "path", "secret": "secretpassword" } ] }, "secrets": { "secretpassword": { "source": "developer/databasepassword" } } }
通过 Marathon 应用定义配置服务以使用基于环境变量的密钥
-
通过 以具有必要权限的用户身份登录 CLI。
dcos auth login
. 请参阅 关于配置服务和 pod 以使用密钥 来发现所需的权限。 -
在文本编辑器内,为 Marathon 服务创建应用定义。以下应用程序定义在开发人员组内创建新服务,并引用了存储在开发人员路径内的密钥。
基于环境变量的密钥:
{ "id":"/developer/service", "cmd":"sleep 100", "env":{ "MY_SECRET":{ "secret":"secret0" } }, "secrets":{ "secret0":{ "source":"developer/my-secret" } } }
在上述示例中,DC/OS 存储环境变量 下的密钥。
"MY_SECRET"
. 观察"env"
和"secrets"
对象如何用于定义基于环境变量的密钥。基于文件的密钥:
{ "id": "developer/service", "cmd": "sleep 100", "container": { "type": "MESOS", "volumes": [ { "containerPath": "path", "secret": "secretpassword" } ] }, "secrets": { "secretpassword": { "source": "developer/databasepassword" } } }
由于服务组和密钥路径匹配,服务将能够访问密钥。有关路径的更多详细信息,请参阅空间
-
使用描述性名称保存文件,如
myservice.json
. -
通过 DC/OS CLI 将服务添加到 DC/OS。
dcos marathon app add myservice.json
或者,使用 Marathon API 部署应用程序,如下所示。
curl -X POST --cacert dcos-ca.crt $(dcos config show core.dcos_url)/service/marathon/v2/apps -d @myservice.json -H "Content-type: application/json" -H "Authorization: token=$(dcos config show core.dcos_acs_token)"
-
打开 DC/OS Web 界面。
-
单击服务的组名,例如,开发人员。
-
单击服务名称。
-
单击其任务名称。
-
滚动浏览详细信息标签,找到基于环境变量的密钥
DCOS_SECRETS_DIRECTIVE
如果要测试基于文件的密钥是否成功,可以将
cat path
添加到应用程序cmd
,以将密钥打印到stdout
日志。例如:
{ "id": "developer/service", "cmd": "cat path && sleep 100", "container": { "type": "MESOS", "volumes": [ { "containerPath": "path", "secret": "secretpassword" } ] }, "secrets": { "secretpassword": { "source": "developer/databasepassword" } } }
配置 pod 以使用密钥
-
通过 以具有必要权限的用户身份登录 CLI。
dcos auth login
. 有关权限的更多信息,请参阅 关于配置服务和 pod 以使用密钥。 -
在文本编辑器内,为 pod 创建应用定义。您可以使用
"environment"
和"secrets"
对象添加密钥,如下所示。以下简单应用程序在开发人员组内定义新服务,并引用了存储在开发人员路径内的密钥。它将密钥存储在环境变量 下。"MY_SECRET"
.基于环境变量的密钥:
{ "id": "/developer/pod-secret", "environment": { "MY_SECRET": { "secret": "secret0" } }, "secrets": { "secret0": { "source": "developer/my-secret"} }, "containers": [ { "name": "container-1", "resources": { "cpus": 0.1, "mem": 128 }, "exec": { "command": { "shell": "sleep 3600" } } } ], "scaling": { "kind": "fixed", "instances": 1 }, "networks": [ { "mode": "host" } ] }
基于文件的密钥:
{ "id": "developer/pod-with-secrets", "containers": [ { "type": "MESOS", "name": "container-1", "exec": { "command": { "shell": "sleep 1" } }, "volumeMounts": [ { "name": "secretvolume", "mountPath": "path/to/db/password" } ] } ], "volumes": [ { "name": "secretvolume", "secret": "secretpassword" } ], "secrets": { "secretpassword": { "source": "developer/databasepassword" } } }
-
使用描述性名称保存文件,如
mypod.json
. -
使用 DC/OS CLI 部署 Pod,如下所示。
dcos marathon pod add mypod.json
-
打开 DC/OS Web 界面。
-
单击服务的组名,例如,开发人员。
-
单击 Pod 的名称。
-
单击以打开 Configuration 选项卡。
-
滚动到 环境变量 区域,找到您的密钥
MY_SECRET
.
限制
基于文件的密钥仅与 UCR 配合使用。