具有服务帐户令牌的Kubernetes kubeconfig

时间:2019-04-11 10:06:04

标签: kubernetes

我有一个脚本在集群外部调用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文件而不是设置本地参数。遵循Kubernetes在/etc/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产生以下错误消息:

  

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

因此structure of my kubeconfig file仍然存在问题。为什么客户没有authenticate as system:serviceaccount:my-ns:my-sa?怎么了?

更新我想知道在群集外部使用服务帐户令牌是否不合适(Kubernetes自己的kubeconfig使用客户端证书代替)。但是documentation然后清楚地声明:“服务帐户承载令牌在群集外使用是完全有效的。”

1 个答案:

答案 0 :(得分:1)

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

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

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