通过带有令牌的服务帐户登录到GKE

Cha*_*hap 5 authorization kubernetes google-kubernetes-engine

我正在尝试使用服务帐户访问Google Cloud上的Kubernetes集群,但无法使它正常工作。我有一个带有某些Pod和Ingress的运行系统。我希望能够更新部署的映像。

我想使用这样的东西(远程):

kubectl config set-cluster cluster --server="<IP>" --insecure-skip-tls-verify=true
kubectl config set-credentials foo --token="<TOKEN>"
kubectl config set-context my-context --cluster=cluster --user=foo --namespace=default
kubectl config use-context cluster
kubectl set image deployment/my-deployment boo=eu.gcr.io/project-123456/image:v1
Run Code Online (Sandbox Code Playgroud)

因此,我创建了服务帐户,然后获取了秘密令牌:

kubectl create serviceaccount foo
kubectl get secret foo-token-gqvgn -o yaml
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试在任何部署中更新映像时,都会收到:

错误:您必须登录到服务器(未经授权)

API的IP地址我使用该地址,该地址在GKE管理中显示为群集端点IP。有什么建议么?谢谢。

aer*_*ite 1

我已尝试重现您的问题。

我遵循的步骤

  • kubectl create serviceaccount foo
  • kubectl get secret foo-token-* -o yaml

然后,我尝试做你所做的事情

我用的token是base64decoded Token。

然后我尝试了这个:

$ kubectl get pods
Run Code Online (Sandbox Code Playgroud)

来自服务器的错误(禁止):pod 被禁止:用户“system:serviceaccount:default:foo”无法列出名称空间“default”中的 pod:未知用户“system:serviceaccount:default:foo”

正如预期的那样,这给了我错误。因为,我需要给这个ServiceAccount授予权限。

如何向此 ServiceAccount 授予权限?我需要创建具有必要权限的 ClusterRole 和 ClusterRoleBinding。

阅读更多内容以了解更多基于角色的访问控制

我可以做另一件事

$ kubectl config set-credentials foo --username="admin" --password="$PASSWORD"
Run Code Online (Sandbox Code Playgroud)

这将授予您管理员权限。

您需要提供集群凭据。

Username: admin
Password: -----
Run Code Online (Sandbox Code Playgroud)

您将在 GKE -> Kubernetes Engine -> {cluster} -> Show credential 中获取此信息