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

viv*_*d4v 6 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
Run Code Online (Sandbox Code Playgroud)

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

小智 7

Kubernetes 中的所有数据都由API Server对数据存储执行 CRUD 操作的组件管理(当前唯一的选项是etcd)。

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

secret需要挂载在 a 中Pod或在您的示例中从私有注册表中提取 Docker 映像时,API Server节点本地从 中请求它kubelet并保存在其中,tmpfs因此它永远不会接触任何未加密的硬盘。

在这里,另一个安全建议开始发挥作用,称为节点授权(再次通过设置正确的标志并将证书分发给 API Server 和 Kubelets 来设置)。启用节点授权后,您可以确保kubelet只能请求secrets要在该特定节点上运行的资源(包括),因此被黑节点只会公开该单个节点上的资源,而不是所有资源。


whi*_*s11 0

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

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