k8s 深入剖析-01-投射数据卷 Secret、ConfigMap、ServiceAccountToken

一、投射数据卷(Projected Volume)

在 k8s 中有几种特殊的Volume,它们存在的意义不是存放容器里的数据,也不是用于容器和宿主机之间的数据交换,而是为容器提供预先定义好的数据。所以,从容器的角度来看,这些 Volume 里的信息就仿佛是被 k8s “投射” 进入容器中的,这正是 Projected Volume 的含义。

 到目前为止,k8s支持的常用 Projected Volume 共有以下 4 中:
 (1)Secret
   (2) ConfigMap
     (3) ServiceAccountToken

Secret

Secret 的作用就是把Pod想要访问的加密数据存放到 etcd 中,你就可以通过在 Pod 的容器里挂载 Volume 的方式访问这些Secret 里保存的信息了。

test-secret-volume.yaml

[root@k8s-master01 test]# cat test-secret-volume.yaml 
apiVersion: v1
kind: Pod
metadata:
  name: test-projected-volume
spec:
  containers:
  - name: test-secret-volume
    image: busybox
    args:
    - sleep
    - "86400"
    volumeMounts:
    - name: mysql-cred
      mountPath: "/projected-volume"
      readOnly: true
  volumes:
  - name: mysql-cred
    projected:
      sources:
      - secret:
          name: user
      - secret:
          name: pass
[root@k8s-master01 test]# 

mysecret.yaml

[root@k8s-master01 test]# cat mysecret.yaml 
apiVersion: v1
kind: Secret
metadata:
  name: mysecret
type: Opaque
data:
  user: YWRtaW4=
  pass: MTIzNDU2

Secret 对象要求这些数据必须是经过Base64转码的,以免出现明文密码的隐患;

[root@k8s-master01 ~]# echo -n 'admin' | base64
YWRtaW4=

[root@k8s-master01 ~]# echo -n '123456' | base64
MTIzNDU2

部署:

kubectl apply -f mysecret.yaml 
kubectl apply -f test-secret-volume.yaml

为者常成,行者常至