美文网首页
Pod挂载(Secret )

Pod挂载(Secret )

作者: 夜醉梦紅尘 | 来源:发表于2019-12-10 11:06 被阅读0次

一种特殊的Volume: Projected Volume ,你可以把它翻译为“投射数据卷”。

Ps:Projected Volume 是 Kubernetes v1.11 之后的新特性

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

到目前为止,Kubernetes 支持的 Projected Volume 一共有四种:
1.Secret(存放数据库的 Credential 信息)
2.ConfigMap(ConfigMap 保存的是不需要加密的,应用所需的配置信息)
3.Downward API(让 Pod 里的容器能够直接获取到这个 Pod API 对象本身的信息)
4.Server Account(定义授权信息,特殊的Secret)

Secret 最典型的使用场景,莫过于存放数据库的 Credential 信息。

# secret-host.yaml
apiVersion: v1
kind: Pod
metadata:
  name: nginx-test
spec:
  containers:
  - name: nginx-secret
    image: busybox
    args:
    - sleep
    - "86400"
    volumeMounts:
    - name: rousecret
      mountPath: "/projected-volume"      #将Volume挂载到容器内部的/projected-volume目录下
      readOnly: true
  volumes:
  - name: rousecret
    secret:
      secretName: rousecret

#secret.yaml
apiVersion: v1
kind: Secret
metadata:
  name: rousecret
type: Opaque
data:
  user: YWRtaW4=
  pass: MTIzNDU2

这里的user以及pass均使用base6转码:

[root@k8s-master pods]# echo -n "admin" | base64
YWRtaW4=

[root@k8s-master pods]# echo -n "123456" | base64
MTIzNDU2

具体步骤:

kubectl create -f secret.yaml   #创建scerets
kubectl create -f secret-host.yaml  #创建容器
kubectl exec -it nginx -c nginx-secret sh #进入容器
/ # cat /projected-volume/..data/user
admin
/ # cat /projected-volume/..data/pass
123456

[root@k8s-master pods]# kubectl get secrets 
NAME                  TYPE                                  DATA   AGE
rousecret             Opaque                                2      51m

修改user以及pass值

#方法一
[root@k8s-master pods]# echo "root" | base64
cm9vdAo=
修改secret.yaml中的值
将secret.yaml中user的值替换为上面的值
kubectl apply -f secret.yaml 
之后进入容器内即可查看user的值已经改变

方法二
kubectl edit secrets rousecret
同样的,将上面转码得到的值应用到打开的文件中
再进入容器查看时,user以发生改变

当然,也可以把user与pass分开创建


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

cat ./username.txt
admin
cat ./password.txt
c1oudc0w!
kubectl create secret generic user --from-file=./username.txt
kubectl create secret generic pass --from-file=./password.txt

[root@k8s-master pods]kubectl get secrets 
NAME                  TYPE                                  DATA   AGE
user                   Opaque                                1      51m
pass                   Opaque                                1      51m

相关文章

网友评论

      本文标题:Pod挂载(Secret )

      本文链接:https://www.haomeiwen.com/subject/cygwgctx.html