Kubernetes Dashboard

Kubernetes Dashboard的部署非常简单,只需要运行

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

稍等一会,dashborad就会创建好

  1. $ kubectl -n kube-system get service kubernetes-dashboard
  2. NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE
  3. kubernetes-dashboard 10.101.211.212 <nodes> 80:32729/TCP 1m
  4. $ kubectl -n kube-system describe service kubernetes-dashboard
  5. Name: kubernetes-dashboard
  6. Namespace: kube-system
  7. Labels: app=kubernetes-dashboard
  8. Annotations: <none>
  9. Selector: app=kubernetes-dashboard
  10. Type: NodePort
  11. IP: 10.101.211.212
  12. Port: <unset> 80/TCP
  13. NodePort: <unset> 32729/TCP
  14. Endpoints: 10.244.1.3:9090
  15. Session Affinity: None
  16. Events: <none>

然后就可以通过http://nodeIP:32729来访问了。

登录认证

导入证书登录

在v1.7之前的版本中,Dashboard并不提供登陆的功能。而通常情况下,Dashboard服务都是以https的方式运行,所以可以在访问它之前将证书导入系统中:

  1. openssl pkcs12 -export -in apiserver-kubelet-client.crt -inkey apiserver-kubelet-client.key -out kube.p12
  2. curl -sSL -E ./kube.p12:password -k https://nodeIP:6443/api/v1/proxy/namespaces/kube-system/services/kubernetes-dashboard

将kube.p12导入系统就可以用浏览器来访问了。注意,如果nodeIP不在证书CN里面,则需要做个hosts映射。

使用 kubeconfig 配置文件登录

从 v1.7.0 版本开始,Dashboard 支持以 kubeconfig 配置文件的方式登录。打开 Dashboard 页面会自动跳转到登录的界面,选择 Kubeconfig 方式,并选择本地的 kubeconfig配置文件即可。

Dashboard - 图1

使用 Token 登录

从 v1.7.0 版本开始,Dashboard 支持以 Token 的方式登录。注意从 Kubernetes 中取得的 Token 需要以 Base64 解码后才可以用来登录。

下面是一个在开启 RBAC 时创建一个只可以访问 demo namespace 的 service account token 示例:

  1. # 创建 demo namespace
  2. kubectl create namespace demo
  3. # 创建并限制只可以访问 demo namespace
  4. cat <<EOF | kubectl apply -f -
  5. kind: Role
  6. apiVersion: rbac.authorization.k8s.io/v1
  7. metadata:
  8. namespace: demo
  9. name: default-role
  10. rules:
  11. - apiGroups:
  12. - '*'
  13. resources:
  14. - '*'
  15. verbs:
  16. - '*'
  17. EOF
  18. kubectl create rolebinding default-rolebinding --serviceaccount=demo:default --namespace=demo --role=default-role
  19. # 获取token
  20. secret=$(kubectl -n demo get sa default -o jsonpath='{.secrets[0].name}')
  21. kubectl -n demo get secret $secret -o jsonpath='{.data.token}' | base64 -d

注意,由于使用该 token 仅可以访问 demo namespace,故而需要登录后将访问 URL 中的 default 改成 demo。