В разрешении отказано для работы Канико в кластере openshift

Я пытаюсь выполнить развертывание через моего оператора k8s в кластере openshift 3.11. Когда начинается работа kaniko, появляется следующая ошибка.

Error: error resolving dockerfile path: copying dockerfile: open /kaniko/Dockerfile: 
permission denied

2 ответа

Добавить securityContext: runAsUser: 0 в спецификацию пода, чтобы запустить его как root.

apiVersion: v1
kind: Pod
metadata:
  name: security-context-demo
spec:
  securityContext:
    runAsUser: 0

Kaniko представлен как инструмент для создания образов контейнеров в Kubernetes и Google Container Builder без прав.

мы рады представить kaniko, инструмент с открытым исходным кодом для создания образов контейнеров из Dockerfile даже без привилегированного корневого доступа. С помощью kaniko мы создаем образ из файла Docker и помещаем его в реестр. Поскольку для этого не требуются какие-либо особые привилегии или разрешения, вы можете запускать kaniko в стандартном кластере Kubernetes, Google Kubernetes Engine или в любой среде, которая не может иметь доступ к привилегиям или демону Docker.

Проблема, с которой вы столкнулись, уже упоминалась в разделе GoogleContainerTools / kaniko GitHub issue.

11 января этот выпуск был отмечен как Won't Fix поэтому единственный способ - запустить Kaniko как root, используя securityContext: runAsUser: 0

Это небезопасно, как можно было бы подумать, о чем упоминает Курт Мадел в своем блоге Безопасное создание образов контейнеров в Kubernetes:

работает как root - это вектор атаки, который многие считают неприемлемой дырой в безопасности, но использование политик безопасности Pod уменьшит поверхность атаки контейнера Kaniko, работающего как часть K8s Pod, и обеспечит большую безопасность, чем подходы на основе Docker, которые мы уже отклонили.

Он также объясняет, как использовать Kaniko the Easy Way.

Jenkins X позволяет вам включить Kaniko в качестве способа по умолчанию для создания и отправки образов контейнеров для всех ваших заданий Jenkins X CD и будет автоматически настроен на отправку в реестр контейнеров по умолчанию в облаке, где вы устанавливаете Jenkins X, а кэширование Kaniko выполняется автоматически настраивается для вас - в результате создаются быстрые и безопасные сборки образов контейнера, которые помещаются в реестр контейнеров Jenkins X по умолчанию.

Важно: Jenkins X не поддерживает OOTB для политик безопасности Pod, как это отслеживается этой проблемой GitHub. В моем следующем посте мы рассмотрим использование политик безопасности Pod с Jenkins X, но не только для Kaniko, потому что после включения политики безопасности Pod каждый K8s Role/ClusterRole с ним должна быть связана политика безопасности Pod.

Недостатки для Канико
  • Требуется запустить контейнер Kaniko как ROOT для выполнения большинства сборок контейнеров
  • Не работает со всеми Dockerfiles но продолжает улучшаться
  • Немного сложнее настроить, чем старый добрый docker build
Другие вопросы по тегам