.. _kubernetes-operator-command-logging-663fce5d74e7:
===================================
Kubernetes Operator Command Logging
===================================
The Kubernetes auditing provides a set of records that document the sequence of
actions in a cluster. For more details, see
`https://kubernetes.io/docs/tasks/debug/debug-cluster/audit/
`__.
You can configure which events should be logged through a set of rules written
in a YAML file, see
`https://kubernetes.io/docs/tasks/debug/debug-cluster/audit/#audit-policy
`__.
A default policy file is provided in |prod| at
``/etc/kubernetes/default-audit-policy.yaml``. This default policy file is a
version of the audit profile for Google Container-Optimized OS.
Kubernetes API Logging can be enabled and configured in |prod|, and can be
fully configured and enabled at bootstrap time. Post-bootstrap, Kubernetes API
Logging can only be enabled or disabled.
The default policy file provided, present at
``/etc/kubernetes/default-audit-policy.yaml``, is a version of the audit
profile for Google Container-Optimized OS extracted from
`https://github.com/kubernetes/kubernetes/blob/75e49ec824b183288e1dbaccfd7dbe77d89db381/cluster/gce/gci/configure-helper.sh#L1129
`__.
Different log levels are used for different Kubernetes components.
The reference for the ``kube-apiserver`` parameters associated with Kubernetes
API Logging can be found at
`https://kubernetes.io/docs/reference/command-line-tools-reference/kube-apiserver/
`__.
``audit-policy-file``
This parameter contains the full path of the audit policy configuration
file to be used (e.g. ``/etc/kubernetes/default-audit-policy.yaml``).
When this parameter is present, the feature is enabled. In |prod|
|prod-ver|, by default, this parameter is absent and the feature is
disabled.
``audit-log-path``
This parameter points to the log file where the logs will be written. In
|prod| |prod-ver|, by default, this parameter is present with the value
``/var/log/kubernetes/audit/audit.log``. It is recommended to use the
default value.
``audit-log-maxsize``
This parameter indicates the maximum size in megabytes of the audit log
file before it gets rotated. In |prod| |prod-ver|, by default, this
parameter is present with the value "100", that means 100MB.
``audit-log-maxage``
This parameter indicates the maximum number of days to retain old audit log
files. In |prod| |prod-ver|, by default, this parameter is present with the
value "3", that means 3 days.
``audit-log-maxbackup``
This parameter indicates the maximum number of old audit log files to
retain. In |prod| |prod-ver|, by default, this parameter is present with
the value "10", that means that 10 old files are kept.
-------------------------------------------
Bootstrap configuration of audit parameters
-------------------------------------------
At bootstrap, all five parameters are configurable. When the value of these
parameters are not overridden, the deployed environment will have the feature
disabled, as the parameter ``audit-policy-file`` will be absent, and the other
parameters will be present with the default values.
You can see below a YAML example that configures, at bootstrap in
``/home/sysadmin/localhost.yml``, all parameters and defines the contents of a
custom policy file to be used with the ``apiserver_extra_volumes: {name:
my-audit-policy-file ...}`` parameter. By configuring the parameter
``audit-policy-file`` the feature will be enabled.
.. code-block:: none
apiserver_extra_args:
audit-log-maxage: '2'
audit-log-maxbackup: '3'
audit-log-maxsize: '40'
audit-log-path: '/var/log/kubernetes/audit/audit.log'
audit-policy-file: '/etc/kubernetes/my-audit-policy-file.yaml'
apiserver_extra_volumes:
- name: my-audit-policy-file
mountPath: '/etc/kubernetes/my-audit-policy-file.yaml'
hostPath: '/etc/kubernetes/my-audit-policy-file.yaml'
pathType: File
readOnly: true
content: |
# Log all requests at the Metadata level.
apiVersion: audit.k8s.io/v1
kind: Policy
rules:
- level: Metadata
-----------------------------------------
Runtime Configuration of audit parameters
-----------------------------------------
After deploy, only the parameter ``audit-policy-file`` is configurable as a
system service parameter, allowing the user to enable/disable the feature.
You can find below an example of how to add this parameter. The feature is
disabled when the parameter is removed (i.e. ``system service-parameter-delete``).
.. code-block:: none
~(keystone_admin)$ system service-parameter-add kubernetes kube_apiserver audit-policy-file=/etc/kubernetes/default-audit-policy.yaml
~(keystone_admin)$ system service-parameter-apply kubernetes
-----------
Limitations
-----------
In |prod| |prod-ver|, a custom policy file can only be created at bootstrap
time in ``apiserver_extra_volumes`` section. If a custom policy file was
configured at bootstrap, then after bootstrap the user has the option to
configure the parameter ``audit-policy-file`` to either this custom policy file
(``/etc/kubernetes/my-audit-policy-file.yaml`` in the example above) or the
default policy file ``/etc/kubernetes/default-audit-policy.yaml``. If no custom
policy file was configured at bootstrap, then the user can only configure the
parameter ``audit-policy-file`` to the default policy file.
Only the parameter ``audit-policy-file`` is configurable after bootstrap, so
the others (``audit-log-path``, ``audit-log-maxsize``, ``audit-log-maxage`` and
``audit-log-maxbackup``) cannot be changed at runtime.