显示未经授权的 Kubernetes 仪表板

Posted

技术标签:

【中文标题】显示未经授权的 Kubernetes 仪表板【英文标题】:Kubernetes dashboard showing Unauthorized 【发布时间】:2019-04-30 12:13:34 【问题描述】:

我在本地使用 KUBEADM 工具配置了具有 1 个主节点和 4 个工作节点的 kubernetes 集群。所有节点都运行良好。部署了一个应用程序并能够从浏览器访问该应用程序。我尝试了很多方法来使用 kubectl 创建仪表板,但我失败了。

TRY1:直接用下面的命令试试:

$ sudo kubectl proxy --address="172.20.22.101" -p 8001 

尝试使用 url http://172.20.22.101:8001/api/v1 访问仪表板,但显示未经授权。

TRY2: 创建了dashboard-admin.yaml 文件,内容如下:

apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRoleBinding
metadata:
   name: kubernetes-dashboard
   labels:
     k8s-app: kubernetes-dashboard
roleRef:
   apiGroup: rbac.authorization.k8s.io
   kind: ClusterRole
   name: cluster-admin
subjects:
-  kind: ServiceAccount
   name: kubernetes-dashboard
   namespace: kube-system

并运行以下命令:

$ kubectl create -f dashboard-admin.yaml

显示给我了:clusterrolebinding.rbac.authorization.k8s.io/kubernetes-dashboard created.

运行以下命令:

$ sudo kubectl proxy --address="172.20.22.101" -p 443

它运行良好。我正在从浏览器访问http://172.20.22.101:443/api/v1/namespaces/kube-system/services/https:kubernetes-dashboard:/proxy/ URL。它显示相同的未经授权的错误。

【问题讨论】:

我正在按照以下步骤安装仪表板:assistanz.com/steps-to-install-kubernetes-dashboard。当我尝试使用 url 访问该站点时:172.20.22.101:443/api/v1/namespaces/kube-system/services/…。它显示连接被拒绝。我观察了 nohup.out 中的输出,它显示以下错误:I1203 12:28:05.880828 15591 log.go:172] http: proxy error: dial tcp [::1]:8080: connect: connection denied跨度> 【参考方案1】:

使用 --accept-hosts 选项运行 kubectl 代理命令

 kubectl proxy --address="172.20.22.101" -p 8001  --accept-hosts="^*$"

它会正常工作的。

注意:不建议将这用于生产级 kubernetes 集群,因为您通过纯 http 访问仪表板。

更安全的替代方法是像这样通过 ssh 隧道运行访问仪表板。

在一个终端运行:

kubectl proxy 

在另一个终端运行 ssh 隧道到 localhost:8001(默认 kubernetes 仪表板端口)

ssh -NT -l SSH_USER -p SSH_PORT K8S_CONTROLLER_IP_ADDR -L 8001:localhost:8001

【讨论】:

我已经编辑了我的答案,您必须使用 --accept-hosts 选项允许流量从特定来源到达 kubernetes 仪表板 我已经执行了 kubectl proxy 并从其他终端完成了 ssh。当我做 ssh 时。它什么也没显示。 我被执行了 kubectl proxy --address="172.20.22.101" -p 8001 --accept-hosts="^*$"。并尝试访问 URL:172.20.22.101:8001/api/v1/namespaces/kube-system/services。它显示的是 json 响应而不是仪表板。你能告诉我获取仪表板的网址吗 在 ssh 隧道的情况下,该命令将保持隧道打开,并且不会输出任何内容,要访问仪表板,请使用此 url:localhost:8001/api/v1/namespaces/kube-system/services/…,如果使用 --accept-hosts 选项,您可以使用此 url 访问仪表板:172.20.22.101:8001/api/v1/namespaces/kube-system/services/… "kind": "Status", "apiVersion": "v1", "metadata": , "status": "Failure", "message": "没有可用于服务的端点\"http:kubernetes-dashboard:\"", "reason": "ServiceUnavailable", "code": 503

以上是关于显示未经授权的 Kubernetes 仪表板的主要内容,如果未能解决你的问题,请参考以下文章

AWS Bitnami Parse Server - 添加 HTTP 身份验证使我在解析仪表板中的应用程序“未经授权”

Kubernetes 仪表板不显示 CPU 和内存使用情况

无法显示网页,错误代码:500 这是怎么回事?应该怎么办?

以 Forbidden Errors 开头的 Kubernetes 仪表板

401 在 SharePoint 2007 中未经授权

密码更新时出现未经授权的错误