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查看保存的姓名,密码。