背景
当kubernates环境安装完成以后,需要监控kubernates环境的运行状态。
需要使用kubectl输入各种指令来调用api-server来查询,比如:
kubectl get node
kubectl get deployment
kubectl get pod
......
这样比较麻烦,在kubernates项目中有一个Dashboard插件, 该插件提供一个可视化的WEB界面,方便我们监控kubernates运行状态。下面具体介绍一下如何安装,这里默认你已经安装好了kubernates
安装
下载镜像
Dashboard的运行需要依赖于docker下的该镜像
REPOSITORY TAG IMAGE ID CREATED SIZE
k8s.gcr.io/kubernetes-dashboard-amd64 v1.8.3 0c60bcf89900 9 months ago 102.3 MB
但由于因为访问不到google的服务器,所以镜像需要离线下载再导入的方式,百度搜索一下,可以找到很多离线下载的镜像包。
获取Dashboard部署文件
访问该网址,获得Dashboard部署文件。
具体的做法是将kubernetes-dashboard.yaml文件中的Service定义修改为nodeType类型,如下所示:
# ------------------- Dashboard Service ------------------- #
kind: Service
apiVersion: v1
metadata:
labels:
k8s-app: kubernetes-dashboard
name: kubernetes-dashboard
namespace: kube-system
spec:
type: NodePort
ports:
- nodePort: 8081 #对外端口号
port: 443
targetPort: 8443
selector:
k8s-app: kubernetes-dashboard
修改完成以后,通过命令部署Dashboard服务
kubectl apply -f kubernetes-dashboard.yaml
正常情况下,就可以通过https://ip:port/访问到界面了。
配置Dashbaord
登录系统,将会看到如下的异常。
异常原因是因为权限不足,需要创建dashboard的用户即授权。可以参考该文章创建用户并授权。
下面给两个配置文件以供参考。
测试环境
测试环境下,可以直接使用kubernates的cluster-admin角色权限授权给kubernetes-dashboard用户,这个cluster-admin角色什么权限都有,所以在生产中使用比较危险,特别是给外网暴露端口可以访问以后。
创建并执行如下的权限配置文件kubernetes-dashboard-acess.yaml
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRoleBinding
metadata:
name: kubernetes-dashboard
labels:
k8s-app: kubernetes-dashboard
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: cluster-admin
subjects:
- kind: ServiceAccount
name: kubernetes-dashboard
namespace: kube-system
生产环境
如果是生产环境,可以参考以下配置。这里创建一个namespace为default的用户,该用户可以查看deployements和pods的get,list,watch权限。
首先创建一个用户,用户名为going
kubectl create sa going -n default
创建一个yaml文件,配置角色及将角色权限绑定给用户going
kind: Role
apiVersion: rbac.authorization.k8s.io/v1
metadata:
namespace: default
name: role-going
rules:
- apiGroups: [""]
resources: ["pods"]
verbs: ["get", "watch", "list"]
- apiGroups: ["extensions", "apps"]
resources: ["deployments"]
verbs: ["get", "list", "watch"]
---
kind: RoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
name: role-bind-going
namespace: default
subjects:
- kind: ServiceAccount
name: going
namespace: default
roleRef:
kind: Role
name: role-going
apiGroup: rbac.authorization.k8s.io
应用配置以后,通过下面指令找到用户going的token信息进行系统登录。
kubectl get secret -n default |grep going
#going-token-qbxzh kubernetes.io/service-account-token 3 47m
kubectl get secret going-token-qbxzh -o jsonpath={.data.token} -n default |base64 -d
这里就可以查看命名空间为default下的deployement和pod信息了。