使用KHI工具可视化开源Kubernetes集群审计日志(基于Loki示例)
前言
Kubernetes集群的运维和故障排查往往需要深入了解资源的历史变更情况。KHI(Kubernetes History Inspector)是一款强大的可视化工具,仅需kube-apiserver
的审计日志即可还原集群资源的历史状态。本文将详细介绍如何结合Loki日志系统,在本地开发环境中搭建完整的KHI演示环境。
环境准备
基础工具安装
在开始前,请确保已安装以下工具:
- Docker或Podman容器运行时
- kind(Kubernetes in Docker)工具
- Helm包管理工具
- LogCLI(Loki日志查询工具)
集群配置详解
审计策略配置
审计策略决定了kube-apiserver记录哪些操作。我们创建audit-policy.yaml
文件:
apiVersion: audit.k8s.io/v1
kind: Policy
rules:
- level: Metadata
resources:
- group: ""
resources: ["configmaps", "secrets"]
- level: RequestResponse
关键参数说明:
Metadata
级别:记录操作元数据(用户、时间戳等)RequestResponse
级别:额外记录请求和响应体内容
kind集群配置
创建kind-config.yaml
配置文件:
kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
nodes:
- role: control-plane
extraMounts:
- hostPath: audit-policy/
containerPath: /etc/kubernetes/audit
kubeadmConfigPatches:
- |
apiServer:
extraArgs:
audit-policy-file: "/etc/kubernetes/audit/audit-policy.yaml"
audit-log-path: "/var/log/kubernetes/audit.log"
extraVolumes:
- name: audit-config
hostPath: /etc/kubernetes/audit
mountPath: /etc/kubernetes/audit
- name: audit-logs
hostPath: /var/log/kubernetes
mountPath: /var/log/kubernetes
- role: worker
- role: worker
- role: worker
此配置实现了:
- 将审计策略挂载到控制平面节点
- 配置apiserver启用审计日志
- 创建3个工作节点
日志收集系统部署
Loki部署方案
Loki是轻量级的日志聚合系统,我们使用Helm快速部署:
# loki-values.yaml
loki:
schemaConfig:
configs:
- from: "2025-01-01"
store: tsdb
deploymentMode: SingleBinary
部署命令:
helm install loki grafana/loki -f loki-values.yaml -n khi
Fluent Bit配置技巧
Fluent Bit作为日志收集器,需要特别注意:
# fluentbit-values.yaml
inputs: |
[INPUT]
Name tail
Path /var/log/containers/*.log
[INPUT]
Name tail
Tag kubevar.audit
Path /mnt/audit/audit.log
outputs: |
[OUTPUT]
Name loki
Host loki-gateway.khi.svc.cluster.local
关键配置项:
- 同时收集容器日志和审计日志
- 为审计日志添加专用标签
- 配置Loki输出目标
实战演练
生成测试数据
执行以下命令产生审计日志:
kubectl create deployment nginx --image nginx --replicas 3
kubectl scale deployment nginx --replicas 5
kubectl delete deployment nginx
日志导出方法
使用logcli导出日志:
logcli query '{job="audit"}' \
--from="2025-04-08T00:00:00Z" \
--output=raw > audit_log_export.jsonl
注意事项:
- 时间范围需覆盖测试操作时段
- 使用raw格式保持原始JSON结构
KHI可视化分析
启动KHI服务
docker run --rm -p 8080:8080 khi/release:latest
操作流程
- 访问http://localhost:8080
- 创建"OSS Kubernetes Cluster"类型检查
- 上传导出的日志文件
- 查看时间线视图
分析要点
在时间线视图中可以观察到:
- Deployment创建事件
- 扩缩容操作详情
- 资源删除记录
- 操作时间序列关系
最佳实践建议
-
生产环境建议:
- 使用持久化存储保存审计日志
- 配置日志保留策略
- 考虑使用Grafana Cloud托管服务
-
性能优化:
- 调整审计策略级别
- 限制收集的命名空间
- 配置日志采样率
-
安全建议:
- 保护审计日志访问权限
- 定期备份关键日志
- 启用日志完整性检查
总结
通过本文介绍的方法,我们实现了:
- 使用kind快速搭建测试集群
- 配置详细的审计日志策略
- 部署完整的日志收集管道
- 使用KHI进行可视化分析
这种方案特别适合以下场景:
- 开发测试环境的问题复现
- 生产环境的异常行为分析
- 集群变更的审计追踪
- 资源生命周期管理
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考