Kuboard安装及配置

Kuboard 是 Kubernetes 的一款图形化管理界面。

Kuboard安装

安装 Kuboard 时,假设已经有一个 Kubernetes 集群,以下任何形式安装的集群都可以:

  • kubeadm 安装(或者基于 kubeadm 的衍生工具,如 Sealos 等)
  • 二进制安装
  • 阿里云、腾讯云等公有云托管集群
  • 其他

如果参考 https://kuboard.cn 网站上提供的 Kubernetes 安装文档,可在 master 节点上执行以下命令:

kubectl apply -f https://kuboard.cn/install-script/kuboard.yaml
kubectl apply -f https://addons.kuboard.cn/metrics-server/0.3.7/metrics-server.yaml

metrics-server: https://github.com/kubernetes-sigs/metrics-server

查看 Kuboard 运行状态:

kubectl get pods -l k8s.kuboard.cn/name=kuboard -n kube-system

输出结果如下所示:

NAME                       READY   STATUS        RESTARTS   AGE
kuboard-54c9c4f6cb-6lf88   1/1     Running       0          45s

Kuboard卸载

执行以下指令,可以卸载 Kuboard

kubectl delete -f https://kuboard.cn/install-script/kuboard.yaml
kubectl delete -f https://addons.kuboard.cn/metrics-server/0.3.7/metrics-server.yaml

获取Token

可以获得管理员用户、只读用户的Token。

管理员用户

拥有的权限

  • 此Token拥有ClusterAdmin的权限,可以执行所有操作

执行命令

# 如果参考 www.kuboard.cn 提供的文档安装 Kuberenetes,可在第一个 Master 节点上执行此命令
echo $(kubectl -n kube-system get secret $(kubectl -n kube-system get secret | grep kuboard-user | awk '{print $1}') -o go-template='{{.data.token}}' | base64 -d)

输出

取输出信息中 token 字段

eyJhbGciOiJSUzI1NiIsImtpZCI6IiJ9.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlLXN5c3RlbSIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJhZG1pbi11c2VyLXRva2VuLWc4aHhiIiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZXJ2aWNlLWFjY291bnQubmFtZSI6ImFkbWluLXVzZXIiLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlcnZpY2UtYWNjb3VudC51aWQiOiI5NDhiYjVlNi04Y2RjLTExZTktYjY3ZS1mYTE2M2U1ZjdhMGYiLCJzdWIiOiJzeXN0ZW06c2VydmljZWFjY291bnQ6a3ViZS1zeXN0ZW06YWRtaW4tdXNlciJ9.DZ6dMTr8GExo5IH_vCWdB_MDfQaNognjfZKl0E5VW8vUFMVvALwo0BS-6Qsqpfxrlz87oE9yGVCpBYV0D00811bLhHIg-IR_MiBneadcqdQ_TGm_a0Pz0RbIzqJlRPiyMSxk1eXhmayfPn01upPdVCQj6D3vAY77dpcGplu3p5wE6vsNWAvrQ2d_V1KhR03IB1jJZkYwrI8FHCq_5YuzkPfHsgZ9MBQgH-jqqNXs6r8aoUZIbLsYcMHkin2vzRsMy_tjMCI9yXGiOqI-E5efTb-_KbDVwV5cbdqEIegdtYZ2J3mlrFQlmPGYTwFI8Ba9LleSYbCi4o0k74568KcN_w

只读用户

拥有的权限

  • view 可查看名称空间的内容
  • system:node 可查看节点信息
  • system:persistent-volume-provisioner 可查看存储类和存储卷声明的信息

适用场景

只读用户不能对集群的配置执行修改操作,非常适用于将开发环境中的 Kuboard 只读权限分发给开发者,以便开发者可以便捷地诊断问题

执行命令

执行如下命令可以获得只读用户的 Token

# 如果参考 www.kuboard.cn 提供的文档安装 Kuberenetes,可在第一个 Master 节点上执行此命令
echo $(kubectl -n kube-system get secret $(kubectl -n kube-system get secret | grep kuboard-viewer | awk '{print $1}') -o go-template='{{.data.token}}' | base64 -d)

输出

取输出信息中 token 字段

eyJhbGciOiJSUzI1NiIsImtpZCI6IiJ9.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlLXN5c3RlbSIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJhZG1pbi11c2VyLXRva2VuLWc4aHhiIiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZXJ2aWNlLWFjY291bnQubmFtZSI6ImFkbWluLXVzZXIiLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlcnZpY2UtYWNjb3VudC51aWQiOiI5NDhiYjVlNi04Y2RjLTExZTktYjY3ZS1mYTE2M2U1ZjdhMGYiLCJzdWIiOiJzeXN0ZW06c2VydmljZWFjY291bnQ6a3ViZS1zeXN0ZW06YWRtaW4tdXNlciJ9.DZ6dMTr8GExo5IH_vCWdB_MDfQaNognjfZKl0E5VW8vUFMVvALwo0BS-6Qsqpfxrlz87oE9yGVCpBYV0D00811bLhHIg-IR_MiBneadcqdQ_TGm_a0Pz0RbIzqJlRPiyMSxk1eXhmayfPn01upPdVCQj6D3vAY77dpcGplu3p5wE6vsNWAvrQ2d_V1KhR03IB1jJZkYwrI8FHCq_5YuzkPfHsgZ9MBQgH-jqqNXs6r8aoUZIbLsYcMHkin2vzRsMy_tjMCI9yXGiOqI-E5efTb-_KbDVwV5cbdqEIegdtYZ2J3mlrFQlmPGYTwFI8Ba9LleSYbCi4o0k74568KcN_w

访问Kuboard

可以通过NodePortport-forward两种方式当中的任意一种访问 Kuboard

通过NodePort访问

Kuboard Service 使用了 NodePort 的方式暴露服务,NodePort 为 32567;可以按如下方式访问 Kuboard。

http://任意一个Worker节点的IP地址:32567/

输入前一步骤中获得的 token,可进入 Kuboard 集群概览页

TIP:如果使用的是阿里云、腾讯云等,请在其安全组设置里开放 worker 节点 32567 端口的入站访问,也可以修改Kuboard.yaml文件,使用自己定义的 NodePort 端口号

通过port-forward访问

在客户端电脑中执行如下命令

kubectl port-forward service/kuboard 8080:80 -n kube-system

在浏览器打开链接 (请使用 kubectl 所在机器的IP地址)

http://localhost:8080

输入前一步骤中获得的 token,可进入 Kubernetes 集群概览

TIP:需要先完成 从客户端电脑远程管理 Kubernetes 的配置

为开发测试人员授权

运维团队搭建好 Kubernetes 之后,需要授权开发/测试团队的成员执行某些特定的操作,例如更新镜像版本、查看容器日志、进入容器终端、通过Proxy访问接口等,以便开发测试人员可以自行完成日常的测试联调等任务。使用 Kubernetes + Kuboard 的团队可能以如下几种形式授权开发、测试人员访问:

(1)为开发团队、测试团队创建各自的 ServiceAccount,并授权其访问指定的名称空间,请参考:

(2)与自建的 gitlab / github 实现单点登录,并授权 gitlab / github 中的 group/user 访问指定的名称空间,请参考 Kubernetes Authentication 安装向导

(3)与自研的 PaaS 平台整合,免登录访问 Kuboard 提供的控制台界面、日志界面,请参考 免登录访问

免登陆访问

可以通过查询参数中的 k8sToken 字段直接登录系统,无需在登录界面输入 Token。

直接访问集群概览页

如需要无登录访问集群概览页面,可使用如下格式的 url 进入:

http://任意一个Worker节点的IP地址:32567/dashboard?k8sToken=yourtoken

其他界面

其他任意 Kuboard 界面同理,只需要增加 k8sToken 作为查询参数,即可跳过输入 Token 的步骤

直接访问终端界面

如果想要无登录直接访问容器组的控制台,可使用如下格式的 url 进入:

http://任意一个Worker节点的IP地址:32567/console/yournamespace/yourpod?containerName=yourcontainer&shell=bash&k8sToken=yourtoken

其中,shell 参数可选取值有:

  • bash,使用/bin/bash作为 shell
  • sh, 使用/bin/sh作为 shell

配置Kuboard环境变量

环境变量

安装 Kuboard 后,有如下几个环境变量值得关注:

环境变量名 描述 默认值
KUBERNETES_CLUSTER_DOMAIN Kubernetes Cluster Name cluster.local
KUBOARD_ICP_DESCRIPTION ICP 备案号
KUBOARD_PROXY_COOKIE_TTL Kuboard Proxy 中 Cookie 的有效时长 36000
KUBOARD_SAFE_MODE 是否禁用监控套件的转发
OIDC_ISSUER OpenID Connect 对应的 Identity Provider

修改Kuboard环境变量

  • 打开 Kuboard 界面,并导航到 Kuboard 工作负载编辑页:

kube-system 名称空间 --> Kuboard 工作负载 --> 编辑

  • 也可以按如下方式直接进入 Kuboard 工作负载编辑页:

打开链接http://节点IP:32567/namespace/kube-system/workload/edit/Deployment/kuboard

在 Kuboard 工作负载编辑页,为 Kuboard 容器添加、修改环境变量,如下图,正在修改KUBOARD_ICP_DESCRIPTION的取值

Kuboard 配置ICP备案号

KUBERNETES_CLUSTER_DOMAIN

如果您通过 kubeadm 安装 Kubernetes 集群,执行命令

kubeadm config view

可以查看到输出结果中的networking.dnsDomain字段,该字段通常取值为cluster.local,如下所示:

apiServer:
  extraArgs:
    authorization-mode: Node,RBAC
  timeoutForControlPlane: 4m0s
apiVersion: kubeadm.k8s.io/v1beta2
certificatesDir: /etc/kubernetes/pki
clusterName: kubernetes
controlPlaneEndpoint: apiserver.demo:6443
controllerManager: {}
dns:
  type: CoreDNS
etcd:
  local:
    dataDir: /var/lib/etcd
imageRepository: gcr.azk8s.cn/google-containers
kind: ClusterConfiguration
kubernetesVersion: v1.16.4
networking:
  dnsDomain: cluster.local
  serviceSubnet: 10.96.0.0/12
scheduler: {}

少数情况下,安装集群时可能修改了这个字段的取值,此时,请确保您为 Kuboard 设置了KUBERNETES_CLUSTER_DOMAIN这个环境变量,并将其取值设置与networking.dnsDomain的取值相同。否则 Kuboard 的一部分功能将无法正常工作。

KUBOARD_ICP_DESCRIPTION

自 Kuboard v1.0.6.3 开始,用户可以修改 Kuboard 登录页面页尾的 ICP 备案编号及URL。

为 Kuboard 增加环境变量KUBOARD_ICP_DESCRIPTION,取值为ICP备案号,例如京ICP备19008693号-2,应用生效后,进入 Kuboard 登录界面,将在页尾显示ICP备案编号

安全提示

Kuboard 用于管理的 Kubernetes 集群上部署的各类资源,如果想通过公有网络访问 Kuboard,请做好安全防护:

(1)建议限制可以访问 Kuboard 的 IP 地址白名单

(2)不要泄露 ServiceAccount 的 Token,如需要修改 ServiceAccount 的 Token,请参考 为名称空间创建管理员用户 中,关于在 ServiceAccount 界面上删除 Secret 的部分

(3)建议使用 GitLab/GitHub 单点登录

(4)请为 Kuboard 配置 https 证书,配置方式有:

(5)请设置 KUBOARD_SAFE_MODE

KUBOARD_SAFE_MODE

在 Kuboard 早期版本中,为了尝试监控套件的功能,在 Kuboard 所使用的 nginx 中设置了比较宽泛的动态转发,具体配置如下所示:

location ^~ /eip-monitor/ {
    location ~ "^/eip-monitor/namespace/(.*)/service/(.*)/port/(.*)/(.*)" {
        resolver 127.0.0.1 valid=5s;
        proxy_pass http://$2.$1.svc.KUBERNETES_CLUSTER_DOMAIN:$3/$4$is_args$args;
        gzip on;
    }
}

location ^~ /addons/ {
    location ~ "^/addons/namespace/(.*)/service/(.*)/port/(.*)/(.*)" {
        resolver 127.0.0.1 valid=5s;
        proxy_pass http://$2.$1.svc.KUBERNETES_CLUSTER_DOMAIN:$3/$4$is_args$args;
        gzip on;
    }
}

得益于这样的 Nginx 转发规则,Kuboard 可以在监控套件的功能中非常简便地跳转到 Kubernetes 上部署的任意 Service。但是,如果将 Kuboard 直接部署到公网,这种操作也使得 Kuboard 留下了一个安全隐患。

通过将环境变量KUBOARD_SAFE_MODE的值设置为KUBOARD_SAFE_MODE_ENABLED,可以禁用这个转发规则,以获得更好地安全性。

当前,如果您想使用 Kuboard 的 全局监控套件,请不要设置 KUBOARD_SAFE_MODE,请通过其他方式确保安全性,例如,限制只能在内网访问 Kuboard
在 Kuboard v1.0.7 及以上的版本中,将引入 Kuboard Proxy 的功能,该功能可以在兼容 Kuboard 套件的情况下,提升安全性,禁止未经授权的访问;届时,将不再需要设置KUBOARD_SAFE_MODE

OIDC_ISSUER

OIDC_ISSUER这个环境变量与 Kubernetes Authentication 相关,建议不要手工设置此环境变量,如果想通过 OpenID Connect 的方式登录 Kuboard / Kubectl 请参考 Kubernetes Authentication 安装向导,在该向导的引导下,将能够顺利配置 Kuboard 与 GitHub / GitLab 等的单点登录。

版权声明:
作者:Joe.Ye
链接:https://www.appblog.cn/index.php/2023/03/31/kuboard-installation-and-configuration/
来源:APP全栈技术分享
文章版权归作者所有,未经允许请勿转载。

THE END
分享
二维码
打赏
海报
Kuboard安装及配置
Kuboard 是 Kubernetes 的一款图形化管理界面。 Kuboard安装 安装 Kuboard 时,假设已经有一个 Kubernetes 集群,以下任何形式安装的集群都可以: kubeadm ……
<<上一篇
下一篇>>
文章目录
关闭
目 录