千家信息网

k8s数据持久化之Secret

发表于:2025-02-07 作者:千家信息网编辑
千家信息网最后更新 2025年02月07日,一、Secret资源对象:解决了密码、token、密钥等敏感数据的配置问题,而不需要把这些敏感数据暴露到镜像或者Pod Spec中。Secret可以以Volume或者环境变量的方式使用。用来保存一些敏
千家信息网最后更新 2025年02月07日k8s数据持久化之Secret

一、
Secret资源对象:解决了密码、token、密钥等敏感数据的配置问题,而不需要把这些敏感数据暴露到镜像或者Pod Spec中。Secret可以以Volume或者环境变量的方式使用。
用来保存一些敏感信息,比如数据库的用户名密码或者密钥。
Secret有三种类型:
1.Service Account:用来访问Kubernetes API,由Kubernetes自动创建,并且会自动挂载到Pod的/run/secrets/kubernetes.io/serviceaccount目录中。
2.Opaque:base64编码格式的Secret,用来存储密码、密钥等。
3.Kubernetes.io/dockerconfigjson:用来存储私有docker registry的认证信息。

二,以实验测试的方式,创建4种secret资源。
姓名:class=lbs
密码:password=www.com
创建2个Pod,分别以挂载Volume的方式,和以环境变量env的方式去使用,secret2,和secret4.

1)通过 --from-literal(文字的):kubectl create secret generic **lbssecret1 (创建secret资源的名)**--from-literal=class=lbs --from-literal=password=www.comww.comGeneric:通用的、一般的。加密方式。查看secret资源5. kubectl get secrets   6.NAME                  TYPE                                  DATA   AGE  7.lbssecret1            Opaque                                2      24s  使用describe可以查看secret资源的详细信息。**(可以看到是以密文的方式存储)**1kubectl describe secrets lbssecret1   2.Name:         lbssecret1  3.Namespace:    default  4.Labels:         5.Annotations:    6.  7.Type:  Opaque  8.  9.Data  10.====  11.class:     3 bytes       #只能查看到数据的大小,无法查看到数据内容。12.password:  7 bytes  2)通过 --from-file(文件):(**这种方式不推荐使用,需要将存储的数据写入到文件中,注意每个文件只能存储一个数据。)**echo lbs >class echo www.com >password kubectl  create  secret  generic lbssecret2  --from-file=class --from-file=password  查看: 1.kubectl describe secrets lbssecret2   2.Name:         lbssecret2  3.Namespace:    default  4.Labels:         5.Annotations:    6.  7.Type:  Opaque  8.  9.Data  10.====  11.class:     4 bytes  12.password:  8 bytes  3)通过 --from-env-file:**(这种方式可以在同一个文件内写入多个数据。)**vim lbs.txtclass=lbspassword=www.com(保存退出)kubectl  create secret generic mysecret3 --from-env-file=lbs.txt查看:1.kubectl describe secrets lbssecret3   2.Name:         lbssecret3  3.Namespace:    default  4.Labels:         5.Annotations:    6.  7.Type:  Opaque  8.  9.Data  10.====  11.class:     3 bytes  12.password:  7 bytes  4)通过yaml配置文件的方式。(把需要保存的数据加密)echo lbs | base64echo www.com | base64  vim lbssecret4.yamlapiVersion: v1kind: Secretmetadata:  name: mysecret4data:  class: #编译的lbs  password: #编译的www.com    执行文件:    kubectl apply -f lbssecret4.yaml    1.kubectl describe secrets lbhsecret4   2.Name:         lbhsecret4  3.Namespace:    default  4.Labels:         5.Annotations:    6.Type:         Opaque  7.  8.Data  9.====  10.password:  8 bytes  11.class:     4 bytes  

创建2个Pod,分别以挂载的方式,和以环境变量的方式去使用,secret2,和secret4.

1)以Volume挂载的方式:使用lbssecret2.vim pod1.yamlapiVersion: v1kind: Podmetadata:  name: lbspod1spec:  containers:  - name: lbspod    image: busybox    args:      - /bin/sh      - -c      - sleep 300000    volumeMounts:    - name: secret-lbs      mountPath: "/etc/secret-lbs"  挂在到pod容器内的路径      readOnly: true  volumes:    - name: secret-lbs      secret:        secretName: lbssecret2

执行yaml文件,查看Pod状态:1.[root@master lbhsecret]# kubectl apply -f pod1.yaml
br/>1.[root@master lbhsecret]# kubectl apply -f pod1.yaml

查看:
3. kubectl get pod
4.NAME READY STATUS RESTARTS AGE
5.lbspod1 1/1 Running 0 26s
进入pod内,挂载的路径中。使用cat 查看class姓名,密码(cat class)查看数据是否挂载成功。(可以发现会自动帮助解密)
2)以环境变量的方式:使用lbssecret4.

vim  pod2.yamlapiVersion: v1kind: Podmetadata:  name: lbspod2spec:  containers:  - name: lbspod    image: busybox    args:      - /bin/sh      - -c      - sleep 300000    env:      - name: SECRET_CLASS#容器内的变量名        valueFrom:          secretKeyRef:#提取环境变量的值            name: lbssecret4#调用secret资源的lbssecret4            key: class#调用lbssecret4对应class的值      - name: SECRET_PASSWORD        valueFrom:          secretKeyRef:            name: lbssecret2            key: password

执行yaml文件,查看Pod状态:1.[root@master lbhsecret]# kubectl apply -f pod2.yaml
br/>1.[root@master lbhsecret]# kubectl apply -f pod2.yaml

查看:
3. kubectl get pod
4.NAME READY STATUS RESTARTS AGE
5.lbspod1 1/1 Running 0 10m
6.lbspod2 1/1 Running 0 39s
进入pod中查看数据。可使用echo的方式(echo容器内的变量名)
例如:echo $SECRET_CLASS查看保存的姓名,密码。

0