创建 Secret
Opaque
通过 yaml
Opaque 类型就是通用类型 generic,基于 base64 加密。通过 yaml 文件创建 secret 的方式如下:
CLIENT_ID="test1"SECRET="secret1"CLIENT_ID_BASE64=$(echo $CLIENT_ID | base64)SECRET_BASE64=$(echo $SECRET | base64)cat << EOF | tee secret.yamlapiVersion: v1kind: Secretmetadata:name: azure-credentialstype: Opaquedata:principal-client: $CLIENT_ID_BASE64principal-secret: $SECRET_BASE64EOFkubectl apply -f secret.yaml
也可以通过 kubectl, 这样就不用自己做一遍 base64 转码了
通过 kubectl create secret generic
参数1 —from-literal
直接在命令行里写上 key 和 value
kubectl create secret generic azure-credentials \--from-literal=principal-client=test1 \--from-literal=principal-secret=secret1
参数2 —from-file
文件名为 key,文本内容为 value
echo -n test1 > ./principal-clientecho -n secret1 > ./principal-secretkubectl create secret generic azure-credentials \--from-file=./principal-client \--from-file=./principal-secret
但是这种情况,文件名和 key 名就绑定了,如果想重新指定 key 名,可以用这种写法
echo -n test1 > ./principal-clientecho -n secret1 > ./principal-secretkubectl create secret generic azure-credentials \--from-file=principal-client=./principal-client \--from-file=principal-secret=./principal-secret
参数3 —from-env-file
当 key 的数量多起来了,就比较适合将所有的 key 和 value 写到一个文件内了,用 = 号表明 key value 的对应关系,然后参数改为 —from-env-file
cat << EOF | tee env.txt
principal-client=test1
principal-secret=secret1
EOF
kubectl create secret generic azure-credentials --from-env-file=env.txt
查询 Secret
kubectl get secrets azure-credentials -o yaml | grep ' principal-client:' | cut -d ' ' -f 4 | base64 --decode
kubectl get secrets azure-credentials -o yaml | grep ' principal-secret:' | cut -d ' ' -f 4 | base64 --decode
在 yaml 文件中使用 Secret
通过 Mount
mypod.yaml:
apiVersion: v1
kind: Pod
metadata:
name: mypod
spec:
containers:
- image: busybox
name: app
volumeMounts:
- mountPath: /etc/foo
name: foo
readOnly: true
args:
- /bin/sh
- -c
- sleep 10; touch /tmp/healthy; sleep 30000
volumes:
- name: foo
secret:
secretName: azure-credentials
kubectl apply -f mypod.yaml
kubectl exec -it mypod sh
cat /etc/foo/principal-client
cat /etc/foo/principal-secret
创建这个pod ,然后 sh 进去,可以看到两个文本文件的内容就是你想要的密码内容
我们也可以根据 secret 里不同的 key 自定义指定存放数据的文件路径及文件名,比如将配置文件进行如下修改:
apiVersion: v1
kind: Pod
metadata:
name: mypod
spec:
containers:
- image: busybox
name: app
volumeMounts:
- mountPath: /etc/foo
name: foo
readOnly: true
args:
- /bin/sh
- -c
- sleep 10; touch /tmp/healthy; sleep 30000
volumes:
- name: foo
secret:
secretName: azure-credentials
items:
- key: principal-client
path: my-group/principal-client
- key: principal-secret
path: my-group/principal-secret
kubectl apply -f mypod.yaml
kubectl exec -it mypod sh
cat /etc/foo/my-group/principal-client
cat /etc/foo/my-group/principal-secret
通过环境变量
apiVersion: v1
kind: Pod
metadata:
name: mypod
spec:
containers:
- image: busybox
name: app
args:
- /bin/sh
- -c
- sleep 10; touch /tmp/healthy; sleep 30000
env:
- name: CLIENT_ID
valueFrom:
secretKeyRef:
name: azure-credentials
key: principal-client
- name: SECRET
valueFrom:
secretKeyRef:
name: azure-credentials
key: principal-secret
kubectl apply -f mypod.yaml
kubectl exec -it mypod sh
echo $CLIENT_ID
echo $SECRET
