gpt4 book ai didi

kubernetes - 在 gitlab-runner 环境中使用服务帐户 token 时 kubectl 未经授权

转载 作者:行者123 更新时间:2023-12-01 09:14:16 24 4
gpt4 key购买 nike

我们正在运行 gitlab-runner实例通过 kubernetes 集群内的 kubernetes 执行程序(我们称之为 KUBE01)。这些实例构建并部署到 kubernetes 集群,运行器被赋予一个环境变量 KUBECONFIG (指向一个配置文件)如下:

$ cat $KUBECONFIG
---
apiVersion: v1
clusters:
- name: gitlab-deploy
cluster:
server: https://KUBE01:6443
certificate-authority-data: <CA_B64>
contexts:
- name: gitlab-deploy
context:
cluster: gitlab-deploy
namespace: dev
user: gitlab-deploy
current-context: gitlab-deploy
kind: Config
users:
- name: gitlab-deploy
user:
token: gitlab-deploy-token-<secret>

我们可以验证 kubectl实际上是使用上面的 gitlab-deploy语境:
$ kubectl config current-context
gitlab-deploy

但是,尝试实际影响 KUBE01 失败:
$ kubectl get pods
error: You must be logged in to the server (Unauthorized)

在我的机器上,我们可以验证命名空间和服务帐户 token 是否正确:
$ kubectl get sa/gitlab-deploy -o yaml --namespace dev
apiVersion: v1
kind: ServiceAccount
metadata:
<snip metadata>
name: gitlab-deploy
namespace: dev
secrets:
- name: gitlab-deploy-token-<secret>

除了它应该可以正常工作之外,我找不到任何关于此的文档,并且我发现的有关此错误消息的所有论坛/堆栈交换问题都是错误的用户/密码组合;但据我所知,我的 token 、命名空间和集群都是正确的。

最佳答案

更详细的阅读后kuberneter authentication documentation和一些试验和错误,我发现了问题。

服务帐户对象中的“ secret token ”并不是我们用于服务帐户身份验证的实际 secret token ;相反,它是一个指向 secret 对象的指针,而该对象又持有真正的(持有者) token 。可以通过以下方式找到:

$ kubectl get secret gitlab-deploy-token-<secret> -o yaml
apiVersion: v1
data:
ca.crt: <CA_B64>
namespace: ZGV2
token: <BEARER_TOKEN_B64>
kind: Secret
metadata:
<snip metadata>
name: gitlab-deploy-token-<secret>
namespace: dev
type: kubernetes.io/service-account-token

不记名 token 当然是 base64 编码的,因为它是一个 secret ;但奇怪的是,我们没有在 KUBECONFIG 中对它进行 base64 编码。文件(就像我们对 CA 所做的那样)。因此,我们要做的就是找到上面的不记名 token ,从base64解码,并将其添加到 gitlab-deploy下作为我们的 token 。用户。然后,身份验证工作。

关于kubernetes - 在 gitlab-runner 环境中使用服务帐户 token 时 kubectl 未经授权,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48646682/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com