Secret on kubernetes
Secret on kubernetes
Secret在kubernetes中用于存放敏感数据,降低暴露风险。
POD有2种方式来使用secret:作为volume的一个域被容器挂载,或者拉取镜像的时候被kubelet引用。
Secret三种类型:
Opaque
:使用base64编码明文来存放,可以通过base64 --decode解码获得原始数据,安全性弱。kubernetes.io/dockerconfigjson
:用来存储私有docker仓库的认证信息。kubernetes.io/service-account-token
:用于被serviceaccount引用,serviceaccout 创建时Kubernetes会默认创建对应的secret。Pod如果使用了serviceaccount,对应的secret会自动挂载到Pod的/run/secrets/kubernetes.io/serviceaccount
目录中。
Opaque类型
Opaque类型使用base64编码存储信息
创建base64编码
[root@master01 ~]# echo -n 'admin' | base64
YWRtaW4=
[root@master01 ~]# echo -n '123456' | base64
MTIzNDU2
创建Secret
apiVersion: v1
kind: Secret
metadata:
name: testsecret
namespace: test
type: Opaque
data:
username: YWRtaW4=
password: MTIzNDU2
查看Secret
[root@master01 ~]# kubectl -n test get secret testsecret -o yaml
apiVersion: v1
data:
password: MTIzNDU2
username: YWRtaW4=
kind: Secret
metadata:
creationTimestamp: "2020-05-15T01:31:20Z"
name: testsecret
namespace: test
resourceVersion: "29716401"
selfLink: /api/v1/namespaces/test/secrets/testsecret
uid: a26a3cd9-2e19-4292-925e-1e9a8e16af3a
type: Opaque
可以获得明文,较为不安全:
[root@master01 ~]# echo YWRtaW4= |base64 --decode
admin[root@master01 ~]# echo MTIzNDU2 |base64 --decode
123456