文章目录
- 一、Secret加密配置理论知识
- 1、Secret是什么?
- 2、Secret和configMap的区别
- 3、Secret的参数和类型
- 二、实践:使用Secret进行加密
- 1、方式一:环境变量方式引入
- 2、方式二:卷挂载方式引入
一、Secret加密配置理论知识
1、Secret是什么?
上篇文章讲解了 ConfigMap资源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: 1selector:matchLabels:type: vartemplate:metadata:labels:type: varspec:containers:- name: vardemoimage: busybox:1.28.0imagePullPolicy: IfNotPresentcommand: ["/bin/sh", "-c", "sleep 36000"]env:- name: passwordvalueFrom:secretKeyRef:name: var-secretkey: password- name: usernamevalueFrom:secretKeyRef:name: var-secretkey: 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/shecho $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: YWRtaW4Kpassword: TlRRMzR0ZypAMTlWRi1BZG1pTgo=
创建deployment,引入secret
cat volumedeploy.yaml
---
apiVersion: apps/v1
kind: Deployment
metadata:name: volumedemo
spec:replicas: 1selector:matchLabels:type: volumetemplate:metadata:labels:type: volumespec:volumes:- name: volume-secretsecret:secretName: volume-secret # 定义挂载卷containers:- name: volumedemoimage: busybox:1.28.0imagePullPolicy: IfNotPresentcommand: ["/bin/sh", "-c", "sleep 36000"]volumeMounts:- name: volume-secretmountPath: /tmp readOnly: true
执行YAML文件:
kubectl apply -f volumeSecretConfig.yaml
kubectl apply -f volumedeploy.yaml
进入容器查看:
kubectl exec -it volumedemo-6dc47cff57-qstv4 -- /bin/shcat /tmp/password
NTQ34tg*@19VF-AdmiNcat /tmp/username
admin