使用KHI工具可视化开源Kubernetes集群审计日志(基于Loki示例)

使用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

此配置实现了:

  1. 将审计策略挂载到控制平面节点
  2. 配置apiserver启用审计日志
  3. 创建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

操作流程

  1. 访问http://localhost:8080
  2. 创建"OSS Kubernetes Cluster"类型检查
  3. 上传导出的日志文件
  4. 查看时间线视图

分析要点

在时间线视图中可以观察到:

  • Deployment创建事件
  • 扩缩容操作详情
  • 资源删除记录
  • 操作时间序列关系

最佳实践建议

  1. 生产环境建议:

    • 使用持久化存储保存审计日志
    • 配置日志保留策略
    • 考虑使用Grafana Cloud托管服务
  2. 性能优化:

    • 调整审计策略级别
    • 限制收集的命名空间
    • 配置日志采样率
  3. 安全建议:

    • 保护审计日志访问权限
    • 定期备份关键日志
    • 启用日志完整性检查

总结

通过本文介绍的方法,我们实现了:

  1. 使用kind快速搭建测试集群
  2. 配置详细的审计日志策略
  3. 部署完整的日志收集管道
  4. 使用KHI进行可视化分析

这种方案特别适合以下场景:

  • 开发测试环境的问题复现
  • 生产环境的异常行为分析
  • 集群变更的审计追踪
  • 资源生命周期管理

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

谭勇牧Queen

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值