我正在使用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(后面被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)