0

我正在使用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、c​​lient_secret(请参阅https://pkg.go.dev/google.golang.org/genproto/googleapis/container/v1?tab=doc#MasterAuth)。现在我有了上面的3个属性,我尝试为这个集群生成kubeconfig(后面被helm使用)

粗略地说,我的 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 get 节点时,我收到错误:来自服务器的错误(禁止):服务帐户被禁止:用户“客户端”无法在集群范围内的 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 相关的细节,但我不确定是什么。你能在这里向我提供一些信息吗?

同样参考这个问题,我尝试首先仅依赖用户名 - 密码组合,使用它在集群中应用新的集群角色绑定。但我不能只使用用户名密码方法。我收到以下错误:

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

0 回答 0