一、背景引入
在使用 Kubernetes 集群的时候,咱们经常会遇到各种操作,像创建、修改或者删除资源这些。那要是出了问题,或者需要满足安全合规性要求,怎么去追踪这些操作行为呢?这就轮到 Kubernetes API Server 审计日志登场啦。它就像是一个忠实的记录员,能把集群里的操作都记下来,方便咱们后续查看和分析。
二、配置审计日志
1. 配置文件准备
首先得有个审计配置文件,咱们就以 YAML 格式为例吧。这个文件能规定审计日志的级别、存储方式啥的。
# 技术栈:YAML
apiVersion: audit.k8s.io/v1 # 审计 API 版本
kind: Policy # 审计策略类型
rules:
- level: Metadata # 审计级别,Metadata 会记录请求的元数据
resources:
- group: "" # 核心 API 组
resources: ["pods", "services"] # 要审计的资源类型
上面这个配置文件的意思呢,就是说要对 Pod 和 Service 这些资源的操作进行审计,而且审计级别是记录元数据。
2. 启动 API Server 时加载配置
在启动 API Server 的时候,得把刚才准备好的审计配置文件加载进去。比如在启动命令里加上相关参数:
# 技术栈:Shell
kube-apiserver \
--audit-policy-file=/path/to/audit-policy.yaml \
--audit-log-path=/var/log/kubernetes/audit.log \
--audit-log-maxsize=100 \
--audit-log-maxbackup=10
这里解释一下哈,--audit-policy-file 指定了审计策略文件的路径;--audit-log-path 是审计日志存储的路径;--audit-log-maxsize 规定了单个日志文件的最大大小(单位是 MB);--audit-log-maxbackup 表示最多保留多少个备份日志文件。
三、审计日志分析
1. 日志格式
Kubernetes 审计日志是 JSON 格式的,咱们来看个简单的示例:
# 技术栈:JSON
{
"kind": "Event",
"apiVersion": "audit.k8s.io/v1",
"level": "Metadata",
"auditID": "12345678-9abc-def0-1234-56789abcdef0",
"stage": "ResponseComplete",
"requestURI": "/api/v1/namespaces/default/pods",
"verb": "get",
"user": {
"username": "admin",
"uid": "admin-uid",
"groups": ["system:masters"]
},
"sourceIPs": ["192.168.1.100"],
"userAgent": "kubectl/v1.22.0 (linux/amd64) kubernetes/1234567",
"objectRef": {
"resource": "pods",
"namespace": "default",
"name": "my-pod"
},
"responseStatus": {
"code": 200,
"message": ""
}
}
从这个日志里,咱们能看到很多有用的信息。比如是谁(user 字段)在什么时候(虽然这里没体现,但日志里会有时间戳)对哪个资源(objectRef 字段)进行了什么操作(verb 字段),操作结果咋样(responseStatus 字段)。
2. 分析工具
咱们可以用一些工具来分析这些日志,像 Elasticsearch 和 Kibana 组合就挺好用的。先把审计日志收集到 Elasticsearch 里,然后用 Kibana 来可视化展示和查询。
收集日志到 Elasticsearch
可以用 Filebeat 来收集日志并发送到 Elasticsearch。配置 Filebeat 的时候,得指定日志文件路径和 Elasticsearch 的地址。
# 技术栈:YAML
filebeat.inputs:
- type: log
paths:
- /var/log/kubernetes/audit.log
output.elasticsearch:
hosts: ["localhost:9200"]
使用 Kibana 分析
在 Kibana 里创建索引模式,然后就可以用各种查询语句来分析日志啦。比如,要查某个用户的所有操作:
# 技术栈:JSON
{
"query": {
"term": {
"user.username": "admin"
}
}
}
四、应用场景
1. 安全审计
在企业里,安全是头等大事。通过审计日志,咱们能发现一些异常操作,比如未经授权的资源访问。假如有个用户突然尝试删除重要的服务,审计日志就能记录下来,让咱们及时发现并处理。
2. 合规性检查
很多行业都有安全合规性要求,像金融、医疗这些。Kubernetes 审计日志能帮助咱们满足这些要求,提供操作记录作为合规性证明。比如,监管机构要求记录所有资源的创建和修改操作,审计日志就能派上用场。
3. 故障排查
当集群出现问题时,审计日志可以帮助咱们找出问题的根源。比如某个 Pod 突然崩溃了,通过查看审计日志,看看之前对这个 Pod 做了哪些操作,是不是修改了配置之类的。
五、技术优缺点
1. 优点
全面记录
审计日志能详细记录集群里的各种操作,包括请求的元数据、操作结果等,让咱们对集群的运行情况了如指掌。
可定制性强
通过配置审计策略文件,咱们可以灵活地指定要审计的资源和审计级别,满足不同的需求。
便于分析
审计日志是 JSON 格式的,方便用各种工具进行分析和处理,像 Elasticsearch 和 Kibana 就能很好地和它配合。
2. 缺点
性能开销
开启审计日志会增加 API Server 的性能开销,尤其是在高并发的情况下。因为要记录大量的操作信息,会占用一定的 CPU 和内存资源。
存储压力
审计日志会不断产生,如果不及时清理和管理,会占用大量的磁盘空间。
六、注意事项
1. 日志存储管理
要定期清理审计日志,避免磁盘空间被占满。可以根据业务需求,设置合适的日志保留时间和备份策略。
2. 性能优化
如果发现开启审计日志后性能下降明显,可以调整审计级别或者减少要审计的资源范围。
3. 安全保护
审计日志里包含了很多敏感信息,要确保日志文件的安全,设置合适的访问权限,防止日志被篡改或者泄露。
七、文章总结
Kubernetes API Server 审计日志对于追踪集群操作行为和满足安全合规性要求非常重要。通过合理配置审计日志,咱们可以全面记录集群里的操作,并且利用各种工具对日志进行分析。在实际应用中,要注意性能开销和存储管理等问题,充分发挥审计日志的作用,保障集群的安全稳定运行。
评论