Kubernetes Dashboard 是 Kubernetes 的官方 Web UI。使用 Kubernetes Dashboard,您可以:
向 Kubernetes 集群部署容器化应用
诊断容器化应用的问题
管理集群的资源
查看集群上所运行的应用程序
创建、修改Kubernetes 上的资源(例如 Deployment、Job、DaemonSet等)
展示集群上发生的错误
版本v2.0.4
项目地址
https://github.com/kubernetes/dashboard/tree/v2.0.4
一、安装
官方说明,通过以下命令进行安装,如果改文件不能直接访问,可以先通过其他途径下载到本地
kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.0.4/aio/deploy/recommended.yaml
下载文件指令
wget https://raw.githubusercontent.com/kubernetes/dashboard/v2.0.4/aio/deploy/recommended.yaml
文件中指定了dashboard的镜像版本,可以提前将镜像先下载好。
文件片段一
spec:
containers:
- name: kubernetes-dashboard
image: kubernetesui/dashboard:v2.0.4
imagePullPolicy: Always
这里Always是每次启动都拉取镜像,可以改成本地没有再拉取远程镜像
文件片段二
spec:
containers:
- name: dashboard-metrics-scraper
image: kubernetesui/metrics-scraper:v1.0.4
执行上面的yml文件后,会启动镜
执行以下命令后会看到启动完毕,网上有的是把dashboard部署到kube-system的namespace的,建议大家在不熟悉的情况下根据官方的yaml直接安装,不要做修改,避免走弯路,本人是吃过亏的。
[root@localhost ~]# kubectl -n kubernetes-dashboard get po
NAME READY STATUS RESTARTS AGE
dashboard-metrics-scraper-7b59f7d4df-qczqq 1/1 Running 0 25s
kubernetes-dashboard-665f4c5ff-5s4rr 1/1 Running 0 25s
二、创建访问用户
1 创建文件dashboard-auth.yaml
vi dashboard-auth.yaml
内容如下
apiVersion: v1
kind: ServiceAccount
metadata:
name: admin-user
namespace: kubernetes-dashboard
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: admin-user
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: cluster-admin
subjects:
- kind: ServiceAccount
name: admin-user
namespace: kubernetes-dashboard
[root@localhost ~]# kubectl create -f /home/wxd/dashboard-auth.yaml
serviceaccount/admin-user created
clusterrolebinding.rbac.authorization.k8s.io/admin-user created
2 获取token
[root@localhost ~]# kubectl -n kubernetes-dashboard describe secret $(kubectl -n kubernetes-dashboard get secret | grep admin-user | awk '{print $1}')
Name: admin-user-token-85mdb
Namespace: kubernetes-dashboard
Labels:
Annotations: kubernetes.io/service-account.name: admin-user
kubernetes.io/service-account.uid: 7c8d9d9f-92a4-47c8-8dc9-601abb6e0d08
Type: kubernetes.io/service-account-token
Data
====
ca.crt: 1066 bytes
namespace: 20 bytes
token: eyJhbGciOiJSUzI1NiIsImtpZCI6ImtLdjhBaXdDWWwwcjNyUG1VaFpfR3ZmdDM1RWc0UEdCMDV2dWRDOURHR1UifQ.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlcm5ldGVzLWRhc2hib2FyZCIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJhZG1pbi11c2VyLXRva2VuLTg1bWRiIiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZXJ2aWNlLWFjY291bnQubmFtZSI6ImFkbWluLXVzZXIiLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlcnZpY2UtYWNjb3VudC51aWQiOiI3YzhkOWQ5Zi05MmE0LTQ3YzgtOGRjOS02MDFhYmI2ZTBkMDgiLCJzdWIiOiJzeXN0ZW06c2VydmljZWFjY291bnQ6a3ViZXJuZXRlcy1kYXNoYm9hcmQ6YWRtaW4tdXNlciJ9.O73aWRwFa_xTs-_17G_3NADMI4_tnSl0CuHyRLlfPsJQ7av3XyGOlLCtR_Bdz3V4WuFC_NZ02p22HgfULDBd5ZOOJ0zpZLjlbJZr3GjCja2WrkuUN9S0-ofL38ObIwBAZ2Y_3IG3tIK2EHu_tcp_1Kzq3AYOlqGqpbIde9Cd_k3Mht0zIu9yMr1cabdjM1VOz-UhRjUzIRODVC8NCKuW_ZNhYcpCKC4Avc9q78qqdmV3qtX7locrjcDRl1d74rGXkdkPX6autavJ3l2SeraPysIuaFO4ZN_7qkop2Kx6GakrLbDbqCKfKHTP-JZP_nKCFAjFJAcBo5hQnK49YGK4Jg
下文中浏览器显示的登录页面,将获取到的token复制粘贴,然后点击登录即可。
三、访问
1 本地访问
如果直接本机访问,按照官方手册执行
kubectl proxy
浏览器访问如下地址
http://localhost:8001/api/v1/namespaces/kubernetes-dashboard/services/https:kubernetes-dashboard:/proxy/
上面的命令只能本地访问,通过其他机器是不能访问的,端口都不通的,即使使用如下命令允许其他机器访问8001端口
[root@localhost ~]# kubectl proxy --address='0.0.0.0' --accept-hosts='^*$'
Starting to serve on [::]:8001
只能显示登陆页面,但无法登录。登录按钮始终是灰色。如下图
这是因为Dashboard只允许localhost和127.0.0.1使用HTTP连接进行访问,而其它地址只允许使用HTTPS
2 非本机访问
2.1 映射宿主机端口
通过NodePort映射到宿主机端口,修改刚才下载的recommended.yaml文件,找到如下内容
kind: Service
apiVersion: v1
metadata:
labels:
k8s-app: kubernetes-dashboard
name: kubernetes-dashboard
namespace: kubernetes-dashboard
spec:
ports:
- port: 443
targetPort: 8443
selector:
k8s-app: kubernetes-dashboard
修改为(增加NodePort的配置,注意k8映射到宿主机的端口范围是30000-32767,是为了避免与宿主机的其他服务端口冲突)
kind: Service
apiVersion: v1
metadata:
labels:
k8s-app: kubernetes-dashboard
name: kubernetes-dashboard
namespace: kubernetes-dashboard
spec:
type: NodePort
ports:
- port: 443
nodePort: 30001
targetPort: 8443
selector:
k8s-app: kubernetes-dashboard
指定宿主机端口30001,这样方便管理一些
将前面通过命令获取到的token复制粘贴到这里,点击登录即可。
2.2 偷懒模式
如果只是为了便捷可以通过k8后台命令直接修改,命令如下
执行kubectl edit命令进行编辑
kubectl -n kubernetes-dashboard edit service kubernetes-dashboard
会在控制台显示一个临时的yml文件,默认是vi打开的,可以直接编辑,保存后会立即生效。
临时的yml文件片段
spec:
clusterIP: 10.103.5.139
ports:
- port: 443
protocol: TCP
targetPort: 8443
selector:
k8s-app: kubernetes-dashboard
sessionAffinity: None
type: ClusterIP
status:
loadBalancer: {}
将上面的type: ClusterIP修改为type: NodePort。
用如下命令可以看到自动映射的宿主机端口
kubectl -n kube-system get service kubernetes-dashboard
kubernetes-dashboard NodePort 10.99.112.184 443:31119/TCP 57m
然后浏览器直接访问宿主机ip+查询到的端口(31119)即可看到登录页
四、部署一个应用
使用dashboard部署一个nginx集群试试,这里采用yml方式部署,如图,点击右上角+,贴上yml脚本
kind: Deployment
apiVersion: apps/v1
metadata:
name: nginx
labels:
k8s-app: nginx
spec:
replicas: 2
selector:
matchLabels:
k8s-app: nginx
template:
metadata:
name: nginx
labels:
k8s-app: nginx
spec:
containers:
- name: nginx
image: nginx
---
kind: Service
apiVersion: v1
metadata:
name: nginx
labels:
k8s-app: nginx
spec:
type: NodePort
ports:
- protocol: TCP
port: 80
targetPort: 80
nodePort: 30002
selector:
k8s-app: nginx
提交后,跳转到视图页面
可以看到,部署成功,也可以通过表单创建,只是表单创建nodeport会是随机的,现在可以访问一下30002端口
看到欢迎页,成功!
其他功能
好了,现在验证完成,大家按照好体验一番吧!
参考资料
更多访问配置方式访问如下地址
https://www.cnblogs.com/RainingNight/p/deploying-k8s-dashboard-ui.html