Белые списки для контейнеров в Кубернетес Вид - PullRequest
1 голос
/ 16 марта 2020

Я пытаюсь развернуть контейнер в кластере Kubernetes Kind. Контейнеру, который я пытаюсь развернуть, нужно установить пару флагов sysctls.

Развертывание завершается неудачно с

forbidden sysctl: "kernel.msgmnb" not whitelisted

UPDATE

С тех пор я добавил кластер Согласно предложенной политике, создал роль, которая предоставляет ей использование, и назначил роль кластера учетной записи службы по умолчанию:

---
apiVersion: policy/v1beta1
kind: PodSecurityPolicy
metadata:
  name: sysctl-psp
spec:
  privileged: false  # Don't allow privileged pods!
  # The rest fills in some required fields.
  seLinux:
    rule: RunAsAny
  supplementalGroups:
    rule: RunAsAny
  runAsUser:
    rule: RunAsAny
  fsGroup:
    rule: RunAsAny
  volumes:
  - '*'
  allowedUnsafeSysctls:
  - kernel.msg*
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: role_allow_sysctl
rules:
- apiGroups: ['policy']
  resources: ['podsecuritypolicies']
  verbs:     ['*']
  resourceNames:
  - sysctl-psp
- apiGroups: ['']
  resources:
  - replicasets
  - services
  - pods
  verbs: ['*']
- apiGroups: ['apps']
  resources:
  - deployments
  verbs: ['*']

Привязка роли кластера выглядит следующим образом:

kubectl -n <namespace> create rolebinding default:role_allow_sysctl --clusterrole=role_allow_sysctl --serviceaccount=<namespace>:default

I Затем я пытаюсь создать развертывание и службу в одном и том же пространстве имен:

---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: test-app
  labels:
    app: test-app
spec:
  selector:
    matchLabels:
      app: test-app
      tier: dev
  strategy:
    type: Recreate
  template:
    metadata:
      labels:
        app: test-app
        tier: dev
    spec:
      securityContext:
        sysctls:
        - name: kernel.msgmnb
          value: "6553600"
        - name: kernel.msgmax
          value: "1048800"
        - name: kernel.msgmni
          value: "32768"
        - name: kernel.sem
          value: "128 32768 128 4096"
      containers:
      - image: registry:5000/<container>:1.0.0
        name: test-app
        imagePullPolicy: IfNotPresent
        ports:
        - containerPort: 10666
          name:port-1
---

Проблема остается той же, однако я получаю несколько модулей, все с одним и тем же сообщением forbidden sysctl: "kernel.msgmnb" not whitelisted

Ответы [ 2 ]

1 голос
/ 12 апреля 2020

Не думаю, что флаг --alowed-unsafe-sysctls может работать с узлами Kind, поскольку сами узлы Kind являются контейнерами, чья sysctl FS доступна только для чтения.

Мой обходной путь - изменить необходимые значения sysctl в мой хост-компьютер. Добрые узлы (и, в свою очередь, их контейнеры) будут повторно использовать эти значения.

1 голос
/ 17 марта 2020

Что нужно сделать в вашем случае использования: Настройка Sysctls для Pod :

Используйте pod securityContext для настройки sysctls в пространстве имен. SecurityContext применяется ко всем контейнерам в одном модуле.

В документации выше вы найдете необходимые подробности и пример того, как настроить securityContext модуля.

Также помните, что :

Предупреждение: если вы заносите небезопасные sysctl в белый список через поле allowUnsafeSysctls в PodSecurityPolicy, любой модуль, использующий такой sysctl, не запустится, если sysctl также не внесен в белый список через флаг --allowed-unsafe-sysctls kubelet на этом узле.

Пожалуйста, дайте мне знать, если это поможет.

...