K8S安装及卸载dashboard

目录

背景

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

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值