Bug 50043 - podsec-k8s-save-oci собирает недействительный архив с образами
Summary: podsec-k8s-save-oci собирает недействительный архив с образами
Status: RESOLVED NOTABUG
Alias: None
Product: Sisyphus
Classification: Development
Component: podsec-k8s (show other bugs)
Version: unstable
Hardware: x86_64 Linux
: P5 normal
Assignee: kaf@altlinux.org
QA Contact: qa-sisyphus
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2024-04-16 13:08 MSK by Artem Varaksa
Modified: 2024-04-24 11:52 MSK (History)
3 users (show)

See Also:


Attachments
Полный вывод команды podsec-k8s-save-oci (4.55 KB, text/plain)
2024-04-16 13:08 MSK, Artem Varaksa
no flags Details
podsec-1.0.10-alt7: sh -x podsec-k8s-save-oci (54.23 KB, text/plain)
2024-04-23 12:14 MSK, Artem Varaksa
no flags Details

Note You need to log in before you can comment on or make changes to this bug.
Description Artem Varaksa 2024-04-16 13:08:44 MSK
Created attachment 15881 [details]
Полный вывод команды podsec-k8s-save-oci

Шаги
====

1. # podsec-create-policy <ip>
2. # podsec-create-services
3. # podsec-create-imagemakeruser imagemaker
4. # podsec-create-podmanusers poduser
5. # ssh imagemaker@localhost
6. imagemaker$ U7S_SETAVAILABLEIMAGES=yes U7S_PLATFORM=k8s-sisyphus podsec-k8s-save-oci out amd64 k8s-sisyphus

Фактический результат
=====================

Команда завершается успешно, но очень быстро, и выводит ошибки (полный вывод во вложении):

> imagemaker$ U7S_SETAVAILABLEIMAGES=yes U7S_PLATFORM=k8s-sisyphus podsec-k8s-save-oci out amd64 k8s-sisyphus
> ...
> Загрузка образа registry.altlinux.org/k8s-sisyphus/cert-manager-controller:v1.11.0
> FATA[0000] Invalid destination name containers-storage:[/home/imagemaker/.local/share/usernetes/images/k8s-sisyphus/amd64]registry.altlinux.org/k8s-sisyphus/cert-manager-controller:v1.11.0: mkdir /run/containers/storage: permission denied
> ...
> chown: неверная группа: «imagemaker:imagemaker»
> ...

Использование созданного архива невозможно:

> imagemaker$ U7S_PLATFORM=k8s-sisyphus podsec-load-sign-oci out/amd64.tar.xz amd64 imagemaker@test.ru
> Версия платформы k8s-sisyphus преопределена переменной U7S_PLATFORM. Принимается это значение.
> amd64/
> amd64/blobs/
> Неверный формат архива. Индексный файл архива amd64/index.json отсутствует

Ожидаемый результат
===================

Успешная сборка архива с образами.

Воспроизводимость
=================

Воспроизводится на виртуальной машине:

[sisyphus] ALT Server 10.2 x86_64
podsec-1.0.10-alt6.noarch
kubernetes1.28-kubeadm-1.28.8-alt1.x86_64
kubernetes1.28-kubelet-1.28.8-alt1.x86_64
kubernetes1.28-crio-1.28.8-alt1.noarch
cri-tools1.28-1.28.0-alt1.x86_64

Не воспроизводится на виртуальной машине (примечание: U7S_SETAVAILABLEIMAGES=yes не актуален в p10):

[p10] ALT Server 10.2 x86_64
podsec-1.0.8-alt1.noarch
kubernetes1.28-kubeadm-1.28.8-alt1.x86_64
kubernetes1.28-kubelet-1.28.8-alt1.x86_64
kubernetes1.28-crio-1.28.8-alt1.noarch
cri-tools1.28-1.28.0-alt1.x86_64
Comment 1 ALexey Kostarev 2024-04-16 16:34:07 MSK
Протестирую
Возможно неверно указана группа

Вроде эта ошибка была устранена...

Завтра отвечу детально...
Comment 2 ALexey Kostarev 2024-04-17 14:27:59 MSK
(Ответ для Artem Varaksa на комментарий #0)
> Создано вложение 15881 [details] [подробности]
> Полный вывод команды podsec-k8s-save-oci
> 
> Шаги
> ====
> 
> 1. # podsec-create-policy <ip>
> 2. # podsec-create-services
> 3. # podsec-create-imagemakeruser imagemaker
> 4. # podsec-create-podmanusers poduser
> 5. # ssh imagemaker@localhost
> 6. imagemaker$ U7S_SETAVAILABLEIMAGES=yes U7S_PLATFORM=k8s-sisyphus
 out amd64 k8s-sisyphus
> 
> Фактический результат
> =====================
> 
> Команда завершается успешно, но очень быстро, и выводит ошибки (полный вывод
> во вложении):
> 
> > imagemaker$ U7S_SETAVAILABLEIMAGES=yes U7S_PLATFORM=k8s-sisyphus podsec-k8s-save-oci out amd64 k8s-sisyphus
> > ...
> > Загрузка образа registry.altlinux.org/k8s-sisyphus/cert-manager-controller:v1.11.0
> > FATA[0000] Invalid destination name containers-storage:[/home/imagemaker/.local/share/usernetes/images/k8s-sisyphus/amd64]registry.altlinux.org/k8s-sisyphus/cert-manager-controller:v1.11.0: mkdir /run/containers/storage: permission denied
> > ...
> > chown: неверная группа: «imagemaker:imagemaker»
> > ...
> 
> Использование созданного архива невозможно:

Я не припомню упоминалось ли это где-то, но сейчас podsec-k8s-save-oci корректно работает под суперпользователем root 

Под imagemaker есть проблемы с группой и возможно с праваии доступа

Посмотрю...
Comment 3 ALexey Kostarev 2024-04-17 20:33:30 MSK
(Ответ для Artem Varaksa на комментарий #0)
> Создано вложение 15881 [details] [подробности]
> Полный вывод команды podsec-k8s-save-oci
> 
> Шаги
> ====
> 
> 1. # podsec-create-policy <ip>
> 2. # podsec-create-services
> 3. # podsec-create-imagemakeruser imagemaker
> 4. # podsec-create-podmanusers poduser
> 5. # ssh imagemaker@localhost
> 6. imagemaker$ U7S_SETAVAILABLEIMAGES=yes U7S_PLATFORM=k8s-sisyphus
 out amd64 k8s-sisyphus
> 
> Фактический результат
> =====================
> 
> Команда завершается успешно, но очень быстро, и выводит ошибки (полный вывод
> во вложении):
> 
> > imagemaker$ U7S_SETAVAILABLEIMAGES=yes U7S_PLATFORM=k8s-sisyphus podsec-k8s-save-oci out amd64 k8s-sisyphus
> > ...
> > Загрузка образа registry.altlinux.org/k8s-sisyphus/cert-manager-controller:v1.11.0
> > FATA[0000] Invalid destination name containers-storage:[/home/imagemaker/.local/share/usernetes/images/k8s-sisyphus/amd64]registry.altlinux.org/k8s-sisyphus/cert-manager-controller:v1.11.0: mkdir /run/containers/storage: permission denied
> > ...
> > chown: неверная группа: «imagemaker:imagemaker»
> > ...
> 
> Использование созданного архива невозможно:

Я не припомню упоминалось ли это где-то, но сейчас podsec-k8s-save-oci корректно работает под суперпользователем root 

Под imagemaker есть проблемы с группой и возможно с праваии доступа

Посмотрю...
Comment 4 Artem Varaksa 2024-04-22 18:02:23 MSK
Прошу прощения, ошибка:

> chown: неверная группа: «imagemaker:imagemaker»

скорее всего была вызвана отсутствием пользователя imagemaker на проверяемой системе.

---

Однако в podsec-1.0.10-alt7.noarch даже при запуске сборки образов от root по-прежнему осталась ошибка:

> Загрузка образа registry.altlinux.org/k8s-sisyphus/cert-manager-controller:v1.11.0
> FATA[0000] Invalid destination name containers-storage:[/home/imagemaker/.local/share/usernetes/images/k8s-sisyphus/amd64]registry.altlinux.org/k8s-sisyphus/cert-manager-controller:v1.11.0: mkdir /run/containers/storage: permission denied

(возможно, это отдельная проблема).

И основная ошибка - созданный архив все равно недействителен:

> imagemaker$ U7S_PLATFORM=k8s-sisyphus podsec-load-sign-oci out/amd64.tar.xz amd64 imagemaker@test.ru
> Версия платформы k8s-sisyphus преопределена переменной U7S_PLATFORM. Принимается это значение.
> amd64/
> amd64/blobs/
> Неверный формат архива. Индексный файл архива amd64/index.json отсутствует
Comment 5 ALexey Kostarev 2024-04-22 20:12:53 MSK
(Ответ для Artem Varaksa на комментарий #4)
> Прошу прощения, ошибка:
> 
> > chown: неверная группа: «imagemaker:imagemaker»
> 
> скорее всего была вызвана отсутствием пользователя imagemaker на проверяемой
> системе.
> 
Этого сообщения 
chown: неверная группа: «imagemaker:imagemaker»
при работе под пользователем root вообще не должно было быть, так как
выполняется оператор
 
chown root:root ...

в пользователе imagemaker нет необходимости...

> ---
> 
> Однако в podsec-1.0.10-alt7.noarch даже при запуске сборки образов от root
> по-прежнему осталась ошибка:
> 
> > Загрузка образа registry.altlinux.org/k8s-sisyphus/cert-manager-controller:v1.11.0
> > FATA[0000] Invalid destination name containers-storage:[/home/imagemaker/.local/share/usernetes/images/k8s-sisyphus/amd64]registry.altlinux.org/k8s-sisyphus/cert-manager-controller:v1.11.0: mkdir /run/containers/storage: permission denied
> 
> (возможно, это отдельная проблема).
> 


> И основная ошибка - созданный архив все равно недействителен:
> 
> > imagemaker$ U7S_PLATFORM=k8s-sisyphus podsec-load-sign-oci out/amd64.tar.xz amd64 imagemaker@test.ru
> > Версия платформы k8s-sisyphus преопределена переменной U7S_PLATFORM. Принимается это значение.
> > amd64/
> > amd64/blobs/
> > Неверный формат архива. Индексный файл архива amd64/index.json отсутствует

А можно весь текст файла логов /tmp/log при выполнении команды

# sh -x podsec-k8s-save-oci <arch> amd64 2>&1 | tee /tmp/log
Comment 6 Artem Varaksa 2024-04-23 12:14:20 MSK
Created attachment 15952 [details]
podsec-1.0.10-alt7: sh -x podsec-k8s-save-oci

Приложил /tmp/log после выполнения команды:

> # U7S_SETAVAILABLEIMAGES=yes U7S_PLATFORM=k8s-sisyphus sh -x podsec-k8s-save-oci out amd64 2>&1 | tee /tmp/log
Comment 7 ALexey Kostarev 2024-04-23 13:11:48 MSK
(Ответ для Artem Varaksa на комментарий #6)
> Создано вложение 15952 [details] [подробности]
> podsec-1.0.10-alt7: sh -x podsec-k8s-save-oci
> 
> Приложил /tmp/log после выполнения команды:
> 
> > # U7S_SETAVAILABLEIMAGES=yes U7S_PLATFORM=k8s-sisyphus sh -x podsec-k8s-save-oci out amd64 2>&1 | tee /tmp/log

Разобрался в чем причина

time="2024-04-23T12:11:32+03:00" level=fatal msg="copying system image from manifest list: Source image rejected: Running image docker://registry.altlinux.org/k8s-sisyphus/cert-manager-controller:v1.11.0 is rejected by policy."

Запускать podsec-k8s-save-oci следует ДО настройки политик доступа 
(podsec-create-policy)

Вообще по сути эта команда должна запускаться на сервере , где podsec-k8s не разворачивается, так как это команда используется при построении ISO-образов

В этой ситуации стоит
1. Перейти в каталог /etc/containers
2. Посмотреть на какой файл залинкован policy.json

# ls -l policy.json 
lrwxrwxrwx 1 root root 26 апр 19 10:28 policy.json -> policy_2024-04-19_10:27:14

3. Найти файл с исходными свободными политиками

# grep -l insecureAcceptAnything policy_*
policy_2024-04-18_10:26:42

4. Перелинковать policy.json на этот файл

# ln -sf policy_2024-04-18_10:26:42 policy.json

5. Проверить policy.json

# cat policy.json 
{
    "default": [
        {
            "type": "insecureAcceptAnything"
        }
    ],
    "transports":
        {
            "docker-daemon":
                {
                    "": [{"type":"insecureAcceptAnything"}]
                }
        }
}

После этого можно запускать podsec-k8s-save-oci
После успешного окончания нужно не забыть обратно перелинковать policy.json
Comment 8 Artem Varaksa 2024-04-23 14:53:39 MSK
Спасибо, в таком случае образ собирается корректно.
Comment 9 ALexey Kostarev 2024-04-24 09:22:57 MSK
Наверное эти ньюансы надо в документации отразить
Вы какими документами пользуетесь?
Моими:
- https://github.com/kafnevod/podsec/tree/master/usernetes#readme
- https://www.altlinux.org/Rootless_kubernetes#podsec-k8s_-_%D0%91%D1%8B%D1%81%D1%82%D1%80%D1%8B%D0%B9_%D1%81%D1%82%D0%B0%D1%80%D1%82

Или специализированными внутренними для podsec-k8s?
Comment 10 Artem Varaksa 2024-04-24 11:52:45 MSK
(Ответ для ALexey Kostarev на комментарий #9)
> Вы какими документами пользуетесь?

Основываемся на ваших документах.