Kubernetes RBAC 无法升级连接:Forbidden (user=system:anonymous, verb=create, resource=nodes, subresource=proxy)
Kubernetes RBAC unable to upgrade connection: Forbidden (user=system:anonymous, verb=create, resource=nodes, subresource=proxy)
我是 运行 启用了 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
进入 运行 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 请求,api服务器联系 kubelet 运行 pod,而该连接是被禁止的。
您的 kubelet 配置为 authenticate/authorize 请求,并且 api 服务器未提供 kubelet 识别的身份验证信息。
api服务器向 kubelet 进行身份验证的方式是使用客户端证书和密钥,配置提供给 API 服务器的 --kubelet-client-certificate=... --kubelet-client-key=...
标志。
有关详细信息,请参阅 https://kubernetes.io/docs/admin/kubelet-authentication-authorization/#overview。
我遇到了完全相同的错误,但对我来说,问题出在我的 kops 设置上。我想在这里分享我的结果,因为它可能会对将来的人有所帮助。
由于 kops v1.19.1 中存在一个错误,kubelet anonymousAuth 的配置必须显式设置为 false
我使用的是 kops 1.19 版,并将我的集群从 k8s v1.11 升级到 v1.19。升级后,当我尝试 运行 kubectl port-forward
、kubectl logs
、kubectl exec
、helm list
等时开始看到此错误。问题是kops 中的一个错误,没有设置 anonymousAuth
配置,或者将其设置为 true
。由于 kops 中的这个错误,kubelet anonymousAuth 的配置必须明确设置为 false
.
修复
编辑集群
$ kops edit cluster
在spec.kubelet.anonymousAuth下添加配置,即
spec:
kubelet:
anonymousAuth: false
更新集群
$ kops update cluster --yes
$ kops rolling-update cluster --yes
相关
我是 运行 启用了 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
进入 运行 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 请求,api服务器联系 kubelet 运行 pod,而该连接是被禁止的。
您的 kubelet 配置为 authenticate/authorize 请求,并且 api 服务器未提供 kubelet 识别的身份验证信息。
api服务器向 kubelet 进行身份验证的方式是使用客户端证书和密钥,配置提供给 API 服务器的 --kubelet-client-certificate=... --kubelet-client-key=...
标志。
有关详细信息,请参阅 https://kubernetes.io/docs/admin/kubelet-authentication-authorization/#overview。
我遇到了完全相同的错误,但对我来说,问题出在我的 kops 设置上。我想在这里分享我的结果,因为它可能会对将来的人有所帮助。
由于 kops v1.19.1 中存在一个错误,kubelet anonymousAuth 的配置必须显式设置为 false
我使用的是 kops 1.19 版,并将我的集群从 k8s v1.11 升级到 v1.19。升级后,当我尝试 运行 kubectl port-forward
、kubectl logs
、kubectl exec
、helm list
等时开始看到此错误。问题是kops 中的一个错误,没有设置 anonymousAuth
配置,或者将其设置为 true
。由于 kops 中的这个错误,kubelet anonymousAuth 的配置必须明确设置为 false
.
修复
编辑集群
$ kops edit cluster
在spec.kubelet.anonymousAuth下添加配置,即
spec:
kubelet:
anonymousAuth: false
更新集群
$ kops update cluster --yes
$ kops rolling-update cluster --yes