概览
GKE On-Prem 利用 Kubernetes 审核日志记录功能,该功能会按时间顺序记录对 Kubernetes API 服务器进行的调用。审核日志适合用于调查可疑的 API 请求以及收集统计信息。
在 Anthos 1.2 之前,GKE On-Prem 仅将审核日志写入磁盘。Anthos 1.2 引入了一项 Alpha 版功能,支持将审核日志写入 Google Cloud 项目中的 Cloud Audit Logs。与写入磁盘,甚至在本地日志记录系统中捕获日志相比,写入 Cloud Audit Logs 具有多个优势:
- 所有 Anthos 集群的审核日志都可以集中管理。
- 写入 Cloud Audit Logs 的日志条目是不可变的。
- Cloud Audit Logs 条目会保留 400 天。
- Cloud Audit Logs 包含在 Anthos 的价格中。
您可以配置 GKE On-Prem,以将日志写入磁盘或 Cloud Audit Logs。
基于磁盘的审核日志记录
默认情况下,GKE On-Prem 中的审核日志会写入永久性磁盘,这样虚拟机重启和升级就不会导致日志消失。GKE On-Prem 最多可保留 10 GB 的审核日志条目。
Cloud Audit Logs
如果启用了 Cloud Audit Logs,则所有 Kubernetes API 服务器的管理员活动审核日志条目会发送到 Google Cloud(使用您在创建用户集群时指定的项目和位置)。
GKE On-Prem 会将 audit-proxy
pod 部署到管理员集群和用户集群。此 pod 会缓冲日志条目并将其写入 Cloud Audit Logs。
限制
适用于 GKE On-Prem 的 Cloud Audit Logs 是一项 Alpha 版功能。此 Alpha 版存在一些限制:
您只能在创建用户集群期间配置 Cloud Audit Logs。也就是说,您必须创建新的用户集群。
不支持数据访问日志记录。
不支持修改 Kubernetes 审核政策。
这些限制将在未来版本中得到解决。
启用 Anthos GKE API
如需将 Cloud Audit Logs 与 GKE On-Prem 配合使用,您必须启用 Anthos GKE API。
创建用于审核日志记录的服务帐号
您已经创建多个用于 GKE On-Prem 的服务帐号。对于此 Alpha 版功能,您需要创建一个额外的服务帐号,并将其列入许可名单。
创建 Cloud Audit Logs 服务帐号:
gcloud iam service-accounts create audit-logging-service-account
为 Cloud Audit Logs 服务帐号创建 JSON 密钥文件:
gcloud iam service-accounts keys create audit-logging-key.json \ --iam-account [Cloud Audit Logs_SERVICE_ACCOUNT_EMAIL]
其中,[Cloud Audit Logs_SERVICE_ACCOUNT_EMAIL] 是您的 Cloud Audit Logs 服务帐号的电子邮件地址。
将
audit-logging-key.json
保存在管理员工作站上其他服务帐号密钥所在的位置。
将您的服务帐号列入许可名单
如需请求将您的 Cloud Audit Logs 服务帐号列入许可名单,请填写适用于 GKE On-Prem 的 Cloud Audit Logging Alpha 版表单。在创建用户集群来启用 Cloud Audit Logs 之前,必须将您的服务帐号列入许可名单。
创建已启用 Cloud Audit Logs 的用户集群
如果您尚未创建管理员集群,请按照使用静态 IP 地址进行安装或使用 DHCP 进行安装中的说明创建新的管理员集群和用户集群。
如果您已拥有管理员集群,请按照创建其他用户集群中的说明创建新的用户集群。
运行
gkectl create-config
之后,照常填写配置文件,同时还填写usercluster
下新的cloudauditlogging
部分。将
cloudauditlogging.projectid
设置为 Google Cloud 项目的 ID,您要在该项目中查看与用户集群相关的审核日志。将
cloudauditloggijg.clusterlocation
设置为您要在其中存储审核日志的 Google Cloud 地区。建议选择一个靠近您的本地数据中心的地区。将
cloudauditlogging.serviceaccountkeypath
设置为 Cloud Audit Logs 服务帐号的 JSON 密钥文件的路径。
例如:
cloudauditlogging: projectid: "my-project" clusterlocation: "us-west1" serviceaccountkeypath: "/my-key-folder/audit-logging-key.json"
继续照常创建集群。
访问 GKE On-Prem 审核日志
基于磁盘的审核日志记录
查看在管理员集群及其所有关联的用户集群中运行的 Kubernetes API 服务器:
kubectl --kubeconfig [ADMIN_CLUSTER_KUBECONFIG] get pods --all-namespaces -l component=kube-apiserver
其中,[ADMIN_CLUSTER_KUBECONFIG] 是管理员集群的 kubeconfig 文件。
下载 API 服务器的审核日志:
kubectl cp -n [NAMESPACE] [APISERVER_POD_NAME]:/var/log/kube-audit/kube-apiserver-audit.log /tmp/kubeaudit.log
此命令会提取最新的日志文件,该日志文件对于管理员集群最多可以包含 1 GB 的数据,而对于用户集群最多可以包含 850 GB 的数据。
较早的审核记录保存在单独的文件中。如需查看这些文件,请运行以下命令:
kubectl exec -n [NAMESPACE] [APISERVER_POD_NAME] -- ls /var/log/kube-audit -la
每个审核日志的文件名都有一个时间戳,用于指明文件的轮替时间。文件包含该时间和日期之前的审核日志。
Cloud Audit Logs
控制台
在 Google Cloud 控制台中,转到日志记录菜单中的日志页面。
在按标签过滤或搜索文字框中(在上述下拉菜单上方),点击向下箭头以打开下拉菜单。 从菜单中,选择转换为高级过滤条件。
在文本框中填写以下过滤条件:
resource.type="k8s_cluster" logName="projects/[PROJECT_ID]/logs/externalaudit.googleapis.com%2Factivity" protoPayload.serviceName="anthosgke.googleapis.com"
点击提交过滤条件以显示来自 GKE On-Prem 集群(已配置为登录此项目)的所有审核日志。
gcloud
列出项目的管理员活动日志中适用于 k8s_cluster
资源类型的前两个日志条目:
gcloud logging read \ 'logName="projects/[PROJECT_ID]/logs/externalaudit.googleapis.com%2Factivity" \ AND resource.type="k8s_cluster" \ AND protoPayload.serviceName="anthosgke.googleapis.com" ' \ --limit 2 \ --freshness 300d
其中,[PROJECT_ID] 是您的项目 ID。
输出内容会显示两个日志条目。请注意,对于每个日志条目,logName
字段的值为 projects/[PROJECT_ID]/logs/externalaudit.googleapis.com%2Factivity
,并且 protoPayload.serviceName
等于 anthosgke.googleapis.com
。
审核政策
审核日志记录行为由静态配置的 Kubernetes 审核日志记录政策决定。更改此政策目前不受支持,但将在未来版本中提供。