安装部署Dashboard

通过一下命令来部署, recommended.yaml

$ sudo kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.0.0/aio/deploy/recommended.yaml

https://raw.githubusercontent.com/kubernetes/dashboard/v2.0.0/aio/deploy/recommended.yaml这个地址却很难打开,如果能打开,直接执行即可,如果不能,可以这样做:

到github地址上一步步找:`https://github.com/kubernetes/dashboard/tree/v2.0.0-beta4/aio/deploy`下的`recommended.yaml`文件;

NodePort方式访问web

为了测试方便,我们将Service改成NodePort类型,注意 YAML 中最下面的 Service 部分新增一个type=NodePort

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: 30000 #增加
  selector:
    k8s-app: kubernetes-dashboard

然后直接部署新版本的dashboard即可:

$ sudo kubectl create -f recommended.yaml
或者
$ sudo  kubectl apply -f recommended.yaml

删除的指令 sudo kubectl delete -f recommended.yaml

查看服务暴露的端口

$ sudo kubectl get service -n kubernetes-dashboard
NAME                        TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)         AGE
dashboard-metrics-scraper   ClusterIP   10.103.34.200   <none>        8000/TCP        4s
kubernetes-dashboard        NodePort    10.98.254.205   <none>        443:31038/TCP   4s

然后直接访问集群中的任何一个节点 IP 加上上面的31038端口即可打开 dashboard 页面了

查看dashboard状态

$ sudo kubectl get pods --all-namespaces | grep dashboard
kubernetes-dashboard   dashboard-metrics-scraper-6b4884c9d5-mvnb9   1/1     Running   0          40m
kubernetes-dashboard   kubernetes-dashboard-d7f7f565d-zhpsc         1/1     Running   0          40m

查看dashboard的日志

$ sudo  kubectl logs -f -n kubernetes-dashboard kubernetes-dashboard-d7f7f565d-zhpsc

如果安装后,dashboard状态直接爆错,没有处于Running状态,可以执行下面命令删除插件与镜像,使用docker pull安装镜像的可以更换其他版本镜像与yaml进行安装

# 删除dashboard插件,recommended.yaml为安装时的名称,执行删除后,docker里对应的镜像没不会同步删除
sudo kubectl delete -f recommended.yaml

Web访问的其他方式

开启NodePort访问的另一种方式

查看 kubernetes-dashboard

sudo kubectl --namespace=kubernetes-dashboard get service kubernetes-dashboard

[root@k8s ~]# kubectl --namespace=kubernetes-dashboard get service kubernetes-dashboard
NAME                   TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)   AGE
kubernetes-dashboard   ClusterIP   10.97.154.42   <none>        443/TCP   28m

编辑kubernetes-dashboard, 将里面的type: ClusterIP改为type: NodePort即可。

$ kubectl --namespace=kubernetes-dashboard edit service kubernetes-dashboard

wq保存即可。等一会儿,重新查看,就变为NodePort了。

$ sudo kubectl --namespace=kubernetes-dashboard get service kubernetes-dashboard
NAME                   TYPE       CLUSTER-IP      EXTERNAL-IP   PORT(S)         AGE
kubernetes-dashboard   NodePort   10.98.254.205   <none>        443:31038/TCP   59s

然后直接访问集群中的任何一个节点 IP 加上上面的31038端口即可打开 dashboard 页面了

API Server访问

启动Web访问,accept-hosts需要绑定当前服务器ip,即绑定接收请求的地址(可以使用正则表达式),不绑定访问可能会被拒绝,直接返回“Forbidden”

nohup sudo kubectl proxy --address='0.0.0.0' --port=8001 --accept-hosts='.*' &

直接用curl在服务器测试访问

curl http://localhost:8001/api/

如果能返回下面json串,就表示Dashboard已安装成功

{
  "kind": "APIVersions",
  "versions": [
    "v1"
  ],
  "serverAddressByClientCIDRs": [
    {
      "clientCIDR": "0.0.0.0/0",
      "serverAddress": "192.168.10.161:6443"
    }
  ]
}

进入Dashboard web管理平台 http://192.168.10.161:8001/api/v1/namespaces/kube-system/services/https:kubernetes-dashboard:/proxy/#!/login

创建用户

我们创建一个admin用户并授予admin 角色绑定,使用下面的yaml文件创建admin用户并赋予他管理员权限,然后就可以通过token 登陆dashbaord,这种认证方式本质实际上是通过Service Account 的身份认证加上Bearer token请求 API server 的方式实现,参考Kubernetes 中的认证
``
新建文件(文件名随意)admin-user.yaml
输入内容:

apiVersion: v1
kind: ServiceAccount
metadata:
  name: admin-user
  namespace: kubernetes-dashboard

执行:

sudo kubectl create -f admin-user.yaml

绑定用户关系

新建文件(文件名随意)admin-user-role-binding.yaml
输入内容:

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

执行:

sudo kubectl create -f admin-user-role-binding.yaml

如果过程中提示存在或者需要删除,只需要kubectl delete -f 相应的yaml文件即可。

获取token

按照官网提示的获取token方法:

$ sudo kubectl -n kubernetes-dashboard describe secret $(kubectl -n kubernetes-dashboard get secret | grep admin-user | awk '{print $1}')

--完--