kubernetes部署dashboard可视化插件

Dashboard简介

在 Kubernetes 社区中,有一个很受欢迎的 Dashboard 项目,它可以给用户提供一个可视化的 Web 界面来查看当前集群的各种信息。用户可以用 Kubernetes Dashboard 部署容器化的应用、监控应用的状态、执行故障排查任务以及管理 Kubernetes 各种资源。
在这里插入图片描述

部署Dashboard

官方文档:
https://kubernetes.io/docs/tasks/access-application-cluster/web-ui-dashboard/

项目地址:
https://github.com/kubernetes/dashboard

helm 地址:
https://artifacthub.io/packages/helm/k8s-dashboard/kubernetes-dashboard
https://github.com/kubernetes/dashboard/tree/master/aio/deploy/helm-chart/kubernetes-dashboard

注意确认dashboard版本与kubernetes版本兼容性:
https://github.com/kubernetes/dashboard/releases

添加helm repo

helm repo add kubernetes-dashboard https://kubernetes.github.io/dashboard/

安装dashboard

helm install kubernetes-dashboard kubernetes-dashboard/kubernetes-dashboard \
  --namespace kubernetes-dashboard \
  --create-namespace \
  --set replicaCount=2 \
  --set service.type=NodePort \
  --set service.nodePort=30080 \
  --set resources.limits.cpu=200m

查看dashboard运行状态,以deployment方式部署,运行2副本pod及1个service:

[root@iZj6cc0krt5qucp7c4truyZ ~]# kubectl -n kubernetes-dashboard get pods
NAME                                    READY   STATUS    RESTARTS   AGE
kubernetes-dashboard-796f4764c9-b55bb   1/1     Running   0          9m51s
kubernetes-dashboard-796f4764c9-b7qwj   1/1     Running   0          31s

[root@iZj6cc0krt5qucp7c4truyZ ~]# kubectl -n kubernetes-dashboard get svc
NAME                   TYPE       CLUSTER-IP     EXTERNAL-IP   PORT(S)         AGE
kubernetes-dashboard   NodePort   10.233.22.92   <none>        443:30080/TCP   9m58s

Dashboard 支持 Kubeconfig 和 Token 两种认证方式,这里选择Token认证方式登录,默认serviceaccount只有读权限,这里创建admin用户。

官方参考文档:https://github.com/kubernetes/dashboard/blob/master/docs/user/access-control/README.md

创建dashboard-admin.yaml:

cat > dashboard-admin.yaml << EOF
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: kubernetes-dashboard
  namespace: kubernetes-dashboard
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: cluster-admin
subjects:
  - kind: ServiceAccount
    name: kubernetes-dashboard
    namespace: kubernetes-dashboard
EOF

创建登录用户

kubectl apply -f dashboard-admin.yaml

查看admin-user账户的token

kubectl -n kubernetes-dashboard get secret $(kubectl -n kubernetes-dashboard get sa/kubernetes-dashboard -o jsonpath="{.secrets[0].name}") -o go-template="{{.data.token | base64decode}}"

登陆dashboard,由于使用nodeport方式暴露服务,访问方式为https://任意节点IP+NodePort:

https://36.134.133.238:30080/

把获取到的Token复制到登录界面的Token输入框中:
在这里插入图片描述
成功登陆dashboard:
在这里插入图片描述
删除dashboard

helm -n kubernetes-dashboard uninstall kubernetes-dashboard

配置ingress及可信SSL证书

以上方式默认使用nodeport暴露服务,证书也为自签名证书,下面使用ingress暴露dashboard服务并使用可信SSL证书。

前提条件:

  • 集群已部署ingress控制器,本次使用ingress-nginx-controller
  • 公网可用域名,本次使用阿里云自有域名dashboard.apps.cloudcele.com
  • 公网SSL可信证书,本次使用acme.sh生成免费证书,有效期三个月,默认自动续期

证书申请:

# 安装acme.sh
curl https://get.acme.sh | sh -s email=willzhmic@outlook.com

#由于使用阿里云域名,可直接使用accessKEY调用阿里云API自动为域名签发证书
export Ali_Key="xxxxxx"
export Ali_Secret="xxxxxx"

# 注意申请的是泛域名证书,任何匹配 * 的域名都可使用该证书
acme.sh --issue --dns dns_ali -d apps.cloudcele.com -d *.apps.cloudcele.com

查看本地生成的证书

[root@localhost ~]# ll /root/.acme.sh/apps.cloudcele.com/
total 36
-rw-r--r-- 1 root root 2329 Sep  3 17:15 apps.cloudcele.com.cer
-rw-r--r-- 1 root root  591 Sep  3 17:15 apps.cloudcele.com.conf
-rw-r--r-- 1 root root  997 Sep  3 17:14 apps.cloudcele.com.csr
-rw-r--r-- 1 root root  178 Sep  3 17:14 apps.cloudcele.com.csr.conf
-rw-r--r-- 1 root root 1679 Sep  3 17:08 apps.cloudcele.com.key
-rw-r--r-- 1 root root 4399 Sep  3 17:15 ca.cer
-rw-r--r-- 1 root root 6728 Sep  3 17:15 fullchain.cer

在集群中创建secrets以引用证书,仅用到fullchain.cer证书和apps.cloudcele.com.key密钥两个文件:

cd /root/.acme.sh/apps.cloudcele.com/

kubectl -n kubernetes-dashboard create secret tls kubernetes-dashboard-tls \
  --key ./apps.cloudcele.com.key \
  --cert ./fullchain.cer

使用helm部署dashboard

helm install kubernetes-dashboard kubernetes-dashboard/kubernetes-dashboard \
  --namespace kubernetes-dashboard \
  --create-namespace \
  --version 2.0.3 \
  --set replicaCount=2 \
  --set service.type=ClusterIP \
  --set resources.limits.cpu=200m \
  --set ingress.enabled=true \
  --set ingress.path=/ \
  --set ingress.hosts[0]=dashboard.apps.cloudcele.com \
  --set ingress.tls[0].hosts[0]=dashboard.apps.cloudcele.com \
  --set ingress.tls[0].secretName=kubernetes-dashboard-tls

浏览器访问验证:
在这里插入图片描述

使用dashboard

创建示例deployment,使用nodeport向集群外暴露服务。

yaml编写参考:
https://kubernetes.io/docs/concepts/services-networking/connect-applications-service/
https://kubernetes.io/docs/concepts/services-networking/service/#nodeport

默认视图在default命名空间,可自行切换namespace,点击右上角+号创建资源:
在这里插入图片描述

有三种方式创建资源,这里使用第一种方式部署一个简单的nginx-app,设置2个副本,nodePort方式暴露服务,粘贴已经编写好的yaml文件点击upload:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-nginx-app
spec:
  selector:
    matchLabels:
      run: my-nginx-app
  replicas: 2
  template:
    metadata:
      labels:
        run: my-nginx-app
    spec:
      containers:
      - name: my-nginx-app
        image: nginx
        ports:
        - containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
  name: my-nginx-app
  labels:
    run: my-nginx-app
spec:
  type: NodePort
  ports:
  - port: 80
    protocol: TCP
    targetPort: 80
    nodePort: 30081
  selector:
    run: my-nginx-app

集群外浏览器访问应用:http://<node_ip>:30081

点击deployment可以增加应用副本,查看和更新yaml配置,以及删除整个应用:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ioHhjwa3-1587185677957)(../images/screenshot_1587184542589.png)]
点击pod可以查看pod实时打印日志以及下载日志到本地,也可以登录到pod命令行界面,进入容器执行命令进行调试,以及更新pod yaml文件或删除pod(重启):
在这里插入图片描述

评论 21
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

willops

你的鼓励将是我创作的最大动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值