Не удалось создать изолированную программную среду pod: rp c ошибка: code = Unknown des c = seccomp не включен в вашем ядре, не может работать с профилем - PullRequest
1 голос
/ 06 апреля 2020

У меня проблема с kube & Cri-o. На самом деле я развертываю кластер кубов и просто не хочу развертывать панель управления. Я установил CRIO вместо Docker (RHEL8 в производственной среде). Журнал вывода команды «description pod»:

Events:
  Type     Reason                  Age                 From                   Message
  ----     ------                  ----                ----                   -------
  Normal   Scheduled               11m                 default-scheduler      Successfully assigned kubernetes-dashboard/dashboard-metrics-scraper-6b4884c9d5-fwdv9 to worker-node1
  Warning  FailedCreatePodSandBox  95s (x48 over 11m)  kubelet, worker-node1  Failed to create pod sandbox: rpc error: code = Unknown desc = seccomp is not enabled in your kernel, cannot run with a profile

Я пробовал это: grep SECCOMP /boot/config-$(uname -r)

CONFIG_HAVE_ARCH_SECCOMP_FILTER=y
CONFIG_SECCOMP_FILTER=y
CONFIG_SECCOMP=y

С этими возвратами я думаю, что это включено ...

Во время установки kube я обнаружил в своей системе файл seccomp. json, я пытался установить абсолютный путь в разделе seccomp_profile в конфигурации CRI-O, но не смог. .. Это не было решением ...

У кого-нибудь есть идея ...?

С уважением,

1 Ответ

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

Развертывание Kubernetes Dashboard yaml для seccomp по умолчанию установлено значение seccomp.security.alpha.kubernetes.io/pod: 'runtime/default'

Это означает, что он использует профиль времени выполнения контейнера по умолчанию, который мы можем прочитать здесь

Использование профилей seccomp в модулях можно контролировать с помощью аннотаций на PodSecurityPolicy. Seccomp - это альфа-функция в Kubernetes.

seccomp.security.alpha.kubernetes.io / defaultProfileName - Аннотация, указывающая профиль seccomp по умолчанию, применяемый к контейнерам. Возможные значения:

  • unconfined - Seccomp не применяется к процессам контейнера (это значение по умолчанию в Kubernetes), если нет альтернативы.
  • runtime/default - Используется профиль среды выполнения контейнера по умолчанию.
  • docker/default - используется профиль seccomp Docker по умолчанию. Устаревший по состоянию на Куберне 1.11. Вместо этого используйте runtime/default.
  • localhost/<path> - укажите профиль в виде файла на узле, расположенном в <seccomp_root>/<path>, где <seccomp_root> определяется с помощью флага --seccomp-profile-root на Kubelet.

Существует проблема с github для Неожиданное поведение с пустым профилем seccomp . В обсуждении @ saschagrunert упоминает:

... Обычно я не смог найти обобщенного описания:

  • Если профиль указывается для модуля, он также применяется ко всем контейнерам
    (поддерживается только seccomp прямо сейчас)
  • Если для контейнера указан профиль, он перезаписывает профиль модуля
  • Мы всегда по умолчанию runtime/default

Я действительно хотел бы применить это с точки зрения безопасности и правильно задокументировать его в специальном разделе безопасности внутри этого репозитория. WDYT?

Кстати, нам, вероятно, нужно pu sh для GA-градации seccomp и AppArmor, чтобы получить API первого класса внутри securityContext, как у нас для SE Linux. См .: https://kubernetes.io/docs/tutorials/clusters/apparmor/#upgrade -path-to-общедоступность

Как уже упоминалось @ CptBuko , он справился с обходным путем, установив seccomp.security.alpha.kubernetes.io/pod: unconfined, который не применяет seccomp к процессам контейнера.

...