【问题标题】:Kubernetes - Where does it store secrets and how does it use those secrets on multiple nodes?Kubernetes - 它在哪里存储秘密以及如何在多个节点上使用这些秘密?
【发布时间】:2018-06-28 11:38:12
【问题描述】:

不是一个真正的编程问题,但很想知道 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 上使用这些进程?

【问题讨论】:

  • 所有密钥和配置都存储到etcd。它安装在集群的所有节点上,以允许 K8s 访问这些数据。
  • etcd 可以是完全不同的集群,也可以只驻留在主集群上。节点/工作者只是通过 API 访问etcd 数据,对吧?
  • 你可以在任何你想要的地方安装etcd。当您启动kube-master 时,您必须指定etcd 端点的ip:port。像 Google 或 AWS 这样的大型提供商经常将 etcd 安装为 K8s 的 pod。

标签: kubernetes minikube


【解决方案1】:

Secrets 存储在 Kubernetes 集群拥有的唯一数据存储中:etcd

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

【讨论】:

  • 这意味着kubectl 通过向etcd 数据存储发出GET 和POST 请求来开箱即用地管理它?
  • Kubectl 可以检索它们。但是当 Pod 被调度到节点上时,它是 kubelet 从 API 获取数据。
  • 只是想指出与etcd 对话的唯一组件是API 服务器。每个其他 kubernetes 组件,例如 kubectl,都与 API 服务器通信。
【解决方案2】:

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

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

当需要secret 来安装Pod 或在您的示例中从私有注册表中提取Docker 映像时,节点本地kubeletAPI Server 请求并保留在tmpfs 所以它永远不会接触任何未加密的硬盘。

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

【讨论】:

【解决方案3】:

如果您正在徘徊如何实际访问秘密(存储的文件),

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

您将获得所有键的列表(系统默认键)。您可以使用cat 命令简单地查看它们(如果它们被加密,您将看不到太多)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-09-05
    • 2023-01-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-03
    相关资源
    最近更新 更多