部署kubernates dashboard

参考官方文档:html

https://github.com/kubernetes/dashboardnode

直接部署官方默认的dashboard:git

kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v1.10.1/src/deploy/recommended/kubernetes-dashboard.yaml

官方默认的replica是1,能够下载官方的yaml文件,按需修改后部署github

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

部署成功后输入命令查看Pod能够看到dashboard已经部署成功json

$ kubectl -n kube-system get pods

输入命令查看Service,会发现dashboard的IP地址是一个自动分配的Cluster IP地址api

$ kubectl -n kube-system get svc

在不配置任何网络策略的状况下,咱们能够启动kube-proxy,用localhost进行访问。也能够修改service增长node port后经过node的IP地址进行访问。网络

在这里我修改了type为nodePort和指定了portsession

$ kubectl -n kube-system edit svc kubernetes-dashboard
apiVersion: v1
kind: Service
metadata:
  annotations:
    kubectl.kubernetes.io/last-applied-configuration: |
      {"apiVersion":"v1","kind":"Service","metadata":{"annotations":{},"labels":{"k8s-app":"kubernetes-dashboard"},"name":"kubernetes-dashboard","namespace":"kube-system"},"spec":{"ports":[{"port":443,"targetPort":8443}],"selector":{"k8s-app":"kubernetes-dashboard"}}}
  creationTimestamp: "2019-06-25T08:32:58Z"
  labels:
    k8s-app: kubernetes-dashboard
  name: kubernetes-dashboard
  namespace: kube-system
  resourceVersion: "131106"
  selfLink: /api/v1/namespaces/kube-system/services/kubernetes-dashboard
  uid: d65ea8d9-9723-11e9-beba-08002777dcd3
spec:
  clusterIP: 10.105.212.27
  ports:
  - nodePort: 31195
    port: 443
    protocol: TCP
    targetPort: 8443
  selector:
    k8s-app: kubernetes-dashboard
  sessionAffinity: None
  type: NodePort
status:
  loadBalancer: {}

修改后保存,能够看到service的TYPE已经变成NodePort,端口映射也完成了。app

使用dashboard所在node的IP地址加上映射到Node的端口号能够直接访问Dashboardide

https://192.168.7.87:31195/

身份认证

登录 dashboard 的时候支持 kubeconfig 和 token 两种认证方式,kubeconfig 中也依赖 token 字段,因此生成 token 这一步是必不可少的。

下文分两块来说解两种登录认证方式:

  • 为 brand 命名空间下的 brand 用户建立 kubeconfig 文件
  • 为集群的管理员(拥有全部命名空间的 amdin 权限)建立 token

使用 kubeconfig

登录dashboard的时候能够指定kubeconfig文件来认证用户权限,如何生成登录dashboard时指定的kubeconfig文件请参考建立用户认证受权的kubeconfig文件

注意咱们生成的 kubeconfig 文件中没有 token 字段,须要手动添加该字段。

好比咱们为 brand namespace 下的 brand 用户生成了名为 brand.kubeconfig 的 kubeconfig 文件,还要再该文件中追加一行 token 的配置(如何生成 token 将在下文介绍),以下所示:

kubeconfig文件

这样就可使用brand.kubeconfig文件来登录dashboard了,并且只能访问和操做brand命名空间下的对象。

生成 token

须要建立一个 admin 用户并授予 admin 角色绑定,使用下面的 yaml 文件建立 admin 用户并赋予他管理员权限,而后能够经过 token 登录 dashbaord,该文件见 dashboard-admin.yaml。这种认证方式本质上是经过 Service Account 的身份认证加上 Bearer token 请求 API server 的方式实现,参考 Kubernetes 中的认证

kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1beta1
metadata:
  name: admin
  annotations:
    rbac.authorization.kubernetes.io/autoupdate: "true"
roleRef:
  kind: ClusterRole
  name: cluster-admin
  apiGroup: rbac.authorization.k8s.io
subjects:
- kind: ServiceAccount
  name: admin
  namespace: kube-system
---
apiVersion: v1
kind: ServiceAccount
metadata:
  name: admin
  namespace: kube-system
  labels:
    kubernetes.io/cluster-service: "true"
    addonmanager.kubernetes.io/mode: Reconcile

执行命令

$ kubectl create -f dashboard-admin.yaml

执行命令

$ kubectl -n kube-system get secret|grep admin-token

执行命令

$ kubectl -n kube-system describe secret admin-token-78bfl

拷贝token在登陆页面进行登陆,能够以管理员身份进入dashboard

也能够用命令直接提取token

$ kubectl -n kube-system get secret admin-token-78bfl -o jsonpath={.data.token}|base64 -d
相关文章
相关标签/搜索