繁体   English   中英

k8s 管理/处理容器内的机密

[英]k8s management/handling of secrets inside container

我目前正在将我的 docker 部署迁移到 k8s 清单,我想知道秘密的处理。 目前,我的 docker 容器获取 /run/secrets/app_secret_key 以获取容器内的敏感信息作为 env var。 但这与 k8s 机密处理相比有什么好处吗?另一方面,我也可以在 manifest.yaml 中执行类似的操作:

env:
- name: MYSQL_PASSWORD
  valueFrom:
    secretKeyRef:
      name: mysql-password
      key: password

这比直接将秘密作为容器内的环境变量......我能注意到的唯一区别是,如果我像这样在容器内获取 /run/secrets/app_secret_key (docker-entrypoint.sh):

export APP_SECRET_KEY="$(cat /run/secrets/app_secret_key)"

当我在部署后访问容器时,env var 不可见,似乎 env var 仅在 docker-entrypoint.sh 最初被触发的“会话”中可用(在容器/pod 启动时)。

所以我现在的问题是什么在这里更有意义:只需使用上面显示的 env: 语句或继续手动获取容器内的 /run/secrets/app_secret_key ...

提前致谢

坦率地说,两者都是同一事物的不同实现,您可以选择其中任何一个,但我更喜欢 kubernetes approch 作为安装秘密,而不是仅仅因为可见性而在运行时读取容器。

如果您寻找一个容器并不重要,但是当我们有 30-40 多个微服务在 4-5+ 环境中运行并且拥有 100 甚至 200 个秘密时。 在这种情况下,一个部署出错了,我们可以查看部署清单并找出整个应用程序。 我们不必搜索 docker 文件来了解发生了什么。

将秘密公开为 env var 或文件只是一种以 k8s 方式使用秘密的方式。

一些像密码这样的秘密只是一行长的字符串,因此将其用作 env var 很方便。 其他机密(如 ssh 私钥或 TLS 证书)可以是多行,这就是您可以将机密安装为卷的原因。

不过,建议将您的秘密声明为 k8s 秘密资源。 这样您就可以通过 kubectl 获取所需的值,而无需进入容器内部。 您还可以制作像 helm chart 这样的模板,在部署时生成秘密清单。 使用 RBAC,您还可以控制谁可以读取机密清单。

根据您的评论,是的,任何可以进入容器的用户都可以访问 shell 用户可用的资源。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM