#security #kubernetes
#Безопасность #kubernetes
Вопрос:
Я тестирую с SecurityContext, но я не могу запустить модуль, когда я установил runAsNonRoot в значение true. Я использую vagrant для развертывания master и двух minions и подключения ssh к хост-машине под именем пользователя abdelghani :
id $USER
uid=1001(abdelghani) gid=1001(abdelghani) groups=1001(abdelghani),27(sudo)
Информация о кластере:
Версия Kubernetes: 4.4.0-185-используется универсальное облако: (если не в общедоступном облаке, установите «голый металл») Способ установки: вручную Операционная система хоста: ubuntu16.04.6 CNI и версия: CRI и версия:
apiVersion: v1
kind: Pod
metadata:
name: buggypod
spec:
containers:
- name: container
image: nginx
securityContext:
runAsNonRoot: true
Я делаю :
kubectl apply -f pod.yml
там написано, что модуль mybugypod создан, но когда я проверяю с :
kubectl получает модули
модуль имеет статус CreateContainerConfigError
что я делаю не так?
Комментарии:
1. Не могли бы вы, пожалуйста, запустить «kubectl describe pod <Название модуля>» и поделиться этим результатом с нами? Неясно, почему это не удается прямо сейчас. Не забудьте обернуть выходные данные в некоторый формат, чтобы мы могли их прочитать.
2. Как указал @Rohit, это связано с тем, что образ nginx должен запускаться от имени root. Я пробовал с busybox, он работает при условии, что пользователь существует в изображении (например, пользователь 65534)
Ответ №1:
Я пытаюсь запустить модуль на основе ваших требований. И причина сбоя в том, что Nginx требует изменить некоторую конфигурацию в /etc /, принадлежащем root, и когда вы запускаете Nonroot, происходит сбой, поскольку он не может редактировать конфигурацию Nginx по умолчанию.
Это ошибка, которую вы на самом деле получаете при ее запуске.
10-listen-on-ipv6-by-default.sh: error: can not modify /etc/nginx/conf.d/default.conf (read-only file system?)
/docker-entrypoint.sh: Launching /docker-entrypoint.d/20-envsubst-on-templates.sh
/docker-entrypoint.sh: Configuration complete; ready for start up
2020/08/13 17:28:55 [warn] 1#1: the "user" directive makes sense only if the master process runs with super-user privileges, ignored in /etc/nginx/nginx.conf:2
nginx: [warn] the "user" directive makes sense only if the master process runs with super-user privileges, ignored in /etc/nginx/nginx.conf:2
2020/08/13 17:28:55 [emerg] 1#1: mkdir() "/var/cache/nginx/client_temp" failed (13: Permission denied)
nginx: [emerg] mkdir() "/var/cache/nginx/client_temp" failed (13: Permission denied)
Спецификация, которую я запустил.
apiVersion: v1
kind: Pod
metadata:
creationTimestamp: null
labels:
run: buggypod
name: buggypod
spec:
securityContext:
runAsNonRoot: true
runAsUser: 1000
containers:
- image: nginx
name: buggypod
resources: {}
dnsPolicy: ClusterFirst
restartPolicy: Always
status: {}
Я предлагаю вам создать пользовательский образ Nginx с файлом Dockerfile, который также создает пользователя и предоставляет разрешения для папок /var/ cache /nginx, /etc/nginx / conf.d, /var/ log / nginx для вновь созданного пользователя. Таким образом, вы добиваетесь запуска контейнера как некорневого.
Ответ №2:
Служба Nginx будет ожидать разрешения на чтение и запись для своего пути конфигурации (/etc / nginx), по умолчанию пользователь, не являющийся пользователем root, будет иметь доступ к пути, который является причиной сбоя. Вы только что установили runAsNonRoot, но вы не можете ожидать или гарантировать, что контейнер запустит службу от имени пользователя 1001. Пожалуйста, попробуйте явно установить для RunAsUser значение 1001, как показано ниже, это должно решить вашу проблему.
apiVersion: v1
kind: Pod
metadata:
name: buggypod
spec:
containers:
- name: container
image: nginx
securityContext:
runAsUser: 1001
Комментарии:
1. Спасибо @Kiruba. На самом деле, пользователь должен существовать в образе, а не в хосте. И в случае nginx для этого пользователя требуются привилегии root