我使用GKE API创建了GKE集群。以下是我使用的有效负载和终点。
API: https://container.googleapis.com/v1/ {parent = projects / / locations / } / clusters
方法: POST
RequestBody:
{ “群集”:{ “ name”:“ test”, “ masterAuth”:{ “ clientCertificateConfig”:{ “ issueClientCertificate”:为true } } .. } ...... ..... }
注意:我正在通过将clientCertificate设置为true来创建启用masterAuth的GKE集群。创建集群后,我使用来自GKE API的clusterCaCertificate,clientCertificate和clientKey信息(即通过描述集群)在本地计算机中创建了kubeconfig。
来自服务器的错误(禁止):禁止节点:用户“客户端” 无法在集群范围内的API组“”中列出资源“节点”
GKE提供的描述API的clusterCaCertificate信息具有 CN =“ client” ,但应为“ admin ” ”。 clusterCaCertificate由Google生成,作为开发人员,我找不到设置CN的方法。我什至无法访问群集,因此无法对用户' client '执行任何roleBinding或类似操作。知道如何解决吗?
答案 0 :(得分:0)
在这里查看workaround,以及GKE工程团队如何研究this。我从GitHub报告中获取了此信息:
因此,根据建议,我确实在kubernetes engine bug tracker上发帖,这成为了这个私人问题:
https://issuetracker.google.com/u/1/issues/111101728,请随时参考,相当于kubernetes/kubernetes#65400。
简而言之,客户端证书具有CN = client编码,并且客户端用户没有任何权限。如果您使用masterAuth用户名/密码(基本身份验证),则可以应用yaml。
kind: ClusterRoleBinding apiVersion: rbac.authorization.k8s.io/v1 metadata: name: client-binding subjects: - kind: User name: client roleRef: kind: ClusterRole name: "cluster-admin" apiGroup: rbac.authorization.k8s.io
这将授予用户cert管理员权限。此外,要删除基本身份验证,您可以在api中设置username =“”,但这将导致重新启动,这将需要5分钟以上的时间来进行主切换。