我在本地使用KUBEADM工具将kubernetes集群配置为具有一个主节点和4个工作节点。所有节点都运行良好。部署了一个应用程序,并能够从浏览器访问该应用程序。我尝试了多种使用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。显示相同的未授权错误。
答案 0 :(得分: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