K8S之Secret
Secret介绍
k8s secrets用于存储和管理一些敏感数据,比如密码,token,密钥等敏感信息。它把 Pod 想要访问的加密数据存放到 Etcd 中。然后用户就可以通过在 Pod 的容器里挂载 Volume 的方式或者环境变量的方式访问到这些 Secret 里保存的信息了。
Secret 有三种类型:
- Service Account :用来访问 Kubernetes API,由 Kubernetes 自动创建,并且会自动挂载到 Pod 的
/run/secrets/kubernetes.io/serviceaccount
目录中 - Opaque:base64编码格式的Secret,用来存储密码、密钥等
- kubernetes.io/dockerconfigjson:用来存储私有 docker registry 的认证信息
Service Account
系统默认使用的类型,k8s集群为了确认pod是否属于这个集群,所以在每个pod里都会有证明pod身份的信息
kubectl exec nginx-3137573019-md1u2 ls /run/secrets/kubernetes.io/serviceaccount、
ca.crt namespace token #这三个文件就是证明pod身份的东西
Opaque Secret
使用base64加密后,用来存储密码、密钥
需要注意的是:base64加密时我们手动加密的,系统不会自动加密,但是会自动解密
1、手动加密用户名和密码
Opaque 类型的数据是一个 map 类型,要求 value 是 base64 编码格式:
echo "admin" | base64 # 将用户名和密码加密
YWRtaW4=
echo -n "1f2d1e2e67df" | base64
MWYyZDFlMmU2N2Rm
这里需要注意的是,像这样创建的 Secret 对象,它里面的内容仅仅是经过了转码,而并没有被加密。在真正的生产环境中,你需要在 Kubernetes 中开启 Secret 的加密插件,增强数据的安全性。
2、生成secret
vim secret.yaml
kind: Secret
metadata:
name: mysecret
type: Opaque
data:
password: MWYyZDFlMmU2N2Rm