【问题标题】:Using GKE service account credentials with kubectl通过 kubectl 使用 GKE 服务帐号凭据
【发布时间】:2019-04-10 07:57:30
【问题描述】:

我正在尝试从我的 CI 系统中调用 kubectl。我希望使用谷歌云服务帐户进行身份验证。我有一个秘密管理系统,可以将秘密注入我的 CI 系统。

但是,我的 CI 系统没有安装 gcloud,我不想安装它。它只包含 kubectl。有什么方法可以直接将包含 gcloud 服务帐户(不是 kubernetes 服务帐户)的 credentials.json 文件与 kubectl 一起使用?

【问题讨论】:

  • 也许你只需要从 gcloud json 文件中提取凭证到 kubeconfig 格式并与 kubectl 一起使用
  • 或者只是创建一个服务帐户并将其与 kubectl 一起使用

标签: kubernetes kubectl google-kubernetes-engine


【解决方案1】:

跳过 gcloud CLI 的最简单方法可能是使用 --token 选项。您可以通过创建服务帐户并将其绑定到 ClusterRole or RoleClusterRoleBinding or RoleBinding 来获取 RBAC 令牌。

然后从命令行:

$ kubectl --token <token-from-your-service-account> get pods

您仍然需要在您的~/.kube/config 中添加一个context

- context:
    cluster: kubernetes
  name: kubernetes-token

否则,您将不得不使用:

$ kubectl --insecure-skip-tls-verify --token <token-from-your-service-account> -s https://<address-of-your-kube-api-server>:6443 get pods

请注意,如果您不希望令牌显示在日志中,您可以执行以下操作:

$ kubectl --token $(cat /path/to/a/file/where/the/token/is/stored) get pods

另外,请注意,在 kubectl 进程的整个生命周期内,这不会阻止您在您的盒子上运行 ps -Af 并从那里获取令牌(轮换令牌是个好主意)

编辑:

您可以使用--token-auth-file=/path/to/a/file/where/the/token/is/storedkubectl 来避免通过$(cat /path/to/a/file/where/the/token/is/stored) 传递它

【讨论】:

  • 如果我在集群之外,如何为我的服务帐户获取令牌?
  • 你可以做kubectl describe sa然后获取与之关联的令牌名称,然后kubectl describe secret &lt;token-name&gt;
猜你喜欢
  • 2015-04-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-11
  • 1970-01-01
  • 1970-01-01
  • 2015-11-11
  • 1970-01-01
相关资源
最近更新 更多