2

我无法理解 Kubernetes 身份验证模型,特别是“用户”是什么。

假设我在一台位于 kubernetes 集群内的计算机上。我想向 API 服务器发出请求,使用kubectl.

所以: - 我需要从 api-server HTTPS 端口获取公钥。所以让我们假设这是提供给我的。- 那么,在我的请求中,我需要填充“用户”字段吗?

根据文档的这一部分,用户字段是一种方法:https ://kubernetes.io/docs/admin/authentication/#authentication-strategies

但是然后在这里https://kubernetes.io/docs/admin/accessing-the-api/#authorization我们读到实际上 kubernetes 没有用户的概念。

所以:

  • 我什至在用户字段中放置了什么/在哪里?
  • 如果,由于我控制客户端请求内容,我不能简单地在那里输入任何用户名吗?难道我不能只是尝试反复猜测任何用户名,直到找到一个具有我想要的授权的用户名吗?

谢谢。

4

2 回答 2

3

The user to be used depends on the kubeconfig for you to use (e.g. ~/.kube/config) and the current context. For example if your ~/.kube/config is below, kubernetes-admin is the user.

apiVersion: v1
kind: Config
current-context: kubernetes-admin@kubernetes
preferences: {}

contexts:
  - context:       <---- Current context to identify which cluster, user, and namespace (*) to use.
      cluster: kubernetes
      user: kubernetes-admin   <----- user for the context
    name: kubernetes-admin@kubernetes

clusters:
  - cluster:
      certificate-authority-data: REDACTED
      server: https://172.31.4.117:6443 
    name: kubernetes

users:
  - name: kubernetes-admin <----
    user:
      client-certificate-data: REDACTED
      client-key-data: REDACTED

You can add users. Please refer to Use Case 1: Create User With Limited Namespace Access in Configure RBAC In Your Kubernetes Cluster. This "User" is not "service account".


References

于 2018-03-03T20:25:22.347 回答
1

我们读到实际上 kubernetes 没有用户的概念。

不完全是……“它没有用户对象,也不在其对象存储中存储用户名或其他有关用户的信息。”</p>

例如,如果您提供了客户端证书,kubernetes 将验证证书上的签名,然后从证书主题中提取您的身份。

如果您提供了 OpenID Connect 不记名令牌,kubernetes 将验证令牌上的签名并从签名令牌中提取您的用户名和组成员身份。

kubernetes 服务器还可以使用其他方法来验证您的凭据(webhook 调用、通过身份验证代理传递您的请求等)

我什至在用户字段中放置了什么/在哪里?

在 kubectl 使用的 kubeconfig 文件中,它存储了有关将被联系的服务器的信息,以及要提供的用户凭据。您可以提供客户端 x509 证书、不记名令牌或基本身份验证用户名/密码。您选择哪一种取决于您的服务器中配置的身份验证方法。

https://kubernetes.io/docs/tasks/access-application-cluster/configure-access-multiple-clusters/#define-clusters-users-and-contexts很好地介绍了如何设置 kubeconfig 文件。您可以使用您选择的名称(只是为了在本地引用它)和要发送到服务器的凭据来定义用户节。您在本地选择的名称与服务器无关,它只关注您指定的凭据。

于 2018-03-03T01:45:53.747 回答