配置服务和 pod

配置服务和 pod 以使用密钥

  • Kerberos keytab 或其他凭据文件。
  • SSL 证书。
  • 包含敏感数据的配置文件。
任务沙盒 () 中提供基于文件的密钥。 ## 先决条件
  • 现有密钥。以下示例使用了存储在 developer 路径名为 my-secret 的密钥。如果您完成中的步骤,则您将满足此先决条件。
  • 已安装 DC/OS CLI 以及 。
  • 您必须 获取根证书,才能发布此部分的 curl 命令。
  • 您的。 在 strict 模式,用户也可能需要以下内容。
    • dcos:adminrouter:ops:mesos full:查看 任务 面板信息。
    • dcos:adminrouter:ops:slave full:查看任务的详细信息,包括日志。
    只要密钥的路径和组的路径匹配正确,服务将能够访问密钥值。
该程序根据您是否要将密钥提供给 或单个服务而有所不同。

配置服务以使用密钥

配置服务以通过 Web 界面使用密钥

  1. 作为具有必要权限的用户登录 Web 界面,如 权限管理 和 中所述。
  2. 单击 Services 选项卡。
  3. 单击右上方的 + 图标。 图 1. 运行服务
  4. 单击 JSON Editor 切换按钮。
  5. 选择默认 JSON 架构的内容并删除它们,以便黑框中不显示任何文本。
  6. 复制以下简单应用定义之一,并将其粘贴到黑框中。此应用定义在开发人员组内创建新服务,并引用了存储在开发人员路径内的密钥。 基于环境变量的密钥:
    1. {
    2. "id":"/developer/service",
    3. "cmd":"sleep 100",
    4. "env":{
    5. "MY_SECRET":{
    6. "secret":"secret0"
    7. }
    8. },
    9. "secrets":{
    10. "secret0":{
    11. "source":"developer/my-secret"
    12. }
    13. }
    14. }
    在上述示例中,DC/OS 存储环境变量 "MY_SECRET" 下的密钥。观察 "env""secrets" 对象如何用于定义基于环境变量的密钥。 基于文件的密钥:
    1. {
    2. "id": "developer/service",
    3. "cmd": "sleep 100",
    4. "container": {
    5. "type": "MESOS",
    6. "volumes": [
    7. {
    8. "containerPath": "path",
    9. "secret": "secretpassword"
    10. }
    11. ]
    12. },
    13. "secrets": {
    14. "secretpassword": {
    15. "source": "developer/databasepassword"
    16. }
    17. }
    18. }
    在上述示例中,密钥将具有文件名 path,并且将在任务的沙盒中可用 ($MESOS_SANDBOX/path) 。 由于服务和密钥路径匹配,服务将能够访问该密钥。有关路径的更多详细信息,请参阅空间
  7. 单击 审查并运行
  8. 单击 运行服务
  9. 单击服务的组名,例如,开发人员
  10. 单击其任务名称。
  11. 滚动浏览详细信息选项卡,找到基于环境变量的密钥 DCOS_SECRETS_DIRECTIVE。 如果要测试基于文件的密钥是否成功,可以将 cat path 添加到应用程序 cmd,以将密钥打印到 stdout 日志。 例如:
    1. {
    2. "id": "developer/service",
    3. "cmd": "cat path && sleep 100",
    4. "container": {
    5. "type": "MESOS",
    6. "volumes": [
    7. "containerPath": "path",
    8. "secret": "secretpassword"
    9. }
    10. ]
    11. },
    12. "secrets": {
    13. "secretpassword": {
    14. "source": "developer/databasepassword"
    15. }
    16. }
    17. }

通过 Marathon 应用定义配置服务以使用基于环境变量的密钥

  1. 通过 dcos auth login 以具有必要权限的用户身份登录 CLI。请参阅 关于配置服务和 pod 以使用密钥 来发现所需的权限。
  2. 在文本编辑器内,为 Marathon 服务创建应用定义。以下应用程序定义在开发人员组内创建新服务,并引用了存储在开发人员路径内的密钥。 基于环境变量的密钥: 在上述示例中,DC/OS 存储环境变量 "MY_SECRET" 下的密钥。观察 "env""secrets" 对象如何用于定义基于环境变量的密钥。 基于文件的密钥:
    1. {
    2. "id": "developer/service",
    3. "cmd": "sleep 100",
    4. "container": {
    5. "type": "MESOS",
    6. "volumes": [
    7. {
    8. "containerPath": "path",
    9. "secret": "secretpassword"
    10. }
    11. ]
    12. },
    13. "secrets": {
    14. "secretpassword": {
    15. "source": "developer/databasepassword"
    16. }
    17. }
    18. }
    由于服务组和密钥路径匹配,服务将能够访问密钥。有关路径的更多详细信息,请参阅。
  3. 使用描述性名称保存文件,如 myservice.json
  4. 通过 DC/OS CLI 将服务添加到 DC/OS。
    1. dcos marathon app add myservice.json
    或者,使用 Marathon API 部署应用程序,如下所示。
    1. 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)"
  5. 打开 DC/OS Web 界面。
  6. 单击服务的组名,例如,开发人员
  7. 单击服务名称。
  8. 单击其任务名称。
  9. 滚动浏览详细信息标签,找到基于环境变量的密钥 DCOS_SECRETS_DIRECTIVE。 如果要测试基于文件的密钥是否成功,可以将 cat path 添加到应用程序 cmd,以将密钥打印到 stdout 日志。 例如:

配置 pod 以使用密钥

  1. 通过 dcos auth login 以具有必要权限的用户身份登录 CLI。有关权限的更多信息,请参阅 。
  2. 在文本编辑器内,为 pod 创建应用定义。您可以使用 "environment""secrets" 对象添加密钥,如下所示。以下简单应用程序在开发人员组内定义新服务,并引用了存储在开发人员路径内的密钥。它将密钥存储在环境变量 "MY_SECRET" 下。 基于环境变量的密钥:
    1. {
    2. "id": "/developer/pod-secret",
    3. "environment": {
    4. "MY_SECRET": {
    5. "secret": "secret0"
    6. }
    7. },
    8. "secrets": {
    9. "secret0": { "source": "developer/my-secret"}
    10. },
    11. "name": "container-1",
    12. "resources": {
    13. "cpus": 0.1,
    14. "mem": 128
    15. },
    16. "exec": {
    17. "command": {
    18. "shell": "sleep 3600"
    19. }
    20. }
    21. }
    22. ],
    23. "scaling": {
    24. "kind": "fixed",
    25. "instances": 1
    26. },
    27. "networks": [
    28. {
    29. "mode": "host"
    30. }
    31. ]
    32. }
    基于文件的密钥:
    1. {
    2. "id": "developer/pod-with-secrets",
    3. "containers": [
    4. {
    5. "type": "MESOS",
    6. "name": "container-1",
    7. "exec": {
    8. "command": {
    9. "shell": "sleep 1"
    10. }
    11. },
    12. "volumeMounts": [
    13. {
    14. "name": "secretvolume",
    15. "mountPath": "path/to/db/password"
    16. }
    17. ]
    18. }
    19. ],
    20. "volumes": [
    21. {
    22. "name": "secretvolume",
    23. "secret": "secretpassword"
    24. }
    25. ],
    26. "secrets": {
    27. "secretpassword": {
    28. "source": "developer/databasepassword"
    29. }
    30. }
    31. }
    注意:由于服务组和密钥路径匹配,pod 将能够访问密钥。有关路径的更多详细信息,请参阅命名空间
  3. 使用描述性名称保存文件,如 mypod.json
  4. 使用 DC/OS CLI 部署 Pod,如下所示。
    1. dcos marathon pod add mypod.json
  5. 打开 DC/OS Web 界面。
  6. 单击服务的组名,例如,开发人员
  7. 单击 Pod 的名称。
  8. 单击以打开 Configuration 选项卡。