上节课我们学习了ConfigMap的使用,我们说ConfigMap这个资源对象是Kubernetes当中非常重要的一个对象,一般情况下ConfigMap是用来存储一些非安全的配置信息,如果涉及到一些安全相关的数据的话用ConfigMap就非常不妥了,因为ConfigMap是明文存储的,我们说这个时候我们就需要用到另外一个资源对象了:Secret,Secret用来保存敏感信息,例如密码、OAuth 令牌和 ssh key等等,将这些信息放在Secret中比放在Pod的定义中或者docker镜像中来说更加安全和灵活。
Secret
有三种类型:
- Opaque:
base64
编码格式的 Secret,用来存储密码、密钥等;但数据也可以通过 base64 –decode解码得到原始数据,所有加密性很弱。 - kubernetes.io/dockerconfigjson:用来存储私有
docker registry
的认证信息。 - kubernetes.io/service-account-token:用于被
serviceaccount
引用,serviceaccout 创建时Kubernetes
会默认创建对应的secret
。Pod
如果使用了serviceaccount
,对应的secret
会自动挂载到Pod
目录/run/secrets/kubernetes.io/serviceaccount
中。 - 上节课我们学习了
ConfigMap
的使用,我们说ConfigMap
这个资源对象是Kubernetes
当中非常重要的一个对象,一般情况下ConfigMap
是用来存储一些非安全的配置信息,如果涉及到一些安全相关的数据的话用ConfigMap
就非常不妥了,因为ConfigMap
是明文存储的,我们说这个时候我们就需要用到另外一个资源对象了:Secret
,Secret
用来保存敏感信息,例如密码、OAuth 令牌和 ssh key等等,将这些信息放在Secret
中比放在Pod
的定义中或者docker
镜像中来说更加安全和灵活。
-
Secret
有三种类型: - kubernetes.io/service-account-token:用于被
serviceaccount
引用,serviceaccout 创建时Kubernetes
会默认创建对应的secret
。Pod
如果使用了serviceaccount
,对应的secret
会自动挂载到Pod
目录/run/secrets/kubernetes.io/serviceaccount
中。
最后我们来对比下Secret和ConfigMap这两种资源对象的异同点:
相同点:
- key/value 的形式
- 属于某个特定的
namespace
- 可以导出到环境变量
- 可以通过目录/文件形式挂载
- 通过
volume
挂载的配置信息均可热更新
不同点:
- Secret 可以被
ServerAccount
关联 - Secret 可以存储
docker register
的鉴权信息,用在ImagePullSecret
参数中,用于拉取私有仓库的镜像 - Secret 支持
Base64
加密 - Secret 分为 kubernetes.io/service-account-token、kubernetes.io/dockerconfigjson、Opaque 三种类型,而
Configmap
不区分类型