GKE MasterAuth clientCertificate没有访问群集资源的权限

时间:2019-11-21 13:48:40

标签: google-api google-kubernetes-engine

我使用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。

  • 然后我使用'kubectl get nodes'命令列出了节点,响应为
  

来自服务器的错误(禁止):禁止节点:用户“客户端”   无法在集群范围内的API组“”中列出资源“节点”

GKE提供的描述API的clusterCaCertificate信息具有 CN =“ client” ,但应为“ admin ”。 clusterCaCertificate由Google生成,作为开发人员,我找不到设置CN的方法。我什至无法访问群集,因此无法对用户' client '执行任何roleBinding或类似操作。知道如何解决吗?

1 个答案:

答案 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分钟以上的时间来进行主切换。