开发者社区> 问答> 正文

Swarm mode 集群密钥管理的在服务中使用密钥

反向一觉 2017-10-30 14:51:04 1258
您可以通过创建应用来指定服务中使用的 secrets。您可以为服务赋权使用一个或多个 secrets。
前提条件
您已经创建了 secrets。有关如何创建 secrets,参见 创建密钥

使用限制
secrets 必须和使用它的应用位于同一集群内。

通过镜像创建应用
有关如何创建应用,参见 创建应用
本示例创建名为 [backcolor=transparent]mysql 的 MySQL 应用。在应用配置的 [backcolor=transparent]密钥 部分设置 secrets 信息。本示例赋权应用使用两个 secrets:[backcolor=transparent]my_mysql_password_v1 和 [backcolor=transparent]my_secret_v1。

其中:
  • [backcolor=transparent]密钥名称:您在容器服务中所创建的密钥的名称。
  • [backcolor=transparent]目标名称:将要挂载到容器的 /run/secrets/ 目录下的文件的名称。默认情况下,与 [backcolor=transparent]source 值相同,即容器在/run/secrets/<secret_name> 目录下访问密钥。
  • [backcolor=transparent]用户ID:拥有容器 /run/secrets/ 目录下的 secret 文件的用户 ID。默认为 0。
  • [backcolor=transparent]用户组ID:拥有容器 /run/secrets/ 目录下的 secret 文件的用户组 ID。默认为 0。
  • [backcolor=transparent]权限:将要挂载到容器/run/secrets/ 目录下的 secret 文件的权限。格式为八进制,例如:0444 表示全局可读。由于 secrets 是挂载在临时文件系统上的,所以 secrets 不可写;因此,如果您设置了可写位,系统会忽视您的设置。如果您不熟悉 UNIX 的权限模式,可以使用 Permission Calculator

此外,本示例中您还需要设置环境变量 MYSQL_ROOT_PASSWORD_FILE 来配置 MySQL 应用使用/run/secrets/my_mysql 文件作为 root 密码。

通过编排模板创建应用
有关如何创建应用,参见 创建应用
您可以使用 short syntax 或者 long syntax 来在编排模板中进行 secrets 的设置。

short syntax
使用 short syntax,您仅需要指定 secret 名称。容器服务会赋予容器访问 secret 的权限并将 secret 挂载到容器的/run/secrets/<secret_name> 目录。
本示例创建名为 [backcolor=transparent]mysqlshort 的应用。在编排模板中添加密钥的信息。本示例赋权应用使用两个 secrets:[backcolor=transparent]my_mysql_password_v1 和 [backcolor=transparent]my_secret_v1。

[backcolor=transparent]编排示例:
  1. [backcolor=transparent]version[backcolor=transparent]:[backcolor=transparent] [backcolor=transparent]'3.2'
  2. [backcolor=transparent]services[backcolor=transparent]:
  3. [backcolor=transparent]  mysqlshort[backcolor=transparent]:
  4. [backcolor=transparent]    image[backcolor=transparent]:[backcolor=transparent] [backcolor=transparent]'mysql:5.7'
  5. [backcolor=transparent]    deploy[backcolor=transparent]:
  6. [backcolor=transparent]      mode[backcolor=transparent]:[backcolor=transparent] replicated
  7. [backcolor=transparent]      replicas[backcolor=transparent]:[backcolor=transparent] [backcolor=transparent]1
  8. [backcolor=transparent]      update_config[backcolor=transparent]:
  9. [backcolor=transparent]        failure_action[backcolor=transparent]:[backcolor=transparent] [backcolor=transparent]continue
  10. [backcolor=transparent]      restart_policy[backcolor=transparent]:
  11. [backcolor=transparent]        condition[backcolor=transparent]:[backcolor=transparent] none
  12. [backcolor=transparent]    environment[backcolor=transparent]:
  13. [backcolor=transparent]      [backcolor=transparent]-[backcolor=transparent] MYSQL_ROOT_PASSWORD[backcolor=transparent]=[backcolor=transparent]/run/[backcolor=transparent]secrets[backcolor=transparent]/[backcolor=transparent]my_mysql_password_v1 [backcolor=transparent]#配置 MySQL 应用使用 /run/secrets/my_mysql_password_v1 文件作为 root 密码
  14. [backcolor=transparent]    secrets[backcolor=transparent]:
  15. [backcolor=transparent]      [backcolor=transparent]-[backcolor=transparent] my_mysql_password_v1 [backcolor=transparent]#您所创建的 secret 的名称
  16. [backcolor=transparent]      [backcolor=transparent]-[backcolor=transparent] my_secret_v1 [backcolor=transparent]#您所创建的 secret 的名称
  17. [backcolor=transparent]secrets[backcolor=transparent]:[backcolor=transparent] [backcolor=transparent]#对 secrets 进行声明
  18. [backcolor=transparent]  my_mysql_password_v1[backcolor=transparent]:
  19. [backcolor=transparent]    external[backcolor=transparent]:[backcolor=transparent] [backcolor=transparent]true
  20. [backcolor=transparent]  my_secret_v1[backcolor=transparent]:
  21. [backcolor=transparent]    external[backcolor=transparent]:[backcolor=transparent] [backcolor=transparent]true

您需要在编排模板中对 secrets 进行声明,否则 secrets 无法生效。其中, external:true 表示密钥已经创建了,容器服务不会尝试创建密钥而是寻找密钥并将其用于服务上。

long syntax
通过使用 long syntax,您可以指定 secrets 的相关参数。
本示例创建名为 [backcolor=transparent]mysqllong 的应用。在编排模板中添加密钥的信息。本示例赋权应用使用两个 secrets:[backcolor=transparent]my_mysql_password_v1 和 [backcolor=transparent]my_secret_v1。

[backcolor=transparent]编排示例:
  1. [backcolor=transparent]version[backcolor=transparent]:[backcolor=transparent] [backcolor=transparent]'3.2'
  2. [backcolor=transparent]services[backcolor=transparent]:
  3. [backcolor=transparent]  mysqllong[backcolor=transparent]:
  4. [backcolor=transparent]    image[backcolor=transparent]:[backcolor=transparent] [backcolor=transparent]'mysql:5.7'
  5. [backcolor=transparent]    deploy[backcolor=transparent]:
  6. [backcolor=transparent]      mode[backcolor=transparent]:[backcolor=transparent] replicated
  7. [backcolor=transparent]      replicas[backcolor=transparent]:[backcolor=transparent] [backcolor=transparent]1
  8. [backcolor=transparent]      update_config[backcolor=transparent]:
  9. [backcolor=transparent]        failure_action[backcolor=transparent]:[backcolor=transparent] [backcolor=transparent]continue
  10. [backcolor=transparent]      restart_policy[backcolor=transparent]:
  11. [backcolor=transparent]        condition[backcolor=transparent]:[backcolor=transparent] none
  12. [backcolor=transparent]    environment[backcolor=transparent]:
  13. [backcolor=transparent]      [backcolor=transparent]-[backcolor=transparent] MYSQL_ROOT_PASSWORD[backcolor=transparent]=[backcolor=transparent]/run/[backcolor=transparent]secrets[backcolor=transparent]/[backcolor=transparent]my_mysql[backcolor=transparent]#配置 MySQL 应用使用 /run/secrets/my_mysql_password_v1 文件作为 root 密码
  14. [backcolor=transparent]    secrets[backcolor=transparent]:
  15. [backcolor=transparent]      [backcolor=transparent]-[backcolor=transparent] source[backcolor=transparent]:[backcolor=transparent] my_mysql_password_v1 [backcolor=transparent]#您所创建的 secret 的名称
  16. [backcolor=transparent]        target[backcolor=transparent]:[backcolor=transparent] my_mysql
  17. [backcolor=transparent]        uid[backcolor=transparent]:[backcolor=transparent] [backcolor=transparent]'0'
  18. [backcolor=transparent]        gid[backcolor=transparent]:[backcolor=transparent] [backcolor=transparent]'0'
  19. [backcolor=transparent]        mode[backcolor=transparent]:[backcolor=transparent] [backcolor=transparent]444
  20. [backcolor=transparent]      [backcolor=transparent]-[backcolor=transparent] source[backcolor=transparent]:[backcolor=transparent] my_secret_v1 [backcolor=transparent]#您所创建的 secret 的名称
  21. [backcolor=transparent]        target[backcolor=transparent]:[backcolor=transparent] my_secret
  22. [backcolor=transparent]        uid[backcolor=transparent]:[backcolor=transparent] [backcolor=transparent]'0'
  23. [backcolor=transparent]        gid[backcolor=transparent]:[backcolor=transparent] [backcolor=transparent]'0'
  24. [backcolor=transparent]        mode[backcolor=transparent]:[backcolor=transparent] [backcolor=transparent]444
  25. [backcolor=transparent]secrets[backcolor=transparent]:[backcolor=transparent] [backcolor=transparent]#对 secrets 进行声明
  26. [backcolor=transparent]  my_mysql_password_v1[backcolor=transparent]:
  27. [backcolor=transparent]    external[backcolor=transparent]:[backcolor=transparent] [backcolor=transparent]true
  28. [backcolor=transparent]  my_secret_v1[backcolor=transparent]:
  29. [backcolor=transparent]    external[backcolor=transparent]:[backcolor=transparent] [backcolor=transparent]true

其中:
  • [backcolor=transparent]source:您在容器服务中所创建的密钥的名称。
  • [backcolor=transparent]target:将要挂载到容器的 /run/secrets/ 目录下的文件的名称。默认情况下,与 [backcolor=transparent]source 值相同,即容器在/run/secrets/<secret_name> 目录下访问密钥。
  • [backcolor=transparent]uid:拥有容器 /run/secrets/ 目录下的 secret 文件的用户 ID。默认为 0。
  • [backcolor=transparent]gid:拥有容器 /run/secrets/ 目录下的 secret 文件的用户组 ID。默认为 0。
  • [backcolor=transparent]mode:将要挂载到容器 /run/secrets/ 目录下的 secret 文件的权限。格式为八进制,例如:0444 表示全局可读。由于 secrets 是挂载在临时文件系统上的,所以 secrets 不可写;因此,如果您设置了可写位,系统会忽视您的设置。如果您不熟悉 UNIX 的权限模式,可以使用 Permission Calculator

您需要在编排模板中对 secrets 进行声明,否则 secrets 无法生效。其中, external:true 表示密钥已经创建了,容器服务不会尝试创建密钥而是寻找密钥并将其用于服务上。
关系型数据库 MySQL Unix 数据安全/隐私保护 容器
分享到
取消 提交回答
全部回答(0)
+ 订阅

分享数据库前沿,解构实战干货,推动数据库技术变革

推荐文章
相似问题
推荐课程