Как установить флаги, связанные с аудитом, на 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

Другие вопросы по тегам