Как настроить политику аудита в kube-apiserver?

Я читал о том, как настроить аудит в kubernetes здесь, который в основном говорит, что для включения аудита я должен указать файл политики yaml для kube-apiserver при его запуске, используя флаг --audit-policy-file.

Я не понимаю двух вещей о том, как этого добиться:

  1. Как правильно добавить / обновить параметр запуска команды, запускающей kube-apiserver? Я не могу обновить модуль, так что мне нужно как-то клонировать модуль? Или мне следует использовать kops edit cluster, как предлагается здесь: https://github.com/kubernetes/kops/blob/master/docs/cluster_spec.md#kubeapiserver. Удивительно, но kubernetes не создает развертывание для этого, стоит ли создавать его самому?
  2. В частности, для настройки аудита я должен передать файл yaml в качестве аргумента запуска. Как мне загрузить / сделать доступным этот yaml-файл, чтобы сделать --audit-policy-file=/some/path/my-audit-file.yaml. Могу ли я создать с ним configMap и / или том? Как я могу впоследствии ссылаться на этот файл, чтобы он был доступен в файловой системе при запуске команды kube-apiserver?

Спасибо!


person jotadepicas    schedule 06.04.2018    source источник


Ответы (1)


Как правильно добавить / обновить параметр запуска команды, запускающей kube-apiserver?

В 99% случаев, когда я наблюдал развертывание кластеров кубернетов, двоичный файл kubelet на узлах считывает дескрипторы кубернетов в /etc/kubernetes/manifests файловой системы хоста и запускает описанные в нем модули. Итак, ответ на первый вопрос состоит в том, чтобы отредактировать - или вызвать обновление используемого вами инструмента управления конфигурацией - файла /etc/kubernetes/manifests/kube-apiserver.yaml (или, надеюсь, файла с очень похожим именем). Если у вас несколько главных узлов, вам нужно будет повторить этот процесс для всех главных узлов. В большинстве случаев двоичный файл kubelet увидит изменение файла манифеста и автоматически перезапустит Pod apiserver, но в худшем случае может потребоваться перезапуск kubelet.

Обязательно следите за выводом только что запущенного контейнера докеров apiserver, чтобы проверить наличие ошибок, и примените это изменение к другим файлам манифеста apiserver только после того, как убедитесь, что он работает правильно.

Как я могу впоследствии ссылаться на этот файл, чтобы он был доступен в файловой системе при запуске команды kube-apiserver?

Примерно тот же ответ: либо через ssh, либо через любой инструмент управления конфигурацией на машине. Единственная звездочка для этого состоит в том, что, поскольку файл манифеста apisever является обычным объявлением Pod, нужно помнить о volume: и volumeMount:, как и о любом другом Pod в кластере. Скорее всего, это будет нормально, если ваш audit-policy.yaml находится внутри или под /etc/kubernetes, поскольку этот каталог уже является томом, смонтированным в Pod (опять же: большую часть времени). Он записывает файл журнала аудита, который, скорее всего, потребует изменений, поскольку, в отличие от остальной части конфигурации, путь к файлу журнала не может быть readOnly: true и, таким образом, потребуется как минимум второй volumeMount без readOnly: true, и, вероятно, потребуется второй volume: hostPath:, чтобы сделать каталог журналов, видимый в модуле.

На самом деле я не пробовал использовать ConfigMap для самого apiserver, поскольку это очень мета. Но в случае установки с несколькими мастерами я тоже не знаю, что это невозможно. Просто будьте осторожны, потому что при такой самореферентной настройке было бы очень легко отключить всех мастеров с плохой конфигурацией, поскольку они не могли бы связаться с собой, чтобы прочитать обновленную конфигурацию.

person mdaniel    schedule 08.04.2018
comment
99% of the ways - каков сценарий настройки остальных? - person Praveen Sripati; 11.10.2018
comment
Современная версия kubernetes имеет конфигурацию kubelet в качестве управляемого ресурса, как и Pods, но в то время я имел в виду не это. Некоторые заблуждающиеся люди пытаются запихнуть это в дескрипторы systemd, сценарии init.d или что-то еще хуже. Существует почти неограниченное количество способов запустить kubelet с выбранными вами флагами, включая (даже больше ошибочных действий!) Попытку запустить kubelet под rkt - person mdaniel; 12.10.2018