在本文中,我们将了解如何配置Filebeat作为DaemonSet在我们的Kubernetes集群中运行,以便将日志运送到Elasticsearch后端。我们使用Filebeat而不是FluentD或FluentBit,因为它是一个非常轻量级的实用程序,并且对Kubernetes有一流的支持,因此这是十分适合生产的配置。
部署架构
Filebeat将在我们的Kubernetes集群中作为DaemonSet运行。它将会:
- 部署在一个名为logging的单独的命名空间内
- Pod将会在Master节点和Worker节点被调度
- master节点pods将转发api-server日志,用于审计和集群管理。
- 客户端节点Pods将转发工作负载相关的日志,用于应用程序可观察性
创建Filebeat 服务账户和ClusterRole
部署以下manifest以创建Filebeat pod所需的权限:
apiVersion: v1
kind: Namespace
metadata:
name: logging
---
apiVersion: v1
kind: ServiceAccount
metadata:
name: filebeat
namespace: logging
labels:
k8s-app: filebeat
---
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRole
metadata:
name: filebeat
namespace: logging
labels:
k8s-app: filebeat
rules:
- apiGroups: [""] # "" indicates the core API group
resources:
- namespaces
- pods
verbs:
- get
- watch
- list
---
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRoleBinding
metadata:
name: filebeat
namespace: logging
subjects:
- kind: ServiceAccount
name: filebeat
namespace: kube-system
roleRef:
kind: ClusterRole
name: filebeat
apiGroup: rbac.authorization.k8s.io
我们应该从安全的角度出发,确保ClusterRole的权限尽可能地受到限制。如果与该服务账户相关联的任何一个pod被泄露,那么攻击者将无法获得对整个集群或其中运行的应用程序的访问权限。
创建Filebeat ConfigMap
使用以下manifest来创建一个ConfigMap,它将由Filebeat pod使用:
Comments