# 官方提供@yunTaoScripts 密码管理 🔥🔥
# Secret
# 创建secret
- 一、参数键值对
kubectl create secret generic mysecret1 --from-literal=user=tony --from-literal=password=123 mysql-secret
- 二、文件中取值
echo -n tom > user
echo -n redhat > password1
echo -n redhat > password2
kubectl create secret generic mysecret2 --from-file=./user --from-file=./password1 --from-file=./password2
- 三、文件中取键值
cat > env.txt <<EOF
user=tom
password1=redhat
password2=redhat
EOF
kubectl create secret generic mysecret3 --from-env-file=env.txt
kubectl get secret mysecret3 -o yaml
Secret有三种类型:
- Opaque:base64编码格式的Secret:
- 用来存储密码、密钥等;但 数据也通过
base64 –decode
解码得到原始数据,所有加密性很弱。
- kubernetes.io/dockerconfigjson:
- 用来存储私有docker registry的认证信息。
- kubernetes.io/service-account-token:
- 用于被serviceaccount引用。 serviceaccout创建时Kubernetes会默认创建对应的secret。Pod如果 使用了serviceaccount,对应的secret会自动挂载到Pod目录 /run/secrets/ kubernetes.io/serviceaccount中。
# POD引用secret
- 通过卷的方式挂载
注意:
- 如果这里subPath如果不写的话,则
/data/issue
就是一个目录,该场景一般用于挂载新目录,会覆盖原来的目录 - subPath一般用于文件挂挂载,内容和mountPath的basename保持一致,该场景一般用于替换文件,不会覆盖原来的目录
- 只写mountPath 就会在目录下创建链接文件,文件名就是secret的data的键。
apiVersion: v1
kind: Pod
metadata:
creationTimestamp: null
labels:
run: app
name: app
spec:
volumes:
- name: xyt
secret:
secretName: mysecret3
containers:
- image: nginx
name: app
imagePullPolicy: IfNotPresent
volumeMounts:
- name: xyt
mountPath: '/data/issue'
readOnly: true
resources: {}
dnsPolicy: ClusterFirst
restartPolicy: Always
status: {}
- 通过变量的方式使用
apiVersion: v1
kind: Pod
metadata:
creationTimestamp: null
labels:
run: marapp
name: marapp
spec:
containers:
- image: mariadb
name: marapp
imagePullPolicy: IfNotPresent
env:
- name: MARIADB_ROOT_PASSWORD
valueFrom:
secretKeyRef:
name: mysql-secret
key: password
resources: {}
dnsPolicy: ClusterFirst
restartPolicy: Always
status: {}
# configMap
# 创建configMap
kubectl create configmap my1 --from-literal=user=tom --from- literal=password=redhat
echo -n tom > user
echo -n redhat > password1
kubectl create configmap my2 --from-file=./user --from-file=./password1
cat env.txt user=tom password=redhat
kubectl create configmap my3 --from-env-file=./env.txt
# POD引用configMap
- 通过卷的方式挂载
注意:
- 如果这里subPath如果不写的话,则
/data
就是一个目录,该场景一般用于挂载新目录,会覆盖原来的目录 - subPath一般用于文件挂挂载,内容和mountPath的basename保持一致,该场景一般用于替换文件,不会覆盖原来的目录
- 只写mountPath 就会在目录下创建链接文件,文件名就是secret的data的键。
- 不写subPath会在/data/目录下创建链接文件,而非原文件
apiVersion: v1
kind: Pod
metadata:
creationTimestamp: null
labels:
run: app
name: app
spec:
volumes:
- name: xyt
configMap:
name: my5
containers:
- image: nginx
name: app
imagePullPolicy: IfNotPresent
volumeMounts:
- name: xyt
mountPath: '/data/'
readOnly: true
resources: {}
dnsPolicy: ClusterFirst
restartPolicy: Always
status: {}
- 增加subPath则会在目录创建原文件,而非链接文件(但是__文件名称要和configMap的键保持一致,否则创建的是文件夹__)。
apiVersion: v1
kind: Pod
metadata:
creationTimestamp: null
labels:
run: app
name: app
spec:
volumes:
- name: xyt
configMap:
name: my5
containers:
- image: nginx
name: app
imagePullPolicy: IfNotPresent
volumeMounts:
- name: xyt
mountPath: '/data/tongweb.xml'
subPath: tongweb.xml
- name: xyt
mountPath: '/data/tongweb2.xml'
subPath: tongweb2.xml
readOnly: true
resources: {}
dnsPolicy: ClusterFirst
restartPolicy: Always
status: {}
- 通过环境变量引用
apiVersion: v1
kind: Pod
metadata:
creationTimestamp: null
labels:
run: marapp
name: marapp
spec:
containers:
- image: mariadb
name: marapp
imagePullPolicy: IfNotPresent
env:
- name: MARIADB_ROOT_PASSWORD
valueFrom:
configMapKeyRef:
name: my1
key: password
resources: {}
dnsPolicy: ClusterFirst
restartPolicy: Always
status: {}
← 快速链接