我在启用RBAC的情况下运行Kubernetes 1.6.2。我创建了一个具有以下群集角色绑定的用户kube-admin
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
进入正在运行的窗格时,我收到以下错误消息。
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
引用,我错过了哪个角色?
答案 0 :(得分:7)
kubectl和api之间的连接很好,并且正在被正确授权。
为了满足exec请求,apiserver会联系运行pod的kubelet,并且该连接是被禁止的。
您的kubelet配置为对请求进行身份验证/授权,并且apiserver不提供kubelet识别的身份验证信息。
apiserver对kubelet进行身份验证的方式是使用客户端证书和密钥,并使用提供给API服务器的--kubelet-client-certificate=... --kubelet-client-key=...
标志进行配置。
有关详细信息,请参阅https://kubernetes.io/docs/admin/kubelet-authentication-authorization/#overview。
答案 1 :(得分:0)
我发生了完全相同的错误,但对我而言,问题是由于我的 kops 设置造成的。我想在这里分享我的结果,因为它可能在未来对某人有所帮助。
kops v1.19.1 中存在一个错误,必须将 kubelet 匿名身份验证的配置显式设置为 false
我使用的是 kops 1.19 版,并将我的集群从 k8s v1.11 升级到 v1.19。升级之后,我在尝试运行 kubectl port-forward
、kubectl logs
、kubectl exec
、helm list
等时开始看到此错误。问题是 kops 中的错误组合并且没有设置 anonymousAuth
配置,或者将其设置为 true
。由于 kops 中的此错误,必须将 kubelet 匿名身份验证的配置显式设置为 false
。
编辑集群
$ kops edit cluster
在spec.kubelet.anonymousAuth下添加配置,即
spec:
kubelet:
anonymousAuth: false
更新集群
$ kops update cluster --yes
$ kops rolling-update cluster --yes