我在尝试理解 Kubernetes 身份验证模型时遇到了麻烦,尤其是"用户"是什么。
假设我在一台计算机上,该计算机位于 kubernetes 集群内。我想使用kubectl
向 API 服务器发出请求。
所以: - 我需要从 API 服务器 HTTPS 端口获得公钥。因此,让我们假设这是提供给我的。 - 然后,在我的请求中,我需要填充"用户"字段吗?
根据文档的这一部分,用户字段是一种方法:https://kubernetes.io/docs/admin/authentication/#authentication-strategies
但是在这里 https://kubernetes.io/docs/admin/accessing-the-api/#authorization 我们读到,实际上 kubernetes 没有用户的概念。
所以:
- 我什至在用户字段中放置什么/在哪里?
- 如果,由于我控制客户端请求内容,我不能简单地在那里输入任何用户名吗?我不能反复尝试猜测任何用户名,直到找到一个具有我想要的授权的用户名吗?
谢谢。
要使用的用户取决于 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
您可以添加用户。请参阅在 Kubernetes 集群中配置 RBAC 中的用例 1:创建具有有限命名空间访问权限的用户。此"用户"不是"服务帐户"。
References
- 在 Kubernetes 集群中配置 RBAC
- 配置对多个集群的访问
我们读到实际上 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 文件。您可以使用您选择的名称(只是通过本地引用它)和要发送到服务器的凭据来定义用户节。您在本地选择的名称与服务器无关,它只关注您指定的凭据。