我正在使用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)