Linux企业运维——Kubernetes存储之Secret配置管理
Posted 是大姚呀
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux企业运维——Kubernetes存储之Secret配置管理相关的知识,希望对你有一定的参考价值。
Linux企业运维——Kubernetes(十)存储之Secret配置管理
文章目录
1、Secret简介
Secret对象类型用来保存敏感信息,例如密码、OAuth 令牌和 ssh key。
敏感信息放在secret 中比放在 Pod 的定义或者容器镜像中来说更加安全和灵活。
Pod 可以用两种方式使用secret:
- 作为volume 中的文件被挂载到 pod 中的一个或者多个容器里。
- 当kubelet 为 pod 拉取镜像时使用。
Secret的类型:
- ServiceAccount:Kubernetes 自动创建包含访问 API 凭据的 secret,并自动修改 pod以使用此类型的secret。
- Opaque:使用base64编码存储信息,可以通过base64 --decode解码获得原始数据,因此安全性弱。
- kubernetes.io/dockerconfigjson:用于存储docker registry的认证信息。
2、ServiceAccount
Service account是为了方便Pod里面的进程调用Kubernetes API或其他外部服务而设计的。它与User account不同:
-
User account是为人设计的,而service account则是为Pod中的进程调用Kubernetes API而设计;
-
User account是跨namespace的,而service account则是仅局限它所在的namespace;
-
每个namespace都会自动创建一个default service account
-
Token controller检测service account的创建,并为它们创建secret
-
开启ServiceAccount Admission Controller后
1.每个Pod在创建后都会自动设置spec.serviceAccount为default(除非指定了其他ServiceAccout)
2.验证Pod引用的service account已经存在,否则拒绝创建
3.如果Pod没有指定ImagePullSecrets,则把service account的ImagePullSecrets加到Pod中
4.每个container启动后都会挂载该service account的token和ca.crt到/var/run/secrets/kubernetes.io/serviceaccount/
3、Opaque Secret
3.1、从文件中创建secret
在configmap目录下创建并编写username和password文本文件,用命令指定这两个文本文件创建secret,查看到新创建的db-user-pass
查看信息看到的用户和密码经过base64编码,看不到明文,使用-d参数就可以解码。
默认情况下 kubectl get和kubectldescribe 为了安全是不会显示密码的内容,可以通过以下方式查看:
3.2、使用yaml文件创建secret
创建secret.yaml配置文件并应用,查看列表信息可以看到mysecret被创建
3.3、将Secret挂载到Volume中
编辑secret.yaml文件,将mysecret数据挂载到名为mysecret的Pod的/secret目录下,设置为只读
应用配置,查看pod信息,mysecret被创建
连接到mysecret容器,切换到secret目录下,可以看到两个文本文件
3.4、向指定路径映射 secret 密钥
编辑secret.yaml文件,指定key为username,其值为指定路径/secret/my-group/my-username
应用配置,看到mysecret被创建,连接到mysecret切换到secret目录,查看my-username内容
3.5、将Secret设置为环境变量
编辑secret.yaml文件,为pod设置环境变量,把mysecret的username对应的值作为SECRET_USERNAME变量,把mysecret的password对应的值作为SECRET_PASSWORD变量
应用配置,可以看到secret-env内被创建,连接到该容器,查看环境变量,可以看到刚才配置的SECRET_USERNAME变量和SECRET_USERNAME变量
环境变量读取Secret很方便,但无法支撑Secret动态更新,比如我们现在更改下SECRET_PASSWORD的值
修改密码为redhat(经过Base64编码后的)
再次查看环境变量,SECRET_PASSWORD的值还是westos,没有改变
3.6、kubernetes.io/dockerconfigjson存储docker registry的认证信息
创建myregistrykey,通过命令参数指定仓库名字、用户名和密码。查看secret信息,可以看到新创建的myregistrykey
创建westos仓库,设置为私有,这样就需要用户名和密码
编辑registry.yaml文件,配置镜像地址
应用配置文件,查看pod信息,看到mypod没有运行成功,因为仓库权限问题
修改registry.yaml文件,加上secret认证信息
现在查看pod状态,看到已经正常运行
以上是关于Linux企业运维——Kubernetes存储之Secret配置管理的主要内容,如果未能解决你的问题,请参考以下文章
Linux企业运维——Kubernetes存储之Volumes配置管理
Linux企业运维——Kubernetes(二十)Prometheus监控
Linux企业运维——Kubernetes(二十)Prometheus监控