应用启动过程中可能需要一些敏感信息,比如访问数据库的用户名密码或者秘钥。将这些信息直接保存在容器镜像中显然不妥,Kubernetes提供的解决方案是秘密。
秘密会以密文的方式存储数据,避免了直接在配置文件中保存敏感信息.Secret会以体积的形式被挂载到仓,容器可通过文件的方式使用秘密中的敏感数据,此外,容器也可以环境变量的方式使用这些数据。
秘密可通过命令行或YAML创建。比如希望秘密中包含如下信息:
-
<李>用户名管理员李>
<李>密码123456李>
有四种方法创建秘密:
-
<李>
通过——从字面:
<代码> kubectl创建通用mysecret秘密——从字面=用户名=admin——文字=密码=123456 代码>
每个——文字对应一个信息条目。
李> <李>通过——从文件:
<代码> echo - n管理比;/用户名 echo - n 123456比;/密码。 kubectl创建通用mysecret秘密——从文件=?用户名——从文件=/密码。代码>
每个文件内容对应一个信息条目。
李> <李>通过——from-env-file:
<代码>猫& lt; & lt;EOF的在env.txt 用户名=admin 密码=123456 EOF kubectl创建秘密通用mysecret——from-env-file=env.txt 代码>
文件env。键值对的txt中每行应一个信息条目。
李> <李>通过YAML配置文件:<代码> apiVersion: v1 :秘密 元数据: 名称:mysecret 数据: 用户名:YWRtaW4=密码:MTIzNDU2 代码>李>
文件中的敏感数据必须是通过base64编码后的结果。
<代码> [root@k8s-master ~] # echo - n管理| base64 YWRtaW4=[root@k8s-master ~] # echo - n 123456 | base64 MTIzNDU2 代码>
执行kubectl应用创建秘密:
<代码> # - f mysecrete.yml kubectl适用 秘密/mysecret创建代码><编辑>使用这些创建好的秘密。编辑>
查看Secre
可以通过kubectl得到秘密查看存在的秘密。
<代码> [root@k8s-master ~] # kubectl得到秘密 名称类型数据时代 default-token-5l66h kubernetes。io/service-account-token 3 14 d mysecret不透明2 20 s 代码>
显示有两个数据条目,kubectl描述秘密查看条目的关键:
<代码> [root@k8s-master ~] # kubectl描述mysecret秘密 名称:mysecret 名称空间:默认 标签:& lt; none> 注释: 类型:不透明的 数据=https://www.yisu.com/zixun/===密码:6个字节 用户名:5个字节 (root@k8s-master ~) # 代码>
如果还想查看价值,可以用kubectl编辑秘密mysecret:
<代码> apiVersion: v1 数据: 密码:MTIzNDU2 用户名:YWRtaW4=:秘密 元数据: 注释: kubectl.kubernetes。io/last-applied-configuration: | {“apiVersion”:“v1”,“数据”:{“密码”:“MTIzNDU2”、“用户名”:“YWRtaW4="},“类型”:“秘密”、“元数据”:{"注释":{},“名字”:“mysecret”、“名称”:“默认”}} creationTimestamp:“2019 - 10 - 14 - t08:26:43z” 名称:mysecret 名称空间:默认 resourceVersion:“13845” selfLink:/api/v1/命名空间//机密/mysecret违约 uid: a713292c - 6 -有限元分析- 4065 b5ae - 239 f8fe9a76f 类型:不透明的 ~ 代码>
然后通过base64将值反编码:
<代码> [root@k8s-master ~] # echo - n MTIzNDU2 | base64解码 123456 # echo - n YWRtaW4=| base64解码 管理(root@k8s-master ~) # 代码>
如何在豆荚中使用秘密。
<编辑>卷方式使用秘密/编辑>荚可以通过卷或者环境变量的方式使用秘密。
荚的配置文件如下所示:
<代码> apiVersion: v1 :豆荚 元数据: 名称:mypod 规范: 容器: ——名称:mypod busybox映像: 参数: ——/bin/sh - - - - - - - c ——睡眠10;30000年碰/tmp/健康,睡眠 volumeMounts: ——名称:foo mountPath:/etc/foo 只读的:真 卷: ——名称:foo 秘密: secretName: mysecret 代码>
①定义体积foo,来源为秘密mysecret。
②将foo挂载到容器路径/etc/foo,可指定读写权限为只读的。
创建舱并在容器中读取秘密: