Как установить флаги, связанные с аудитом, на kubeapi-сервере при использовании kubeadm?
Я пытаюсь включить "одитинг". https://kubernetes.io/docs/tasks/debug-application-cluster/audit/ упоминает:
Вы можете передать файл с политикой в kube-apiserver, используя флаг --audit-policy-file. Если флаг опущен, события не регистрируются.
Я использовал kubeadm для настройки кластера (всего 3 виртуальных машины).
Однако где этот набор при использовании kubeadm? Я не вижу, где он взаимодействует с kube-apiserver.
2 ответа
apiVersion: kubeadm.k8s.io/v1alpha2
api:
advertiseAddress: 192.168.0.33
bindPort: 6443
networking:
podSubnet: "10.244.0.0/16"
featureGates:
Auditing: true
auditPolicy:
logDir: "/var/log/kubernetes/"
logMaxAge: 20
path: "/etc/kubernetes/audit.yaml"
А также
cat /etc/kubernetes/audit.yaml
:
# Log all requests at the Metadata level.
apiVersion: audit.k8s.io/v1beta1
kind: Policy
rules:
- level: Metadata
Нашел ответ, спрятанный здесь: https://evalle.xyz/posts/how-to-enable-kubernetes-auditing-with-kubeadm/ счастью, это решает ужасную ужасную документацию, которую предоставляет Kubernetes.
Для последней версии Kubernetes добавьте это в kind: ClusterConfiguration
раздел:
apiServer:
extraArgs:
audit-log-path: /tmp/k8s-audit.log
audit-policy-file: /etc/kubernetes/audit.yaml
audit-log-maxage: "1"
audit-log-maxsize: "100"
audit-log-maxbackup: "1"
extraVolumes:
- name: audit
hostPath: /host/audit.yaml
mountPath: /etc/kubernetes/audit.yaml
readOnly: true
pathType: File
пример /host/audit.yaml
файл, в котором регистрируются все тела запросов и ответов:
apiVersion: audit.k8s.io/v1
kind: Policy
omitStages:
- "ResponseStarted"
rules:
- level: RequestResponse
Kubelet и kube-apiserver - это совершенно разные компоненты стека Kubernetes.
Apiserver является частью Kubernetes Controlplane. Сам Kubelet фактически соединяется с сервером API. Что вас смущает, так это тот факт, что API-сервер обычно работает как докер-контейнер, а этот докер-контейнер может управляться кублетом.
Kubelet может запускать контейнеры двумя способами:
- Решено плоскостью управления (запрос отправлен планировщиком)
- Как статический манифест в виде yaml или JSON в каталоге (по умолчанию
/etc/kubernetes/manifests
Если вы используете kubeadm, загляните в этот каталог. Вы увидите файл yaml с манифестом для сервера API. Вы можете добавить свой флаг apiserver в этот манифест, и он перезапустит сервер API с новым флагом.
Однако, как указано в комментариях, вы используете kubeadm
, Есть правильный способ сделать это, который будет сохраняться после обновлений. Если вы посмотрите на страницу документации для kubeadm init
вы увидите, что есть опция "Использование kubeadm init с файлом конфигурации"
Таким образом, вы бы написать файл конфигурации yaml для kubeadm
который выглядел бы так config.yaml
:
apiVersion: kubeadm.k8s.io/v1alpha2
auditPolicy:
logDir: /var/log/kubernetes/audit
logMaxAge: 2
path: ""
Тогда беги kubeadm init --config config.yaml