Kubernetes RBAC无法升级连接:Forbidden(user = system:anonymous,verb = create,resource = nodes,subresource = proxy)

时间:2017-06-01 16:26:43

标签: kubernetes kubectl

我在启用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引用,我错过了哪个角色?

2 个答案:

答案 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-forwardkubectl logskubectl exechelm 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

相关

PR that fixes the immediate issue

PR that fixes a related issue

Related kops docs