了解Kubernetes用户

时间:2018-03-03 00:26:40

标签: kubernetes kubernetes-security

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

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

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

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

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

所以:

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

感谢。

2 个答案:

答案 0 :(得分:1)

要使用的用户取决于您要使用的kubeconfig(例如〜/ .kube / config)和当前上下文。例如,如果您的〜/ .kube / config在下面,则kubernetes-admin是用户。

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

您可以添加用户。请参阅用例1:在Configure RBAC In Your Kubernetes Cluster中创建具有有限命名空间访问权限的用户。此“用户”不是“服务帐户”。

答案 1 :(得分:0)

  

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

不完全......“它没有用户对象,也没有存储用户名或其对象商店中用户的其他信息。”

例如,如果您提供了客户端证书,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文件。您可以使用您选择的名称(仅在本地引用它)和要发送到服务器的凭据来定义用户节。您在本地选择的名称与服务器无关,它只关注您指定的凭据。