【问题标题】:Kubernetes RBAC unable to upgrade connection: Forbidden (user=system:anonymous, verb=create, resource=nodes, subresource=proxy)Kubernetes RBAC 无法升级连接:禁止(用户=系统:匿名,动词=创建,资源=节点,子资源=代理)
【发布时间】:2017-11-02 21:50:07
【问题描述】:

我正在运行启用了 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 ref,我缺少哪个角色?

【问题讨论】:

    标签: kubernetes kubectl


    【解决方案1】:

    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 了解更多信息。

    【讨论】:

    • 这也是给我的。我已将 kubeadm(在我的主服务器上)配置为使用自定义 CA、证书和密钥……但我使用了“自托管”选项,它没有考虑我的更改“10-kubeadm.conf”,同时我的工作节点将其 kubelet 配置为指定自己的密钥/证书……这不起作用 b/c 主节点没有使用我的 CA。我更新了工作人员以使用默认的证书配置,事情变得更好了。稍后仍需要重新访问自定义 CA 的内容。
    • 感谢您的回答/见解。如果是这种情况,建议采取哪些步骤?我是否需要使用不同的客户端证书/密钥重新启动 api 服务器?或者也许用新值重新启动 kubelet?​​
    【解决方案2】:

    我发生了同样的错误,但对我来说,问题是由于我的 kops 设置造成的。我想在这里分享我的结果,因为它可能对将来的人有所帮助。

    由于 kops v1.19.1 中存在一个错误,kubelet anonymousAuth 的配置必须明确设置为 false

    我使用的是 kops 版本 1.19,并将我的集群从 k8s v1.11 升级到 v1.19。升级后,当我尝试运行 kubectl port-forwardkubectl logskubectl exechelm list 等时开始看到此错误。问题是 kops 中的错误和没有 anonymousAuth 配置的组合设置,或将其设置为true。由于 kops 中的这个 bug,kubelet anonymousAuth 的配置必须显式设置为 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

    【讨论】:

      猜你喜欢
      • 2021-05-28
      • 2021-11-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-23
      • 2020-09-19
      • 1970-01-01
      • 2020-04-02
      相关资源
      最近更新 更多