kubernetes - 显示未经授权的 Kubernetes 仪表板
问题描述
我在本地使用 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。它显示相同的未经授权的错误。
解决方案
使用--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
推荐阅读
- android - Android Device Owner Mode by App 使用平台密钥签名(或使用签名的 App 自定义设备策略)
- c - 用于 IAR 编译器内联函数的 C 宏
- ios - 通过它的日期属性从 coredata 中检索数据
- python - 文本提取的文档布局分析
- angular - 在 HTML 中显示 Angular Pipe 可能的选项
- java - ExceptionHandler 导入冲突
- python - 带有值图、Pandas 和 MatPlotLib 的月、年
- wordpress - Wordpress 站点在通过 FTP 迁移到带有 Apache2 的 AWS EC2 Ubuntu 后无法运行
- python - Python:如果条件仅返回最后一个值,则在内部返回语句
- eloquent - 雄辩的查询,结合 where 和 whereBetween