全部产品
存储与CDN 数据库 安全 应用服务 数加·人工智能 数加·大数据基础服务 互联网中间件 视频服务 开发者工具 解决方案 物联网
容器服务

在服务中使用密钥

更新时间:2017-09-12 09:14:10

您可以通过创建应用来指定服务中使用的 secrets。您可以为服务赋权使用一个或多个 secrets。

前提条件

您已经创建了 secrets。有关如何创建 secrets,参见 创建密钥

使用限制

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

通过镜像创建应用

有关如何创建应用,参见 创建应用

本示例创建名为 mysql 的 MySQL 应用。在应用配置的 密钥 部分设置 secrets 信息。本示例赋权应用使用两个 secrets:my_mysql_password_v1my_secret_v1

2

其中:

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

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

3

通过编排模板创建应用

有关如何创建应用,参见 创建应用

您可以使用 short syntax 或者 long syntax 来在编排模板中进行 secrets 的设置。

short syntax

使用 short syntax,您仅需要指定 secret 名称。容器服务会赋予容器访问 secret 的权限并将 secret 挂载到容器的 /run/secrets/<secret_name> 目录。

本示例创建名为 mysqlshort 的应用。在编排模板中添加密钥的信息。本示例赋权应用使用两个 secrets:my_mysql_password_v1my_secret_v1

1

编排示例:

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

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

long syntax

通过使用 long syntax,您可以指定 secrets 的相关参数。

本示例创建名为 mysqllong 的应用。在编排模板中添加密钥的信息。本示例赋权应用使用两个 secrets:my_mysql_password_v1my_secret_v1

3

编排示例:

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

其中:

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

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

本文导读目录