docker pull cnych/kubernetes-dashboard-amd64:v1.10.0
docker tag cnych/kubernetes-dashboard-amd64:v1.10.0 k8s.gcr.io/kubernetes-dashboard-amd64:v1.10.0

https://github.com/kubernetes/dashboard 查找dashboard.yaml 下载地址
wget https://raw.githubusercontent.com/kubernetes/dashboard/v2.0.0-rc5/aio/deploy/recommended.yaml

部署kubernetes-dashboard

kubernetes-dashboard是可选组件,因为,实在不好用,功能太弱了。
建议在部署master时一起把kubernetes-dashboard一起部署了,不然在node节点加入集群后,kubernetes-dashboard会被kube-scheduler调度node节点上,这样根kube-apiserver通信需要额外配置。
下载kubernetes-dashboard的配置文件或直接使用离线包里面的kubernetes-dashboard.yaml

wget https://raw.githubusercontent.com/kubernetes/dashboard/master/src/deploy/recommended/kubernetes-dashboard.yaml

修改kubernetes-dashboard.yaml
如果需要让外面访问需要修改这个yaml文件端口类型为NodePort默认为clusterport外部访问不了,
修改service段:

kind: Service
apiVersion: v1
metadata:
  labels:
    k8s-app: kubernetes-dashboard
  name: kubernetes-dashboard
  namespace: kube-system
spec:
  type: NodePort
ports:
  - port: 443
targetPort: 8443
nodePort: 32666
selector:
k8s-app: kubernetes-dashboard

service 注意 service提供的ip是virtual ip,无法ping通。但是可以通过virutal ip访问端口(iptables转发)
三种端口:重点!!!
targetPort targetPort是pod上的端口,从port和nodePort上到来的数据最终经过kube-proxy流入到后端pod的targetPort上进入容器。
port service暴露在cluster ip上的端口,:port 是提供给集群内部客户访问service的入口。
nodePort 是kubernetes提供给集群外部客户访问service入口的一种方式(另一种方式是LoadBalancer),所以,:nodePort 是提供给集群外部客户访问service的入口。

开启容器:
kubectl create -f kubernetes-dashboard.yaml

查询
[root@master ~]# kubectl get deployment --all-namespaces
[root@master ~]# kubectl get svc --all-namespaces
访问:
https://192.168.0.200:32666

d1.png

d2.png

这是需要用一个可用的ClusterRole进行登录,该账户需要有相关的集群操作权限,如果跳过,则是用默认的系统角色kubernetes-dashboard(该角色在创建该容器时生成),初始状态下该角色没有任何权限,需要在系统中进行配置,角色绑定:在主节点上任意位置创建一个文件xxx.yaml,名字随意: vim ClusterRoleBinding.yaml 编辑文件:

kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1beta1
metadata:
name: kubernetes-dashboard
subjects:
- kind: ServiceAccount
name: kubernetes-dashboard
namespace: kube-system
roleRef:
kind: ClusterRole
name: cluster-admin
apiGroup: rbac.authorization.k8s.io

保存,退出,执行该文件:
kubectl create -f user.yaml再次打开WebUI,成功显示集群信息:

d3.png

注意⚠️:给kubernetes-dashboard角色赋予cluster-admin权限仅供测试使用,本身这种方式并不安全,建议新建一个系统角色,分配有限的集群操作权限,方法如下:新建一个yaml文件,写入:

kind: ClusterRole #创建集群角色
apiVersion: rbac.authorization.k8s.io/v1beta1
metadata:
name: dashboard #角色名称
rules:
- apiGroups: ["*"]
resources: ["*”] #所有资源
verbs: ["get", "watch", "list", "create","proxy","update”] #赋予获取>,监听,列表,创建,代理,更新的权限
- apiGroups: ["*"]
resources: ["pods”] #容器资源单独配置(在所有资源配置的基础上)
verbs: ["delete”] #提供删除权限
---
apiVersion: v1
kind: ServiceAccount #创建ServiceAccount
metadata:
name: dashboard
namespace: kube-system
---
kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1beta1
metadata:
name: dashboard-extended
subjects:
-kind: ServiceAccount
name: dashboard
namespace: kube-system
roleRef:
kind: ClusterRole
name:dashboard #填写cluster-admin代表开放全部权限
apiGroup: rbac.authorization.k8s.io

执行该文件,查看角色是否生成:
kubectl get serviceaccount --all-namespaces
查询该账户的密钥名:
kubectl get secret -n kube-system
根据密钥名找到token:
kubectl discribe secret dashboard-token-wd9rz -n kube-system
输出一段信息:

d4.png

下载镜像
docker pull cnych/kubernetes-dashboard-amd64:v1.10.0
docker tag cnych/kubernetes-dashboard-amd64:v1.10.0 k8s.gcr.io/kubernetes-dashboard-amd64:v1.10.0


更改源
vim /etc/docker/daemon.json
{
"registry-mirrors": ["https://docker.mirrors.ustc.edu.cn"]
 
}

部署kubernetes-dashboard

kubernetes-dashboard是可选组件,因为,实在不好用,功能太弱了。
建议在部署master时一起把kubernetes-dashboard一起部署了,不然在node节点加入集群后,kubernetes-dashboard会被kube-scheduler调度node节点上,这样根kube-apiserver通信需要额外配置。
下载kubernetes-dashboard的配置文件或直接使用离线包里面的krecommended.yaml

https://github.com/kubernetes/dashboard 查找dashboard.yaml 下载地址
wget https://raw.githubusercontent.com/kubernetes/dashboard/v2.0.0-rc5/aio/deploy/recommended.yaml

修改recommended.yaml
如果需要让外面访问需要修改这个yaml文件端口类型为NodePort默认为clusterport外部访问不了,
修改service段:

kind: Service
apiVersion: v1
metadata:
  labels:
    k8s-app: dashboard-metrics-scraper
  name: dashboard-metrics-scraper
  namespace: kubernetes-dashboard
spec:
  type: NodePort
  ports:
    - port: 443
      targetPort: 8443
      nodePort: 32666
  selector:
    #k8s-app: dashboard-metrics-scraper
    k8s-app: kubernetes-dashboard

[root@master ~]# kubectl create -f recommended.yaml

访问:
[root@master ~]# kubectl get pods --all-namespaces -o wide
kubernetes-dashboard kubernetes-dashboard-cfc74c45b-tfsx9 1/1 Running 0 6m 10.244.2.12 node2.com

node2.com 访问ip
宿主机:
https://node2.com:32666/ 或者ip

d5.png

service 注意 service提供的ip是virtual ip,无法ping通。但是可以通过virutal ip访问端口(iptables转发)
三种端口:重点!!!
targetPort targetPort是pod上的端口,从port和nodePort上到来的数据最终经过kube-proxy流入到后端pod的targetPort上进入容器。
port service暴露在cluster ip上的端口,:port 是提供给集群内部客户访问service的入口。
nodePort 是kubernetes提供给集群外部客户访问service入口的一种方式(另一种方式是LoadBalancer),所以,:nodePort 是提供给集群外部客户访问service的入口。

解决token登录
创建账号文件
[root@master ~]# vim dashboard.yaml 创建文件

    apiVersion: v1
kind: ServiceAccount
metadata:
  name: dashboard
  namespace: kube-system
---
kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1beta1
metadata:
  name: dashboard
subjects:
  - kind: ServiceAccount
    name: dashboard
    namespace: kube-system
roleRef:
  kind: ClusterRole
  name: cluster-admin
  apiGroup: rbac.authorization.k8s.io

启动容器
[root@master ~]# kubectl create -f dashboard.yaml

获取token

[root@master ~]# kubectl describe secret dashboard -n kube-system
Name: dashboard-token-5plt9
Namespace: kube-system
Labels:
Annotations: kubernetes.io/service-account.name=dashboard
kubernetes.io/service-account.uid=00ade0a9-584b-11ea-99c4-000c293401f2

Type: kubernetes.io/service-account-token

Data

token: eyJhbGciOiJSUzI1NiIsImtpZCI6IiJ9.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlLXN5c3RlbSIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJkYXNoYm9hcmQtdG9rZW4tNXBsdDkiLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlcnZpY2UtYWNjb3VudC5uYW1lIjoiZGFzaGJvYXJkIiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZXJ2aWNlLWFjY291bnQudWlkIjoiMDBhZGUwYTktNTg0Yi0xMWVhLTk5YzQtMDAwYzI5MzQwMWYyIiwic3ViIjoic3lzdGVtOnNlcnZpY2VhY2NvdW50Omt1YmUtc3lzdGVtOmRhc2hib2FyZCJ9.db5rnaiThQ0E6xyiIEYUtlo_chKfErrJ5kCiE8ZyqNfXHJfPD7t7qWPZ7goWXJFLfzIkqo6M61mnCDyvDhhPT4bbdlZCjWZS5l4iAa7gAwSNO_i9X8tc9f2kgtQ7PqArT5ON6y81A1RZnnfIC-BPrEptVX843diFrzs85SMHD3yd86WScCx28dWOt6beTWjyf8bBBGYfexeHoFlzxJD1OtBhFCLSkJWQizDMEe69X64GCFt9wdnbwMe65evSQkabnXi7TYhfcdSa8Xf5sJJ4UzS0BGZbpSwdCrcAwdQUi13LIGE7RcDxt2nH-o-YvggVlb5VTxzD1JcGNamxSkHWhw
ca.crt: 1025 bytes
namespace: 11 bytes

复制token到网页登录即可

匿名用户授权
kubectl create clusterrolebinding test:anonymous --clusterrole=cluster-admin --user=system:anonymous