在用户的证书签名请求 API 对象中,您必须指定一个组。
apiVersion: certificates.k8s.io/v1
kind: CertificateSigningRequest
metadata:
name: myname
spec:
groups:
- system:authenticated
request: someCertFile
usages:
- digital signature
- key encipherment
- server auth
我知道集群中的某些证书(例如 kubelet)必须使用此组来区分它们在集群中的角色。我相信 kubelet 的证书组是 nodes:nodename 或类似的名称。
但从用户的角度来看,这实际上意味着什么?我在这个问题上找到的唯一内容是 k8s 文档中的简短提及:https://kubernetes.io/docs/reference/access-authn-authz/certificate-signing-requests/#kubernetes-signers
答案1
回答
在了解到它与 RBAC 的相关性后,我发现组也可以在角色绑定中引用,并用于对主题组进行身份验证。 https://kubernetes.io/docs/reference/access-authn-authz/rbac/#referring-to-subjects
我还在这里发现了一些默认组:https://kubernetes.io/docs/reference/access-authn-authz/rbac/#discovery-roles
新问题,也得到了(某种程度上)的回答
证书中的组可以代替角色和角色绑定来访问集群中的某些项目吗?
是的,Kubernetes 使用用于访问集群的主题 TLS 证书来确定用户名,并通过 RBAC 或其他身份验证机制确定对帐户的访问级别。请参阅此链接: https://kubernetes.io/docs/reference/access-authn-authz/authentication/#users-in-kubernetes
据我所知https://kubernetes.io/docs/reference/access-authn-authz/rbac/#referring-to-subjects 群组基本上就是一组主题。如果我错了,请随时纠正我,但我认为这意味着如果您在 CSR 中指定群组,您可以通过 TLS 身份验证访问该群组有权访问的任何内容。