13、kubernetes之 dashboard展示
第十一 dashboard展示
一直使用kubectl命令操作apiserver实现
dashboard作为k8s核心附件存在的,
官网部署:https://github.com/kubernetes/dashboard
根据教程,还是安装老版本的镜像吧
[root@k8s-master dashboard]# kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v1.8.3/src/deploy/recommended/kubernetes-dashboard.yaml
secret/kubernetes-dashboard-certs created
serviceaccount/kubernetes-dashboard created
role.rbac.authorization.k8s.io/kubernetes-dashboard-minimal created
rolebinding.rbac.authorization.k8s.io/kubernetes-dashboard-minimal created
deployment.apps/kubernetes-dashboard created
service/kubernetes-dashboard created
[root@k8s-master dashboard]# kubectl get svc -n kube-system
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kube-dns ClusterIP 10.96.0.10 <none> 53/UDP,53/TCP,9153/TCP 6d5h
kubernetes-dashboard ClusterIP 10.107.11.100 <none> 443/TCP 2m
需要提前下载镜像,国外站点下载不了,master节点上操作即可
[root@k8s-master ~]# docker pull mirrorgooglecontainers/kubernetes-dashboard-amd64:v1.8.3
[root@k8s-master ~]# docker tag mirrorgooglecontainers/kubernetes-dashboard-amd64:v1.8.3 k8s.gcr.io/kubernetes-dashboard-amd64:v1.8.3
现在外部需要访问,怎么做
改成nodeport方式运行,直接patch打补丁,定义service访问模式
[root@k8s-master dashboard]# kubectl patch svc kubernetes-dashboard -p '{"spec":{"type":"NodePort"}}' -n kube-system
1 2 3 4 5 6 7 8 | [root@master01 ~] # kubectl get svc kubernetes-dashboard -n kube-system NAME TYPE CLUSTER - IP EXTERNAL - IP PORT(S) AGE kubernetes - dashboard ClusterIP 10.103 . 64.216 <none> 443 / TCP 7m45s [root@master01 ~] # kubectl patch svc kubernetes-dashboard -p '{"spec":{"type":"NodePort"}}' -n kube-system service / kubernetes - dashboard patched [root@master01 ~] # kubectl get svc kubernetes-dashboard -n kube-system NAME TYPE CLUSTER - IP EXTERNAL - IP PORT(S) AGE kubernetes - dashboard NodePort 10.103 . 64.216 <none> 443 : 32341 / TCP 8m3s |
浏览器访问https://192.168.1.202:32341/#!/login,需要认证, Kubeconfig或者 令牌认证。
这种https访问形式,一定是使用了源k8s里面的ca证书。新版本 需要注意。
第一种 token方式访问
查看token,登录发现效果跟没有使用token一致,登录之后都没有操作权限。
[root@k8s-master ~]# kubectl describe secret kubernetes-dashboard-token-wg6mt -n kube-system # 查看默认令牌
...
ca.crt: 1025 bytes
namespace: 11 bytes
token: ...
重建dashboard服务,还是没有操作权限,后面发现创建的用户管理员信息,所以看不到。
应该是权限问题,我们不妨创建用户,绑定权限试试。
开始rolebinding授权,
创建只对默认ns有权限,不能访问其他命名空间。
[root@master configmap]# kubectl create serviceaccount def-ns-admin -n default #创建用户
serviceaccount/def-ns-admin created
[root@master configmap]# kubectl create rolebinding def-ns-admin --clusterrole=admin --serviceaccount=default:def-ns-admin #绑定管理员权限
rolebinding.rbac.authorization.k8s.io/def-ns-admin created
因为rolebing绑定clusterrole,因此只对该用户对应的命名空间内资源有操作权限,不能访问其他ns资源。
此时在页面上可以对该命令空间内资源做增删查改操作了。
第二种 Kubeconfig认证比较复杂
以kubeconfig配置文件形式访问。
[root@k8s-master dashboard]# cd /etc/kubernetes/pki/ [root@k8s-master pki]# kubectl config set-cluster kubernetes --certificate-authority=./ca.crt --server=https://192.168.1.203:6443 --embed-certs=true --kubeconfig=/root/def-ns-admin.conf Cluster "kubernetes" set. [root@k8s-master pki]# kubectl config view --kubeconfig=/root/def-ns-admin.conf apiVersion: v1 clusters: - cluster: certificate-authority-data: DATA+OMITTED server: https://192.168.1.203:6443 name: kubernetes contexts: [] current-context: "" kind: Config preferences: {} users: []
设置用户账户
前面已设置
[root@k8s-master pki]# kubectl get sa def-ns-admin
设置token
直接把token信息复制进去即可,但是需要先解码。
[root@k8s-master stateful]# kubectl get secret def-ns-admin-token-m2wxc -oyaml
[root@k8s-master stateful]# kubectl get secret def-ns-admin-token-m2wxc -ojson
[root@k8s-master stateful]# kubectl get secret def-ns-admin-token-m2wxc -ojsonpath={.data.token}
[root@k8s-master stateful]# kubectl get secret def-ns-admin-token-m2wxc -ojsonpath={.data.token} |base64 -d
将解码的token值复制到配置文件中,
DEF_NS_ADMIN_TOKEN='eyJhbGciOiJSUzI1NiIsImtpZC...4ElaaR2onE8jPA'
[root@k8s-master stateful]# kubectl config set-credentials def-ns-admin --token=$DEF_NS_ADMIN_TOKEN --kubeconfig=/root/def-ns-admin.conf
[root@k8s-master stateful]# kubectl config view --kubeconfig=/root/def-ns-admin.conf # 查看配置
创建上下文
[root@k8s-master stateful]# kubectl config set-context def-ns-admin@kubernetes --user=def-ns-admin --kubeconfig=/root/def-ns-admin.conf
[root@k8s-master stateful]# kubectl config view --kubeconfig=/root/def-ns-admin.conf
配置当前用户
[root@k8s-master pki]# kubectl config use-context def-ns-admin@kubernetes --kubeconfig=/root/def-ns-admin.conf
[root@k8s-master pki]# kubectl config view --kubeconfig=/root/def-ns-admin.conf
导出文件,在本地Windows以kubeconfig文件上传登录方式验证。
[root@k8s-master pki]# sz /root/def-ns-admin.conf
本地上传文件,验证成功。
整体回顾-Dashboard
1、部署:
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kubeflannel.yml
2、将Service改为NodePort
kubectl patch svc kubernetes-dashboard -p '{"spec":{"type":"NodePort"}}' -n kube-system
3、认证:
认证时的账号必须为ServiceAccount:被dashboard pod拿来由kubernetes进行认证;
token:
(1)创建ServiceAccount,根据其管理目标,使用rolebinding或clusterrolebinding绑定至合理role或clusterrole;
(2)获取到此ServiceAccount的secret,查看secret的详细信息,其中就有token;
kubeconfig: 把ServiceAccount的token封装为kubeconfig文件
(1)创建ServiceAccount,根据其管理目标,使用rolebinding或clusterrolebinding绑定至合理role或clusterrole;
(2)kubectl get secret | awk '/^ServiceAccount/{print $1}'
KUBE_TOKEN=$(kubectl get secret SERVCIEACCOUNT_SERRET_NAME -o jsonpath={.data.token} |
base64 -d)
(3)生成kubeconfig文件
kubectl config set-cluster --kubeconfig=/PATH/TO/SOMEFILE
kubectl config set-credentials NAME --token=$KUBE_TOKEN --kubeconfig=/PATH/TO/SOMEFILE
kubectl config set-context
kubectl config use-context
kubernetes集群的管理方式:
1、命令式:create, run, expose, delete, edit, ...
2、命令式配置文件: create -f /PATH/TO/RESOURCE_CONFIGURATION_FILE, delete -f, replace -f
3、声明式配置文件: apply -f, patch,
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)
2019-07-16 使用正则表达式匹配
2018-07-16 Eclipse连接MySQL数据库
2018-07-16 Linux tcpdump命令详解