Собирать аудит логи k8s api будем с помощью vector прямо из подов. ConfigMap под это дело:
apiVersion: v1
kind: ConfigMap
metadata:
name: vector-config-audit-logs
namespace: logging
data:
audit-logs.yaml: |
sources:
kube_apiserver_audit:
type: file
include:
- /var/log/kubernetes/audit/kube-apiserver-audit.log
read_from: end
max_line_bytes: 2097152
transforms:
general_fields:
type: remap
inputs: [kube_apiserver_audit]
source: |-
.cluster_name = "${CLUSTER_NAME}"
sinks:
kube_apiserver_audit_sink:
type: kafka
inputs: [general_fields]
bootstrap_servers: "<bootstrap"
topic: "<topic_name>"
encoding:
codec: json
librdkafka_options:
security.protocol: "SASL_SSL"
enable.ssl.certificate.verification: "false"
sasl:
enabled: true
username: ${VECTOR_KAFKA_LOGIN}
password: ${VECTOR_KAFKA_PASSWORD}
mechanism: "PLAIN"
В моем примере синк (отправка) идет в кафку.
В самом helm release вектора нужно подключить cm и добавить толерантности, чтобы запуститься на мастерах.
values:
existingConfigMaps:
- vector-config-audit-logs
tolerations:
- key: "node-role.kubernetes.io/master"
operator: "Exists"
effect: "NoSchedule"
- key: "node-role.kubernetes.io/control-plane"
operator: "Exists"
effect: "NoSchedule"
env:
- name: CLUSTER_NAME
value: <cluster_name>
- name: VECTOR_LOG
value: info
- name: RUST_BACKTRACE
value: "1"
- name: "VECTOR_THREADS"
value: "8"
- name: ALLOCATION_TRACING
value: "false"
- name: VECTOR_REQUIRE_HEALTHY
value: "true"
- name: VECTOR_KAFKA_LOGIN
valueFrom:
secretKeyRef:
name: vector
key: VECTOR_KAFKA_LOGIN
- name: VECTOR_KAFKA_PASSWORD
valueFrom:
secretKeyRef:
name: vector
key: VECTOR_KAFKA_PASSWORD
Этого достаточно. Тут мы также "обогащаем" данные, добавляя в каждый лог поле
.cluster_name. /var/log вектор маунтит по дефолту.#vector