我正在运行启用了 RBAC 的 Kubernetes 1.6.2。我创建了一个用户 kube-admin
具有以下集群角色绑定(bind)
kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1beta1
metadata:
name: k8s-admin
subjects:
- kind: User
name: kube-admin
apiGroup: rbac.authorization.k8s.io
roleRef:
kind: ClusterRole
name: cluster-admin
apiGroup: rbac.authorization.k8s.io
当我尝试 kubectl exec
进入正在运行的 pod 我收到以下错误。kubectl -n kube-system exec -it kubernetes-dashboard-2396447444-1t9jk -- /bin/bash
error: unable to upgrade connection: Forbidden (user=system:anonymous, verb=create, resource=nodes, subresource=proxy)
我的猜测是我错过了 ClusterRoleBinding
引用,我错过了哪个角色?
最佳答案
kubectl 和 api 之间的连接很好,并且被正确授权。
为了满足 exec 请求,apiserver 联系运行 pod 的 kubelet,该连接是被禁止的。
您的 kubelet 配置为对请求进行身份验证/授权,而 apiserver 未提供 kubelet 识别的身份验证信息。
apiserver 对 kubelet 进行身份验证的方式是使用客户端证书和 key ,配置为 --kubelet-client-certificate=... --kubelet-client-key=...
提供给 API 服务器的标志。
见 https://kubernetes.io/docs/admin/kubelet-authentication-authorization/#overview了解更多信息。
关于Kubernetes RBAC 无法升级连接 : Forbidden (user=system:anonymous, verb=create, resource=nodes, subresource=proxy),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44312745/