【问题标题】:Why is kubectl not asking for a password?为什么 kubectl 不要求输入密码?
【发布时间】:2022-05-06 23:23:07
【问题描述】:

为什么 kubectl 不要求输入密码?

  • 我已经使用 kubeadm 在我的服务器上创建了一个 kubernetes 集群
  • 比我在本地机器上安装 kubectl
  • 并将 /etc/kubernetes/admin.conf 的内容从我的服务器复制到我本地计算机上的文件 ~/.kube/config 中。

现在我无法使用 kubectl 从本地计算机访问我自己的集群,而无需密码?为什么会这样?

当我想通过 ssh 访问我的服务器时,我当然需要用户/密码或允许的 ssh 密钥。为什么 kubectl 不要求我输入密码? 对我来说,这似乎不够安全。

【问题讨论】:

  • 你知道 - 你可以使用 ssh 密钥访问你的服务器而无需输入密码,对吧?
  • 是的,只有在我的 ssh 私钥没有密码的情况下——对吧?
  • 这是“other”类型的身份验证。简而言之,该算法允许公钥/非密钥使用数学运算来验证密钥/私钥所有者的身份。
  • 但是在我的工作站上复制 kubernetes/admin.conf 就像将 root 密码从我的服务器复制到我的本地文件系统中一样。这是我不明白的。
  • 所以把它留在你的服务器上并从那里命令你的 k8s 集群。在其他方面,您 kubeconfig 中的帐户可以拥有一组不同的权限(不是 root 权限)或在 webhook 模式下工作(但主题不同)

标签: kubernetes kubectl


【解决方案1】:

Kubernetes 支持不同的身份验证策略,定义为here

一般情况下,Kubernetes 集群使用client certificate authentication。如果您查看 ~/.kube/config 文件,您会看到类似这样的字段:

- name: kubernetes-admin
  user:
    client-certificate-data: <BASE64 ENCODED X509 CERTIFICATE>
    client-key-data:  <BASE64 ENCODED PRIVATE KEY FOR THE CERTIFICATE>

可以看到kubernetes-admin用户有一个客户端证书数据和密钥。此证书受集群的Certificate Authority (CA) 信任。

当您使用kubectl 时,它会将用户的client certificate data 发送到您的集群,您的集群CA 会对其进行验证。如果客户端通过验证,则可以访问集群。

【讨论】:

  • 客户端证书是一个选项,但绝对不是最常见的,OIDC 是迄今为止最常见的身份验证选项。 kubectl 的客户端证书通常不是一个好主意,因为没有撤销模型。
  • 感谢您的回答。我现在更好地理解它,但管理访问似乎并不容易。我发现了这个blog 如何创建客户端证书。但这不是一个简单的方法。我想我可以在 kubernetes 主节点的任何地方提供我的公共 ssh 密钥,以便将 api 服务器与我的私钥一起使用。
猜你喜欢
  • 2021-11-24
  • 2013-10-24
  • 1970-01-01
  • 2011-04-18
  • 2013-10-07
  • 2016-09-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多