美文网首页
Secret(存储敏感信息)

Secret(存储敏感信息)

作者: 魔曦帝天 | 来源:发表于2019-12-10 19:35 被阅读0次

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

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

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

    到目前为止,Kubernetes 支持的 Projected Volume 一共有四种:

    • Secret
    • ConfigMap
    • Downward API
    • ServiceAccountToken

    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
    

    相关文章

      网友评论

          本文标题:Secret(存储敏感信息)

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