我无法理解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没有用户的概念。
所以:
感谢。
答案 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文件。您可以使用您选择的名称(仅在本地引用它)和要发送到服务器的凭据来定义用户节。您在本地选择的名称与服务器无关,它只关注您指定的凭据。