您现在的位置是:首页 > 正文

K8S安装及卸载dashboard

2024-02-01 03:34:40阅读 2

目录

背景

k8s和dashboard版本对应

安装dashboard

访问dashboard

kubectl proxy

nodeport或者ingress来暴露出来服务

kubectl port-forward

dashboard登录

token登录

kubeconfig登录

创建账户

 修改为http访问

第一步

第二步 

卸载dashboard


背景

在已有的k8s(v1.23)集群上安装dashboard(v2.5.1)。 

为什么k8s版本选择v1.23?这个版本包含docker engine组件dockershim。再高的版本容器如果使用docker需要使用容器运行时接口(CRI)方式。

k8s和dashboard版本对应

根据k8s集群的版本安装对应版本的dashboard。版本不对应有可能会导致dashboard某些功能不能使用。

从官网查看对应关系:

​​Releases · kubernetes/dashboard · GitHub

安装dashboard

使用dashboard官网提供的yaml文件(recommended.yaml)一键安装:

kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.5.1/aio/deploy/recommended.yaml

v2.5.1版本dashboard所有的资源都在命名空间“kubernetes-dashboard”中。可以从recommended.yaml看到:

 命令查看dashboard的pods

kubectl get pods -n kubernetes-dashboard -o wide

这两个pod正常运行说明dashboard安装成功!!!

访问dashboard

安装完dashboard,然后就是如何访问到dashboard了。

v2.5.1版本的recommended.yaml默认的service模式是clusterIp(高版本的有的直接就是nodePort模式)。clusterIp模式只能在集群内访问,外网是不能访问的。

一般实现访问的方式有三种:kubectl proxy、nodePort或ingress、kubectl port-forward。

kubectl proxy

kubectl proxy是通过在本地的kubectl上暴露一个服务端口,通常为127.0.0.1:8001的非https访问, 你不能在master或者node上跑这个命令,否则除非你的master或者node有图形化的浏览器,不然还是无法看到图形dashboard。所以要在你自己的本地跑这个命令(所以,我擦,好麻烦,所以你还有在本地设置你kubectl的kubeconfig确保本地kubectl可以有权限操作所有)。然后就可以通过本地浏览器访问http://127.0.0.1:8001/api/v1/namespaces/kube-system/services/https:kubernetes-dashboard:/proxy/#!/login 看到界面了。

总结:kubectl proxy 启动的是本地代理服务器,只能通过 localhost 访问,这个只适合本地单集群使用。

nodeport或者ingress来暴露出来服务

通过nodeport或者ingress来暴露出来服务,这种方式比较容易理解,等于正常发布一个服务,所以将官方的的yaml改为nodeport方式即可。

使用kubectl edit命令直接修改service,只需要将type: ClusterIP 修改为 type: NodePort即可。

kubectl -n kubernetes-dashboard edit service kubernetes-dashboard

看一下具体分配的 node port 是哪个:

$ kubectl -n kubernetes-dashboard get service kubernetes-dashboard
NAME                   TYPE       CLUSTER-IP     EXTERNAL-IP   PORT(S)         AGE
kubernetes-dashboard   NodePort   10.106.3.227   <none>        443:32212/TCP   9h

可以看到这里分配的是 32212 端口。

然后就是 node 的 ip 地址了,如果是单节点的集群,那么 node ip 就固定为 master node 的IP,可以通过 kubectl cluster-info 获取。如果是多节点的集群,则需要找到 kubernetes-dashboard 服务被部署到了哪个节点。

$ kubectl get pods -A -o wide | grep kubernetes-dashboard
kubernetes-dashboard   dashboard-metrics-scraper-799d786dbf-krhln   1/1     Running   0             32m   10.244.1.3     skyserver2   <none>           <none>
kubernetes-dashboard   kubernetes-dashboard-6b6b86c4c5-ptstx        1/1     Running   0             9h    10.244.1.2     skyserver2   <none>           <none>

如图 kubernetes-dashboard 服务被部署到了 skyserver2 节点,skyserver2 的 IP 是 192.168.0.50,则拼合起来的地址是

https://192.168.0.50:32212

kubectl port-forward

$ kubectl port-forward -n kubernetes-dashboard service/kubernetes-dashboard 8080:443
Forwarding from 127.0.0.1:8080 -> 8443
Forwarding from [::1]:8080 -> 8443

类似的,也只能本地访问 https://localhost:8080 。

dashboard登录

访问成功后,出现登录页面。让用户选择是用token的方式登录,还是kubeconfig方式登录

token登录

token可以通过下面的命令简单获取到:

kubectl -n kubernetes-dashboard describe secret $(kubectl -n kubernetes-dashboard get secret -o name | grep namespace) | grep token

输出为:

$ kubectl -n kube-system describe $(kubectl -n kube-system get secret -n kube-system -o name | grep namespace) | grep token
Name:         namespace-controller-token-r87br
Type:  kubernetes.io/service-account-token
token:      eyJhbGciOiJSUzI1NiIsImtpZCI6ImNuYUVPT3FRR0dVOFBmN3pFeW81Y1p5R004RVh6VGtJUUpfSHo1ZVFMUVEifQ.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlLXN5c3RlbSIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJuYW1lc3BhY2UtY29udHJvbGxlci10b2tlbi1yODdiciIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VydmljZS1hY2NvdW50Lm5hbWUiOiJuYW1lc3BhY2UtY29udHJvbGxlciIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VydmljZS1hY2NvdW50LnVpZCI6ImU2NjU3ODI3LTc4NTUtNDAzOC04MmJjLTlmMjI0OWM3NzYyZiIsInN1YiI6InN5c3RlbTpzZXJ2aWNlYWNjb3VudDprdWJlLXN5c3RlbTpuYW1lc3BhY2UtY29udHJvbGxlciJ9.sVRT_x5NB4sqYwyyqn2Mm3hKg1jhvCsCDMbm_JY-3a19tknzwv_ZPpGOHWrPxmCG45_-tHExi7BbbGK1ZAky2UjtEpxmtVNR6yqHRMYvXtqifqHI4yS6ig-t5WiZ0a4h1q6xZfWsM9nlINSTGQbguCCN2kXUYyAZ0HPdPhdFtmyH9_fjI-FXQOPeK9t9GfWn9Nm52T85spzriwOMY96fFXZ3YaiuzfY5aBtGoxLwDu7O2GOazBmeFaRzEEGR0RjgdM7WPFmtDvbaidIJDPkLznqftqwUFeWHjz6-toO8iaKW_QKHFBvZTQ6uXSc__tbcSYyThu3Ty97-Ml8TArhacw

复制这里的 token 提交就可以登录。

kubeconfig登录

在 kebeconf 文件(路径为 ~/.kube/config)中加入 token 信息:

apiVersion: v1
clusters:
- cluster:
    certificate-authority-data: XXXXXX==
    server: https://192.168.0.41:6443
  name: kubernetes
contexts:
- context:
    cluster: kubernetes
    user: kubernetes-admin
  name: kubernetes-admin@kubernetes
current-context: kubernetes-admin@kubernetes
kind: Config
preferences: {}
users:
- name: kubernetes-admin
  user:
    client-certificate-data: XXXXX==
    client-key-data: XXXX=
    token: eyJhbGciOiJSUzI1NiIsImtpZCI6ImNuYUVPT3FRR0dVOFBmN3pFeW81Y1p5R004RVh6VGtJUUpfSHo1ZVFMUVEifQ.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlLXN5c3RlbSIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJuYW1lc3BhY2UtY29udHJvbGxlci10b2tlbi1yODdiciIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VydmljZS1hY2NvdW50Lm5hbWUiOiJuYW1lc3BhY2UtY29udHJvbGxlciIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VydmljZS1hY2NvdW50LnVpZCI6ImU2NjU3ODI3LTc4NTUtNDAzOC04MmJjLTlmMjI0OWM3NzYyZiIsInN1YiI6InN5c3RlbTpzZXJ2aWNlYWNjb3VudDprdWJlLXN5c3RlbTpuYW1lc3BhY2UtY29udHJvbGxlciJ9.sVRT_x5NB4sqYwyyqn2Mm3hKg1jhvCsCDMbm_JY-3a19tknzwv_ZPpGOHWrPxmCG45_-tHExi7BbbGK1ZAky2UjtEpxmtVNR6yqHRMYvXtqifqHI4yS6ig-t5WiZ0a4h1q6xZfWsM9nlINSTGQbguCCN2kXUYyAZ0HPdPhdFtmyH9_fjI-FXQOPeK9t9GfWn9Nm52T85spzriwOMY96fFXZ3YaiuzfY5aBtGoxLwDu7O2GOazBmeFaRzEEGR0RjgdM7WPFmtDvbaidIJDPkLznqftqwUFeWHjz6-toO8iaKW_QKHFBvZTQ6uXSc__tbcSYyThu3Ty97-Ml8TArhacw

默认生成的kebuconf文件是不带 token 字段的,加上即可。

然后在页面上提交这个 kebuconf 文件即可登录。相比token登录方式,不需要每次去获取token内容,一次保存之后以后方便很多。

创建账户

默认的账户token没有权限,登录dashboard后什么也看不到。我们创建一个管理员账号,并用该账号的token登录

#创建账户
kubectl   create   serviceaccount  dashboard-admin  -n  kubernetes-dashboard

#授权
kubectl   create  clusterrolebinding  dashboard-admin-rb  --clusterrole=cluster-admin  --serviceaccount=kubernetes-dashboard:dashboard-admin

#获取账号token
kubectl   get  secrets  -n    kubernetes-dashboard  | grep  dashboard-admin
kubectl   describe  secrets “上一步获取到的secrets名称”   -n kubernetes-dashboard

用该账户的token登录以后,就能正常访问了!!

 修改为http访问

默认情况下,dashboard需要以https的方式访问。使用浏览器访问dashboard时,可以连接上,但是浏览器会因为网站使用的是自签名证书而报错 “此网站连接不安全” 拒绝访问。各浏览器的处理:

  • edag:拒绝访问,可以使用魔术短语: thisisunsafe (没有输入框,只要单击该页面以确保它具有焦点,然后键盘输入即可)
  • firefox:默认拒绝,选择"接受风险并继续"后可以正常访问
  • Chrome:待测试,应该可以使用魔术短语: thisisunsafe
  • Safari: 默认拒绝,点击 “Show details” -> “visit this website” -> “visit website” 可以绕开限制继续访问

我们也可以关闭https的模式,使用http访问:

第一步

还未安装dashboard则直接修改dashboard的资源清单文件(recommended.yaml),或者使用kubelet edit命令编辑已部署的资源清单,

首先配置置 kubernetesui/dashboard:v2.5.1镜像的启动参数,主要是--enable-insecure-login--insecure-port=8080参数。

$ kubectl edit deployments.apps -n kubernetes-dashboard kubernetes-dashboard
args:
  # - --auto-generate-certificates
  - --namespace=kubernetes-dashboard
  - --enable-insecure-login
  - --insecure-port=8080

# Pod 端口暴露
ports:
  - name: https
    containerPort: 8443
    protocol: TCP
  - name: http
    containerPort: 8080
    protocol: TCP

# Pod 健康检查
livenessProbe:
  # httpGet:
  #   scheme: HTTPS
  #   path: 
  #   port: 8443
  httpGet:
    scheme: HTTP
    path: 
    port: 8080

第二步 

配置 kubernetes-dashboard 的 Service 资源管理器

kubectl edit svc -n kubernetes-dashboard kubernetes-dashboard
  ports:
  - name: https
    port: 443
    protocol: TCP
    targetPort: 8443
  - name: http
    port: 8080
    protocol: TCP
    targetPort: 8080
  selector:
    k8s-app: kubernetes-dashboard
  sessionAffinity: None
  type: ClusterIP

$ kubectl get svc -n kubernetes-dashboard kubernetes-dashboard
NAME                   TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)            AGE
kubernetes-dashboard   ClusterIP   11.19.103.247   <none>        443/TCP,8080/TCP   3h39m

卸载dashboard

kubectl delete -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.5.1/aio/deploy/recommended.yaml

网站文章

  • Linux安装Redis数据库,实现远程连接

    Linux安装Redis数据库,实现远程连接

    Redis作为一款高速缓存的key value键值对的数据库,在许许多多的场景中广泛使用,由于是把数据存储在内存中,所以读写效率极高。下面介绍如何在内网虚拟机的linux中搭建redis并通过cpolar内网穿透实现公网访问。

    2024-02-01 03:34:34
  • Linux C语言中access函数的用法

    Linux C语言中access()函数的使用方法。

    2024-02-01 03:34:27
  • 工作记录---静态库和动态库

    1.静态库就是直接将需要的代码连接进可执行程序; 动态库就是在需要调用其中的函数时,根据函数映射表找到该函数然后调入堆栈执行。

    2024-02-01 03:33:57
  • 有名管道与无名管道以及他们之间的区别

    有名管道与无名管道以及他们之间的区别

    有名管道与无名管道以及他们之间的区别

    2024-02-01 03:33:51
  • 特征工程之mushroom classification

    库import numpy as np # linear algebraimport pandas as pd # data processing, CSV file I/O (e.g. pd.read_csv)import matplotlib.pyplot as pltimport seaborn as snsfrom matplotlib.pyplot import figure...

    2024-02-01 03:33:44
  • 简单区分数据库之中的1NF、2NF、3NF、BCNF

    简单理解主属性、非主属性、部分函数依赖、完全函数依赖、传递函数依赖。简单区分1NF、2NF、3NF、4NF

    2024-02-01 03:33:40
  • 【ensp的OSPF多区域配置】

    【ensp的OSPF多区域配置】

    ensp是华为公司提供的一款模拟器,它可以在计算机上模拟出真实的华为网络设备,并支持OSPF协议的配置。OSPF(Open Shortest Path First)是一种开放式最短路径优先协议,它可以...

    2024-02-01 03:33:09
  • ChatGPT大更新!联网/插件功能无需排队,Plus用户下周即可体验

    ChatGPT大更新!联网/插件功能无需排队,Plus用户下周即可体验

    好消息,ChatGPT的联网和插件功能不用等了!OpenAI刚刚宣布,。具体来说,在最新的联网和插件Beta版中,ChatGPT会在设置里增加这样一个界面:回顾一下,网页浏览功能,能让ChatGPT不...

    2024-02-01 03:33:03
  • 如何配置 Kafka 无消息丢失

    如何配置 Kafka 无消息丢失

    kafka在三个阶段可能出现消息丢失,分别是生产消息、消费消息、页缓存操作后异步刷盘。

    2024-02-01 03:32:57
  • PgSQL——学习笔记三:创建&amp;删除模式

    PgSQL——学习笔记三:创建&amp;删除模式

    PostgreSQL 模式(SCHEMA) PostgreSQL 模式(SCHEMA)可以看着是一个表的集合。 一个模式可以包含视图、索引、数据类型、函数和操作符等。 相同的对象名称可以被用于不同的模...

    2024-02-01 03:32:27