k8s数据持久化之Secret

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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.com
Generic:通用的、一般的。加密方式。
查看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:???????<none>??
5.Annotations:??<none>??
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:???????<none>??
5.Annotations:??<none>??
6.??
7.Type:??Opaque??
8.??
9.Data??
10.====??
11.class:?????4?bytes??
12.password:??8?bytes??
3)通过 --from-env-file:**(这种方式可以在同一个文件内写入多个数据。)**
vim lbs.txt
class=lbs
password=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:???????<none>??
5.Annotations:??<none>??
6.??
7.Type:??Opaque??
8.??
9.Data??
10.====??
11.class:?????3?bytes??
12.password:??7?bytes??
4)通过yaml配置文件的方式。(把需要保存的数据加密)
echo?lbs?|?base64
echo?www.com?|?base64??

vim lbssecret4.yaml
apiVersion: v1
kind: Secret
metadata:
  name: mysecret4
data:
  class: #编译的lbs
  password: #编译的www.com
    执行文件:
    kubectl?apply?-f?lbssecret4.yaml
    1.kubectl?describe?secrets?lbhsecret4???
2.Name:?????????lbhsecret4??
3.Namespace:????default??
4.Labels:???????<none>??
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.yaml
apiVersion: v1
kind: Pod
metadata:
  name: lbspod1
spec:
  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状态:br/>1.[root@master?lbhsecret]#?kubectl?apply?-f?pod1.yaml???
2.pod/lbspod1?created??
查看:
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.yaml
apiVersion: v1
kind: Pod
metadata:
  name: lbspod2
spec:
  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状态:br/>1.[root@master?lbhsecret]#?kubectl?apply?-f?pod2.yaml???
2.pod/lbspod2?created??
查看:
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查看保存的姓名,密码。

以上是关于k8s数据持久化之Secret的主要内容,如果未能解决你的问题,请参考以下文章

K8S之Secret

Kubernetes进阶之secret及configmap配置管理

k8s之安全信息(secret)及配置信息(configmap)管理

Kubernetes(k8s)之Secret私密凭据

k8s之安全信息(Secret)及配置信息(ConfigMap)

Kubernetes 数据持久化之Configmap