Жили мы жили. И вроде не плохо. Но на тесте решили поставить Kubernetes при помощи kubespray v2.11.
Накатили в новый кластер fluent-bit, с отлаженным ранее деплоем. И… обломс.
Ругается при деплое DaemonSet на:
securityContext: privileged: true volumeMounts: - name: varlog mountPath: /var/log - name: varlibdockercontainers mountPath: /var/lib/docker/containers readOnly: true
В итоге оказалось, что в новом облачке включена PodSecurityPolicy. И поскольку наш DaemonSet не использует (подключен) к существующим политикам случился облом.
Решение проблемы – Добавить PodSecurityPolicy и применить её к DaemonSet.
Определяем новую политику:
--- apiVersion: extensions/v1beta1 kind: PodSecurityPolicy metadata: name: psp.td-agent spec: allowPrivilegeEscalation: true allowedCapabilities: - '*' allowedUnsafeSysctls: - '*' fsGroup: rule: RunAsAny hostIPC: true hostNetwork: true hostPID: true hostPorts: - max: 65535 min: 0 privileged: true runAsUser: rule: RunAsAny seLinux: rule: RunAsAny supplementalGroups: rule: RunAsAny volumes: - 'hostPath' - 'configMap' - 'emptyDir' - 'secret'
Стандартно создаем ServiceAccount:
--- apiVersion: v1 kind: ServiceAccount metadata: name: fluent-bit namespace: logging
Определяем ClusterRole и в ней определяем используемый PodSecurityPolicy (выделено болдом):
--- apiVersion: rbac.authorization.k8s.io/v1beta1 kind: ClusterRole metadata: name: psp:fluent-bit-read rules: - apiGroups: - '*' # - policy resources: # - podsecuritypolicies - '*' resourceNames: - psp.td-agent verbs: # - use - '*'
Я еще не до конца разобрался какие apiGroups, rules и resources необходимо использовать. Поэтому написал все (что разумеется не правильно). Если вы имеете, что сказать по этому поводу, скажите это в комментах.
И в конце ClusterRoleBinding:
--- apiVersion: rbac.authorization.k8s.io/v1beta1 kind: ClusterRoleBinding metadata: name: psp:fluent-bit-read roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: psp:fluent-bit-read subjects: - kind: ServiceAccount name: fluent-bit namespace: logging
И естественно все собираем вместе:
--- apiVersion: rbac.authorization.k8s.io/v1beta1 kind: ClusterRoleBinding metadata: name: psp:fluent-bit-read roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: psp:fluent-bit-read subjects: - kind: ServiceAccount name: fluent-bit namespace: logging
В DaemonSet указываем созданный нами serviceAccountName:
serviceAccountName: fluent-bit