В разрешении отказано для работы Канико в кластере 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