【发布时间】: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