Configmap 一般是用来存放明文数据的,如配置文件,对于一些敏感
数据,如密码、私钥等数据时,要用 secret 类型。
Secret 解决了密码、token、秘钥等敏感数据的配置问题,而不需要把这些敏感数据
暴露到镜像或者 Pod Spec 中。Secret 可以以 Volume 或者环境变量的方式使用。
要使用 secret,pod 需要引用 secret。Pod 可以用两种方式使用 secret:作为
volume 中的文件被挂载到 pod 中的一个或者多个容器里,或者当 kubelet 为 pod 拉取
镜像时使用。
secret 可选参数有三种:
generic: 通用类型,通常用于存储密码数据。
tls:此类型仅用于存储私钥和证书。
docker-registry: 若要保存 docker 仓库的认证信息的话,就必须使用此种类型来创
建。
Secret 类型:
Service Account:用于被 serviceaccount 引用。serviceaccout 创建时
Kubernetes 会默认创建对应的 secret。Pod 如果使用了 serviceaccount,对应的
secret 会自动挂载到 Pod 的 /run/secrets/kubernetes.io/serviceaccount 目录
中。
Opaque:base64 编码格式的 Secret,用来存储密码、秘钥等。可以通过 base64 –
decode 解码获得原始数据,因此安全性弱
kubernetes.io/dockerconfigjson:用来存储私有 docker registry 的认证信息。
2. Secret操作 2.1 通过环境变量引入 Secret#把 mysql 的 root 用户的 password 创建成 secret
[root@master1 ~]# kubectl create secret generic mysql-password --from-literal=password=mack secret/mysql-password created You have new mail in /var/spool/mail/root [root@master1 ~]# kubectl get secret NAME TYPE DATA AGE default-token-vqst8 kubernetes.io/service-account-token 3 10d mysql-password Opaque 1 9s nfs-provisioner-token-j24f6 kubernetes.io/service-account-token 3 5d [root@master1 ~]# kubectl describe secret mysql-password Name: mysql-password Namespace: default Labels:Annotations: Type: Opaque Data ==== password: 4 bytes [root@master1 ~]# #password 的值是加密的, #但 secret 的加密是一种伪加密,它仅仅是将数据做了 base64 的编码.
#创建 pod,引用 secret
cat > /root/pod-secret.yaml <2.2 通过 volume 挂载 Secret 1 创建 Secret
手动加密,基于 base64 加密
[root@master1 ~]# echo -n 'mack' | base64 #用户名 bWFjaw== [root@master1 ~]# echo -n 'mack123456' | base64 #密码 bWFjazEyMzQ1Ng==解码
[root@master1 ~]# echo bWFjaw== | base64 -d mack2 创建 yaml 文件
cat > /root/secret.yaml <Annotations: Type: Opaque Data ==== password: 10 bytes username: 4 bytes [root@master1 ~]# 3 将 Secret 挂载到 Volume 中
cat > /root/pod_secret_volume.yaml <..data/password lrwxrwxrwx. 1 root root 15 Jun 6 07:13 username -> ..data/username #



