文章目录
- 一、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: 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