连接以在GKE

时间:2020-03-30 07:29:09

标签: go google-kubernetes-engine kubectl kubeconfig

我正在使用cloud.google.com/go SDK来以编程方式为GKE群集配置所需的配置。

我设置了ClientCertificateConfig.IssueClientCertificate = true(请参见https://pkg.go.dev/google.golang.org/genproto/googleapis/container/v1?tab=doc#ClientCertificateConfig)。 在配置群集之后,我使用为同一群集返回的ca_certificate,client_key,client_secret(请参见https://pkg.go.dev/google.golang.org/genproto/googleapis/container/v1?tab=doc#MasterAuth)。现在,我具有上述3个属性,我尝试为该集群生成kubeconfig(稍后由头盔使用)

大致上,我的kubeconfig看起来像这样:

apiVersion: v1
clusters:
- cluster:
    certificate-authority-data: <base64_encoded_data>
    server: https://X.X.X.X
  name: gke_<project>_<location>_<name>
contexts:
- context:
    cluster: gke_<project>_<location>_<name>
    user: gke_<project>_<location>_<name>
  name: gke_<project>_<location>_<name>
current-context: gke_<project>_<location>_<name>
kind: Config
preferences: {}
users:
- name: gke_<project>_<location>_<name>
  user:
    client-certificate-data: <base64_encoded_data>
    client-key-data: <base64_encoded_data>

在运行具有上述配置的kubectl获取节点时,出现错误: 来自服务器的错误(禁止):禁止使用服务帐户:用户“客户端”无法在集群范围内的API组“”中列出资源“服务帐户”

有趣的是,如果我使用gcloud生成的配置,唯一的更改是在用户部分: 用户:

auth-provider:
      config:
        cmd-args: config config-helper --format=json
        cmd-path: /Users/ishankhare/google-cloud-sdk/bin/gcloud
        expiry-key: '{.credential.token_expiry}'
        token-key: '{.credential.access_token}'
      name: gcp

此配置似乎可以正常工作。但是,一旦我添加了客户端证书和客户端密钥数据,它就会中断: 用户:

auth-provider:
      config:
        cmd-args: config config-helper --format=json
        cmd-path: /Users/ishankhare/google-cloud-sdk/bin/gcloud
        expiry-key: '{.credential.token_expiry}'
        token-key: '{.credential.access_token}'
      name: gcp
client-certificate-data: <base64_encoded_data>
client-key-data: <base64_encoded_data>

我相信我缺少与RBAC有关的一些细节,但我不确定是什么。您可以在这里向我提供一些信息吗?

也参考this question,我尝试仅首先依赖于用户名-密码组合,使用该组合在集群中应用新的clusterrolebinding。但是我不能仅使用用户名密码方法。我收到以下错误:

error: You must be logged in to the server (Unauthorized)

0 个答案:

没有答案