【问题标题】:Kubernetes kubeconfig with service account token带有服务帐户令牌的 Kubernetes kubeconfig
【发布时间】:2019-09-01 22:27:47
【问题描述】:

我有一个在集群外调用kubectl -server $server --certificate-authority $ca --token $token get pod --all-namespaces 的脚本,其中$token 来自服务帐户my-sa(在命名空间my-ns 中),在RBAC 下具有适当限制的权限。

我现在想重构它,以便脚本调用 kubectl --kubeconfig my-service.conf get pod --all-namespaces,即它应该引用 kubeconfig 文件而不是设置本地参数。这是在 /etc/kubernetes 中遵循 Kubernetes 自己的 kubeconfigs 约定。

我已经尝试过以下 kubeconfig my-service.conf; <CA_DATA>/etc/kubernetes/pki/ca.crt的base64编码内容,<SERVER>$server相同,<TOKEN>$token相同:

apiVersion: v1
kind: Config
clusters:
- cluster:
    certificate-authority-data: <CA_DATA>
    server: <SERVER>
  name: my-cluster 
contexts:
- context:
  name: default-context
  context:
    cluster: my-cluster
    user: default-user
current-context: default-context
users:
- name: my-service
  user:
    token: <TOKEN>

kubectl --kubeconfig /dev/null --server $server --certificate-authority /etc/kubernetes/pki/ca.crt --token $token get pods --all-namespaces 在命令行上工作,但kubectl --kubeconfig my-service.conf get pod --all-namespaces 产生以下错误消息:

来自服务器的错误(禁止):Pod 被禁止:用户 “system:anonymous”无法在 API 组“”中列出资源“pod” 集群范围

所以structure of my kubeconfig file 还是有问题。为什么客户端没有authenticate assystem:serviceaccount:my-ns:my-sa?有什么问题?

更新 我想知道在集群外使用服务帐户令牌是否不合适(Kubernetes 自己的 kubeconfigs 使用客户端证书)。但随后documentation 明确指出:“服务帐户不记名令牌完全可以在集群外使用”。

【问题讨论】:

    标签: kubernetes


    【解决方案1】:

    您的上下文配置引用了一个不存在的凭据...

    您的凭据被指定为- name: my-service,因此您的上下文应该是:

    - context:
      name: default-context
      context:
        cluster: my-cluster
        user: my-service       # instead of default-user
    

    【讨论】:

      猜你喜欢
      • 2018-04-02
      • 2022-12-14
      • 2018-11-21
      • 1970-01-01
      • 1970-01-01
      • 2023-01-16
      • 1970-01-01
      • 2020-03-02
      • 2019-09-28
      相关资源
      最近更新 更多