背景
通过日志服务采集Kubernetes容器日志已经被许多用户广泛应用,用户可在创建集群时启用日志服务,快速采集Kubernetes集群的容器日志,包括容器的标准输出以及容器内的文本文件等。
- Kubernetes审计日志的使用前提请参见通过日志服务采集Kubernetes容器日志。
- Kubernetes事件中心的使用前提请参见创建并使用K8s事件中心。
- Ingress访问日志的使用前提请参见Nginx Ingress访问日志分析与监控。
限制
但是对于一个用户在多个地域下拥有多个ack集群的场景,如果用户希望将每个地域下多个ACK集群的k8s日志进行集中审计、中心化查询,就需要用户进行一定的额外操作。
原始模式
例如用户可以通过手动创建数据加工作业的方式,将每个logstore下的日志的投递到相同的目标库中,但是这种操作方式具有以下限制:
限制1: 操作繁琐,对于每个地域的每个ACK集群下每一种日志类型,例如事件日志、审计日志、Ingress日志都需要专门的建立对应作业;
限制2: 无法实现自动化更新,当有新的ACK集群创建还需要重复以上操作,无法做到实时、自动化
日志审计(升级前)
针对以上问题,日志审计很早就推出了K8s日志集中审计的功能,即日志审计会自动地对符合自动化条件的K8s事件日志、审计日志和Ingress日志进行集中审计、中心化查询。
但是,使用日志审计(升级前)(即使中心账号已经升级服务关联角色AliyunServiceRoleForSLSAudit)进行K8s日志集中审计仍需要比较复杂的单独鉴权操作,需要经过以下三步操作,日志审计下k8s日志集中审计、中心化查询才能正确使用。
操作1: 用户首先需要对中心账号创建一个sls-audit-service-monitor的角色;
操作2: 并且对sls-audit-service-monitor角色授权AliyunLogAuditServiceMonitorAccess策略外
操作3: 此外,用户还需要对该角色额外授权对ACK下k8s project的操作权限(参考如下)
{
"Version": "1",
"Statement": [
{
"Action": "log:*",
"Resource": [
"acs:log:*:*:project/k8s-log-*"
],
"Effect": "Allow"
}
]
}
日志审计(升级前)虽然解决了限制1和限制2的问题,但是由于其单独自定义鉴权操作的复杂性,也给用户带来了一些不便,用户无法做到真正的开箱即用,集中审计,中心化查询,且自定义角色容易被用户误删、篡改,将会影响用户的使用体验。
真正开箱即用
日志审计升级后
随着日志审计中心账号鉴权从用户需要自定义角色sls-audit-service-monitor到用户一键式授权服务关联角色AliyunServiceRoleForSLSAudit的升级,日志审计下K8s日志采集单独鉴权升级也提上日程。
日志审计通过和SLS数据加工 深度合作后,现已支持通过服务关联角色AliyunServiceRoleForSLSAudit 进行自动化创建数据加工作业,自动运行数据加工Job,基于该角色进行日志消费和写入,从而做到了真正的开箱即用式多集群下k8s日志集中审计、中心化查询和存储,此时用户仅需中心账号首次点击授权授权服务关联角色AliyunServiceRoleForSLSAudit即可使用。
K8s日志集中审计 |
原始模式 |
日志审计开启K8s(升级前) |
日志审计开启K8s(升级后) |
手动创建相关作业 |
必须 |
无需 |
无需 |
实时自动化更新 |
不能 |
可以 |
可以 |
复杂自定义鉴权 |
无需 |
必须 |
无需 |
示例
通过在日志审计开启多ACK集群下k8s日志集中审计操作示例如下,具体事项可以参见云产品资源覆盖:
多集群k8s日志集中化审计示例
多地域下k8s日志中心化查询示例