【Kubernetes资源篇】Secret加密数据配置管理详解
一、Secret加密配置理论知识
1、Secret是什么?
上篇文章讲解了 ConfigMap资源,用于存放明文非加密数据,比如程序的配置文件等信息,ConfigMap并不能实现加密,如果存放一下token、密码、秘钥等敏感信息我们要使用Secret类型来进行加密。
2、Secret和configMap的区别
-
ConfigMap:用于存放文明非加密配置信息。 Secret:用于存放加密数据,比如密码、token等信息。
3、Secret的参数和类型
Secret三种可选参数:
-
generic:通用类型,常于存储密码数据。 tls:用于存储私钥和证书。 docker-registry:用于存放docker仓库的认证信息。
Secret三种类型:
-
Service Account:用于被 serviceaccount 引用。serviceaccout 创建时 Kubernetes 会默认创建对应的 secret。Pod 如果使用了 serviceaccount,对应的 secret 会自动挂载到 Pod 的 /run/secrets/kubernetes.io/serviceaccount 目录中。 Opaque:base64编码格式的Secret,用来存储密码、秘钥等。可以通过base64 --decode解码获得原始数据,因此安全性弱 kubernetes.io/dockerconfigjson:用来存储私有docker registry的认证信息。
二、实践:使用Secret进行加密
1、方式一:环境变量方式引入
首先先针对 username、password 值进行加密:
echo admin|base64 echo NTQ34tg*@19VF-AdmiN|base64
创建名为var-secret 的Secret
cat varSecretConfig.yaml --- apiVersion: v1 kind: Secret metadata: name: var-secret type: Opaque # 指定加密方式 data: username: YWRtaW4K # 值是加密后的 password: TlRRMzR0ZypAMTlWRi1BZG1pTgo=
使用busybox镜像创建Deployment资源,并引入Secret
cat vardeploy.yaml --- apiVersion: apps/v1 kind: Deployment metadata: name: vardemo spec: replicas: 1 selector: matchLabels: type: var template: metadata: labels: type: var spec: containers: - name: vardemo image: busybox:1.28.0 imagePullPolicy: IfNotPresent command: ["/bin/sh", "-c", "sleep 36000"] env: - name: password valueFrom: secretKeyRef: name: var-secret key: password - name: username valueFrom: secretKeyRef: name: var-secret key: username
执行YAML文件:
kubectl apply -f varSecretConfig.yaml kubectl apply -f vardeploy.yaml
查看创建资源状态:
kubectl get pod -l type=var kubectl get secret var-secret kubectl describe secret var-secret
进入容器查看变量,是否成功引入:
kubectl exec -it vardemo-5cf58dd664-vnv5q -- /bin/sh echo $username admin echo $password NTQ34tg*@19VF-AdmiN
2、方式二:卷挂载方式引入
创建名为volume-secret 的Secret
cat volumeSecretConfig.yaml --- apiVersion: v1 kind: Secret metadata: name: volume-secret type: Opaque data: username: YWRtaW4K password: TlRRMzR0ZypAMTlWRi1BZG1pTgo=
创建deployment,引入secret
cat volumedeploy.yaml --- apiVersion: apps/v1 kind: Deployment metadata: name: volumedemo spec: replicas: 1 selector: matchLabels: type: volume template: metadata: labels: type: volume spec: volumes: - name: volume-secret secret: secretName: volume-secret # 定义挂载卷 containers: - name: volumedemo image: busybox:1.28.0 imagePullPolicy: IfNotPresent command: ["/bin/sh", "-c", "sleep 36000"] volumeMounts: - name: volume-secret mountPath: /tmp readOnly: true
执行YAML文件:
kubectl apply -f volumeSecretConfig.yaml kubectl apply -f volumedeploy.yaml
进入容器查看:
kubectl exec -it volumedemo-6dc47cff57-qstv4 -- /bin/sh cat /tmp/password NTQ34tg*@19VF-AdmiN cat /tmp/username admin
下一篇:
解决按返回键软键盘关闭后出现空白问题