2

我使用 GKE API 创建了 GKE 集群。下面是我使用的有效载荷和端点。

API: https ://container.googleapis.com/v1/ {parent=projects/ /locations/ }/clusters

方法: POST

请求正文:

{ "cluster": { "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 的方法。我什至无法访问集群,因此无法为用户“客户端”执行任何角色绑定或类似操作。知道如何解决这个问题吗?

4

1 回答 1

2

在此处查看 解决方法以及 GKE 工程团队如何解决此问题。我从 GitHub 报告中获取了这个:

因此,根据建议,我确实在kubernetes 引擎错误跟踪器上发布了帖子,这成为了这个私人问题:

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

这将为用户提供证书管理员权限。此外,要删除基本身份验证,您可以在 api 中设置 username="" ,但这将导致重新启动,这将需要 5 分钟才能完成主切换。

于 2019-11-21T22:48:19.610 回答