Fork me on GitHub

版权声明 本站原创文章 由 萌叔 发表
转载请注明 萌叔 | https://vearne.cc

1. 前言

警告:本文仅用于萌叔自己总结之用,对其它人而言可能毫无营养,没有阅读价值。

Dashboard 是基于网页的 Kubernetes 用户界面。 你可以使用 Dashboard 将容器应用部署到 Kubernetes 集群中,也可以对容器应用排错,还能管理集群资源。 你可以使用 Dashboard 获取运行在集群中的应用的概览信息,也可以创建或者修改 Kubernetes 资源 (如 Deployment,Job,DaemonSet 等等)。

通过一段时间的使用感受而言,Dashboard虽然做的差强人意,但聊胜于无。

2. 安装&配置

wget https://raw.githubusercontent.com/kubernetes/dashboard/v2.0.4/aio/deploy/recommended.yaml

建议脚本下载以后,先大致阅读以下

2.1 修改yaml

kind: Service
apiVersion: v1
metadata:
  labels:
    k8s-app: kubernetes-dashboard
  name: kubernetes-dashboard
  namespace: kubernetes-dashboard
spec:
  ports:
    - port: 443
      targetPort: 8443
  type: NodePort  # 改为NodePort方式暴露service
  selector:
    k8s-app: kubernetes-dashboard

2.2 安装

kubectl apply -f recommended.yaml

安装完成以后

╰─$ kubectl get svc -n kubernetes-dashboard
NAME                        TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)         AGE
dashboard-metrics-scraper   ClusterIP   10.68.53.228   <none>        8000/TCP        18h
kubernetes-dashboard        NodePort    10.68.254.87   <none>        443:37736/TCP   17h

3. 访问web UI

3.1 方式1 通过 kubectl proxy

默认K8S采用Flannel网络的模型的情况下,集群内部和外部网络是不能直接互联的,但是能够通过kubectl proxy作为代理,进行通讯

kubectl proxy

在浏览器上访问,以下地址

http://localhost:8001/api/v1/namespaces/kubernetes-dashboard/services/https:kubernetes-dashboard:/proxy/

3.2 方式2 通过NodePort端口

刚才我们修改了Service/kubernetes-dashboard,将它以NodePort的方式暴露在外部网络。可以直接在浏览器中访问

https://{masterIP}:37736/

4. 通讯与鉴权

Dashboard自动生成了一个自签名的证书,用于HTTPS通讯,
因此浏览器会有不安全警告(可以将证书导出,并添加到操作系统的信任列表里,消除此问题)

apiVersion: v1
kind: Secret
metadata:
  labels:
    k8s-app: kubernetes-dashboard
  name: kubernetes-dashboard-certs
  namespace: kubernetes-dashboard
type: Opaque

最后要能够login,还需要使用token登录

4.1 生成kubernetes集群最高权限admin用户的token

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 admin-role.yaml

创建完成后获取secret中token的值。

# 获取admin-token的secret名字
$ kubectl -n kube-system get secret|grep admin-token
admin-token-nwphb                          kubernetes.io/service-account-token   3         6m
# 获取token的值
$ kubectl -n kube-system describe secret admin-token-nwphb
Name:        admin-token-nwphb
Namespace:    kube-system
Labels:        <none>
Annotations:    kubernetes.io/service-account.name=admin
        kubernetes.io/service-account.uid=f37bd044-bfb3-11e7-87c0-f4e9d49f8ed0

Type:    kubernetes.io/service-account-token

Data
====
namespace:    11 bytes
token:        非常长的字符串
ca.crt:        1310 bytes

参考资料

  1. 代码库
  2. 官方wiki
  3. 使用token进行用户身份认证
  4. 解决Kubernetes Dashboard由于自身证书问题导致一些浏览器不能打开的问题

后记

2020年10月20日 如果你使用的是easzlab/kubeasz ansible安装脚本的话,当你执行完

ansible-playbook 07.cluster-addon.yml

你会发现kubernetes-dashboard已经安装完毕,且以NodePort方式暴露出来了。

╰─$ kubectl get svc -n kube-system
NAME                        TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)                  AGE
dashboard-metrics-scraper   ClusterIP   xx.xx.xx.xx     <none>        8000/TCP                 123m
kubernetes-dashboard        NodePort    xx.xx.xx.xx     <none>        443:25230/TCP            123m
metrics-server              ClusterIP   xx.xx.xx.xx     <none>        443/TCP                  123m
kube-dns                    ClusterIP   xx.xx.xx.xx     <none>        53/UDP,53/TCP,9153/TCP   123m

2020年12月15日 如果Kubernetes Dashboard由于自身证书问题导致一些浏览器不能打开的问题,请看参考资料4


请我喝瓶饮料

微信支付码

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注