
kubetail/kubetailKubetail是一个基于Web的Kubernetes集群实时日志查看器。
!截图
演示地址:[***]
进一步增加了难度。
Kubetail通过提供易于使用的基于Web的界面解决了这一问题,允许您同时实时查看一组Kubernetes工作负载(如Deployment、CronJob、StatefulSet)的所有日志。其底层通过集群的Kubernetes API监控工作负载,检测新容器的创建或旧容器的删除,并自动将新容器的日志添加到查看流中,或更新UI以反映旧容器不再产生日志。这使您能够轻松跟踪应用日志,即使请求在不同服务的短暂容器间流转。此外,Kubetail支持按节点属性(如可用区、CPU架构或节点ID)过滤日志,有助于调试特定环境下的应用问题。
Kubetail应用由基于Go的后端服务器(连接Kubernetes API)和基于React的静态网站(查询后端并在浏览器中显示结果)组成。通常通过清单文件或Helm chart部署为集群内的Docker容器,可通过与访问Kubernetes Dashboard相同的方式(如kubectl proxy)在Web浏览器中访问。由于内部使用Kubernetes API请求日志,日志消息始终由您掌控,默认保持私有。
我们的目标是构建一个专为容器化环境设计的强大云原生日志平台,该项目仍在开发中。如发现bug或有建议,请创建GitHub Issue或发送邮件至***!
若允许Kubetail使用内部集群服务账户查询Kubernetes API,使用-clusterauth清单文件:
consolekubectl apply -f [***]
若要求Kubetail用户使用自己的Kubernetes认证令牌,使用-tokenauth清单文件:
consolekubectl apply -f [***]
使用Helm安装Kubetail,需先添加Kubetail仓库,然后安装chart:
consolehelm repo add kubetail [***] helm install kubetail kubetail/kubetail --namespace kubetail --create-namespace
如需配置Helm chart,请参考values.yaml了解有效值及默认值。可使用YAML文件或通过--set key=value[,key=value]参数指定配置:
consolehelm install kubetail kubetail/kubetail \ --namespace kubetail \ --create-namespace \ -f values.yaml \ --set key1=val1,key2=val2
Kubetail应用在集群中运行后,有多种方式访问其仪表板。为简单起见,若部署使用auth-mode: cluster,建议使用kubectl proxy;若使用auth-mode: token,建议使用kubectl auth-proxy插件。
最简单的访问方式是使用kubectl proxy:
consolekubectl proxy
此时可通过以下地址访问仪表板:http://localhost:8001/api/v1/namespaces/kubetail/services/kubetail:4000/proxy/。
另一种访问方式是使用kubectl port-forward:
consolekubectl port-forward -n kubetail svc/kubetail 4000:4000
此时可通过以下地址访问仪表板:http://localhost:4000。
若启用了auth-mode: token,建议使用kubectl auth-proxy插件访问仪表板,该插件会自动在本地获取访问令牌并添加到HTTP请求头中:
consolekubectl auth-proxy -n kubetail [***]
此时计算机将自动打开新浏览器标签页指向Kubetail仪表板。
Kubetail服务器可执行文件(server)支持以下命令行配置选项:
| 标志 | 数据类型 | 描述 | 默认值 |
|---|---|---|---|
| -c, --config | string | 配置文件路径 | "" |
| -a, --addr | string | 绑定的主机地址 | ":4000" |
| --gin-mode | string | Gin模式(release/debug) | "release" |
Kubetail支持使用YAML、JSON、TOML、HCL或envfile格式的配置文件。应用会自动将${NAME}格式的环境变量替换为对应值。配置文件支持以下选项(另见hack/config.yaml):
| 名称 | 数据类型 | 描述 | 默认值 |
|---|---|---|---|
| addr | string | 绑定的主机地址 | ":4000" |
| auth-mode | string | 认证模式(token/cluster/local) | "token" |
| allowed-namespaces | []string | 若非空,限制命名空间访问 | [] |
| base-path | string | URL路径前缀 | "/" |
| gin-mode | string | Gin模式(release/debug) | "release" |
| kube-config | string | Kubectl配置文件路径 | "${HOME}/.kube/config" |
| csrf.enabled | bool | 启用CSRF保护 | true |
| csrf.field-name | string | 表单中CSRF令牌名称 | "csrf_token" |
| csrf.secret | string | CSRF哈希密钥 | "" |
| csrf.cookie.name | string | CSRF cookie名称 | "csrf" |
| csrf.cookie.path | string | CSRF cookie路径 | "/" |
| csrf.cookie.domain | string | CSRF cookie域名 | "" |
| csrf.cookie.max-age | int | CSRF cookie最大有效期(秒) | 43200 |
| csrf.cookie.secure | bool | CSRF cookie secure属性 | false |
| csrf.cookie.http-only | bool | CSRF cookie HttpOnly属性 | true |
| csrf.cookie.same-site | string | CSRF cookie SameSite属性(strict/lax/none) | "strict" |
| logging.enabled | bool | 启用日志 | true |
| logging.level | string | 日志级别 | "info" |
| logging.format | string | 日志格式(json/pretty) | "json" |
| logging.access-log.enabled | bool | 启用访问日志 | true |
| logging.access-log.hide-health-checks | bool | 隐藏对/healthz的请求日志 | false |
| session.secret | string | 会话哈希密钥 | "" |
| session.cookie.name | string | 会话cookie名称 | "session" |
| session.cookie.path | string | 会话cookie路径 | "/" |
| session.cookie.domain | string | 会话cookie域名 | "" |
| session.cookie.max-age | int | 会话cookie最大有效期(秒) | 43200 |
| session.cookie.secure | bool | 会话cookie secure属性 | false |
| session.cookie.http-only | bool | 会话cookie HttpOnly属性 | true |
| session.cookie.same-site | string | 会话cookie SameSite属性(strict/lax/none) | "strict" |
| tls.enabled | bool | 启用TLS端点终止 | false |
| tls.cert-file | string | 证书文件路径 | "" |
| tls.key-file | string | 密钥文件路径 | "" |
我们的目标是构建一个专为容器化环境设计的强大云原生日志平台,该项目仍在开发中。如您有兴趣参与,请发送邮件至***或加入我们的Slack频道(kubetail)。我们特别需要以下方面的帮助:




manifest unknown 错误
TLS 证书验证失败
DNS 解析超时
410 错误:版本过低
402 错误:流量耗尽
身份认证失败错误
429 限流错误
凭证保存错误
来自真实用户的反馈,见证轩辕镜像的优质服务