Kubernetes - 它在哪里存储机密以及如何在多个节点上使用这些机密?

时间:2018-01-19 09:09:47

标签: kubernetes minikube

不是真正的编程问题,但很想知道Kubernetes或Minikube如何管理秘密&在多个节点/ pod上使用它?

假设我创建了一个秘密来使用kubectl拉取图像,如下所示 -

$ kubectl create secret docker-registry regsecret --docker-server=https://index.docker.io/v1/ --docker-username=$USERNM --docker-password=$PASSWD --docker-email=vivekyad4v@gmail.com

后端会发生什么过程?k8s或Minikube将如何在多个节点/ pod上使用这些进程?

3 个答案:

答案 0 :(得分:4)

Kubernetes中的所有数据都由API Server组件管理,该组件对数据存储执行CRUD操作(仅限当前选项为etcd)。

当您向secret提交kubectl API Server时,它会将资源和数据存储在etcd中。建议在API服务器中为秘密启用加密(通过设置正确的标志),以便数据在静止时加密,否则任何有etcd访问权限的人都可以读取您的secrets用纯文本。

secret或您的示例中需要Pod来从私有注册表中提取Docker镜像时,需要API Server来自节点的kubelet - 本地tmpfs并保留在kubelet中,因此它永远不会触及任何未加密的硬盘。

这里有另一个安全建议,称为节点授权(再次通过设置正确的标志并将证书分发到API服务器和Kubelet来设置)。启用节点授权后,您可以确保secrets只能请求要在该特定节点上运行的资源(包括!),因此被黑客入侵的节点只会公开该节点上的资源节点,而不是一切。

答案 1 :(得分:0)

Secrets存储在kubernetes群集中唯一的数据存储区中:etcd

与其他所有资源一样,kubelet可执行文件(在每个节点中运行)通过查询k8s'来检索它们。 API server

答案 2 :(得分:0)

如果您正在徘徊如何真正访问机密(存储的文件),

kubectl -n kube-system exec -it <etcd-pod-name> ls -l /etc/kubernetes/pki/etcd

您将获得所有键(系统默认键)的列表。您只需使用cat命令即可​​查看它们(如果它们已加密,您将看不到太多内容)