我有一个在集群之外调用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。
我尝试了以下kubeconfig my-service.conf;<CA_DATA>是/etc/kubernetes/pki/ca.crt的same 64编码内容,<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生成以下错误消息:
服务器错误(禁止):禁止使用:用户“system:匿名”不能在集群范围内列出API组中的资源" pods“
所以构造我的kubeconfig文件还是有问题的。为什么客户没有认证为 system:serviceaccount:my-ns:my-sa?有什么不对的?
UPDATE I想知道在集群之外使用服务帐户令牌是否不合适(Kubernetes自己的kubecon图使用客户端证书)。但是,文档明确指出:“服务帐户承载令牌对于在集群之外使用是完全有效的”。
发布于 2019-04-11 16:31:16
您的上下文配置正在引用一个不存在的凭据.
您的凭据被指定为- name: my-service,因此您的上下文应该是:
- context:
name: default-context
context:
cluster: my-cluster
user: my-service # instead of default-userhttps://stackoverflow.com/questions/55629894
复制相似问题