我有一个包含以下数据的Google Cloud IAM服务帐户密钥文件(采用json格式)。
{
"type": "service_account",
"project_id": "****",
"private_key_id":"****",
"private_key": "-----BEGIN PRIVATE KEY----blah blah -----END PRIVATE KEY-----\n",
"client_email": "*****",
"client_id": "****",
"auth_uri": "https://accounts.google.com/o/oauth2/auth",
"token_uri": "https://oauth2.googleapis.com/token",
"auth_provider_x509_cert_url": "https://www.googleapis.com/oauth/v1/certs",
"client_x509_cert_url": "****"
}
我可以通过将此密钥文件传递给kube API客户端库来使用此服务帐户访问kubernetes API服务器。
但是,我找不到任何方法将此服务帐户传递给kubectl二进制文件,以使kubectl验证到为此服务帐户创建的项目。
有什么方法可以使Kubectl使用此服务帐户文件进行身份验证?
答案 0 :(得分:1)
此答案提供了一些指导:Access Kubernetes GKE cluster outside of GKE cluster with client-go?,但还不完整。
您需要做两件事:
将GOOGLE_APPLICATION_CREDENTIALS
环境变量设置为IAM服务帐户的JSON密钥文件的路径,并在设置此变量的同时使用kubectl
,应使用令牌进行身份验证。
(这可能是可选的,不确定),创建仅包含您的群集IP和CA证书的自定义KUBECONFIG
,保存此文件,并使用它连接到群集。
第2步如下:
cat > kubeconfig.yaml <<EOF
apiVersion: v1
kind: Config
current-context: cluster-1
contexts: [{name: cluster-1, context: {cluster: cluster-1, user: user-1}}]
users: [{name: user-1, user: {auth-provider: {name: gcp}}}]
clusters:
- name: cluster-1
cluster:
server: "https://$(eval "$GET_CMD --format='value(endpoint)'")"
certificate-authority-data: "$(eval "$GET_CMD --format='value(masterAuth.clusterCaCertificate)'")"
EOF
因此,您应该这样做
export GOOGLE_APPLICATION_CREDENTIALS=<path-to-key.json>
export KUBECONFIG=kubeconfig.yaml
kubectl get nodes