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。
- 默认情况下,可以使用 ServiceAccount 的 Token 登录 Kuboard
- 还可以 使用 GitLab/GitHub 账号登录 Kuboard/Kubectl
- 也可以 为用户授权
管理员用户
拥有的权限
- 此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
可以通过NodePort
、port-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
作为 shellsh
, 使用/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
的取值
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 证书,配置方式有:
- 在 http://节点IP:32567/namespace/kube-system/workload/edit/Deployment/kuboard 界面上互联网入口(Ingress)这一部分开启 https 即可配置
- 如果在 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全栈技术分享
文章版权归作者所有,未经允许请勿转载。
共有 0 条评论