Secrets 非常类似 ConfigMaps。但是相比 ConfigMaps 多了加密能力。
安全
假如不 配置加密算法和密钥,Secrets 中的 K-V 对会以明文形式存在 etcd 中。如果配置了,则 etcd 中的数据会被加密,密码和密钥会以文件形式(未验证)保存在 master 的机器上。
kube-apiserver 可以获取和设置加密算法,因此它的权限控制也要做。
有能力创建 pod 的人也可以隐式地看到 Secrets 的值。
Pod 中的 secret volumn 会是个 tmpfs,避免落盘带来的安全问题。
拉私有 Docker Registry 镜像
也用到了 Secrets 的能力。建一个 docker-registry
类型的 secret:
$ kubectl create secret docker-registry mydockerhubsecret \
--docker-username=myusername --docker-password=mypassword \
--docker-email=my.email@provider.com
在 Pod 中配置 imagePullSecrets
:
apiVersion: v1
kind: Pod
metadata:
name: private-pod
spec:
imagePullSecrets:
- name: mydockerhubsecret
containers:
- image: username/private:tag
name: main
用 Service Account 可以避免每个 pod 都加 imagePullSecrets
。