Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/kubernetes/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Kubernetes kubectl在gitlab runner环境中使用服务帐户令牌时未经授权_Kubernetes_Gitlab Ci Runner - Fatal编程技术网

Kubernetes kubectl在gitlab runner环境中使用服务帐户令牌时未经授权

Kubernetes kubectl在gitlab runner环境中使用服务帐户令牌时未经授权,kubernetes,gitlab-ci-runner,Kubernetes,Gitlab Ci Runner,我们通过kubernetes集群中的kubernetes执行器运行gitlab runner实例(我们称之为KUBE01)。这些实例构建并部署到kubernetes集群,并为运行者提供一个环境变量KUBECONFIG(指向配置文件),如下所示: $ cat $KUBECONFIG --- apiVersion: v1 clusters: - name: gitlab-deploy cluster: server: https://KUBE01:6443 certificate

我们通过kubernetes集群中的kubernetes执行器运行
gitlab runner
实例(我们称之为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 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
但是,试图实际影响KUBE01失败:

$ kubectl get pods
error: You must be logged in to the server (Unauthorized)
在我的机器上,我们可以验证名称空间和服务帐户令牌是否正确:

$ 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>
$kubectl获取sa/gitlab部署-o yaml——名称空间开发
版本:v1
种类:服务帐户
元数据:
名称:gitlab部署
名称空间:dev
秘密:
-名称:gitlab部署令牌-

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

在更详细地阅读和一些尝试和错误之后,我发现了这个问题

服务帐户对象中的“秘密令牌”不是我们用于服务帐户身份验证的实际秘密令牌;相反,它是指向秘密对象的指针,而秘密对象又持有真实(承载)令牌。具体如下:

$ 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 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
$kubectl获取秘密gitlab部署令牌--o yaml
版本:v1
数据:
ca.crt:
名称空间:ZGV2
代币:
种类:秘密
元数据:
名称:gitlab部署令牌-
名称空间:dev
类型:kubernetes.io/service-account-token
当然,承载令牌是base64编码的,因为它是一个秘密;但奇怪的是,我们没有在
KUBECONFIG
文件中对其进行base64编码(比如CA)。因此,我们要做的是找到上面的承载令牌,从base64解码它,并将它作为我们的令牌添加到
gitlab deploy
user下。然后,身份验证工作