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 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]#
[root@k8s-master dashboard]# kubectl patch svc kubernetes-dashboard -p '{"spec":{"type":"NodePort"}}' -n kube-system
service/kubernetes-dashboard patched
[root@k8s-master dashboard]# kubectl get svc -n kube-system -owide
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE SELECTOR
kube-dns ClusterIP 10.96.0.10 <none> 53/UDP,53/TCP,9153/TCP 6d5h k8s-app=kube-dns
kubernetes-dashboard NodePort 10.107.11.100 <none> 443:32519/TCP 7m2s k8s-app=kubernetes-dashboard
浏览器访问https://192.168.1.202:32519/#!/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,

posted @ 2023-07-16 12:50  wang_wei123  阅读(21)  评论(0编辑  收藏  举报