Summary: | Ошибка при сканировании kubernetes | ||
---|---|---|---|
Product: | Sisyphus | Reporter: | Alexander Makeenkov <amakeenk> |
Component: | trivy | Assignee: | Ivan <pepelyaevip> |
Status: | CLOSED NOTABUG | QA Contact: | qa-sisyphus |
Severity: | normal | ||
Priority: | P5 | CC: | kaf, pepelyaevip, shaba, varaksaaa, zurabishvilinn |
Version: | unstable | ||
Hardware: | x86_64 | ||
OS: | Linux |
Description
Alexander Makeenkov
2023-10-17 10:36:51 MSK
(In reply to Alexander Makeenkov from comment #0) > Версия пакета: > trivy-0.45.1-alt1.x86_64 > > Шаги воспроизведения: > 1. Настроить kubernetes кластер по инструкции > https://www.altlinux.org/Kubernetes > 2. На первом хосте кластера установить пакет: # apt-get install trivy > 3. Выполнить команду: $ trivy --debug kubernetes --report=summary cluster > > Получаемый результат: > 2023-10-17T10:27:23.069+0300 DEBUG Severities: ["UNKNOWN" "LOW" > "MEDIUM" "HIGH" "CRITICAL"] > 2023-10-17T10:27:23.070+0300 DEBUG Ignore statuses {"statuses": null} > 2023-10-17T10:32:23.089+0300 FATAL get k8s artifacts with node info > error: > github.com/aquasecurity/trivy/pkg/k8s/commands.clusterRun > /usr/src/RPM/BUILD/trivy-0.45.1/pkg/k8s/commands/cluster.go:34 > - running node-collector job: runner received timeout > > Не воспроизводится в p10 на версии 0.45.0-alt2. > > Доказательство работоспособности кластера: > $ kubectl get pods --namespace kube-system > NAME READY STATUS RESTARTS AGE > coredns-787d4945fb-hxnj7 1/1 Running 1 38m > coredns-787d4945fb-wsmfm 1/1 Running 1 38m > etcd-kubehosta 1/1 Running 1 38m > kube-apiserver-kubehosta 1/1 Running 1 38m > kube-controller-manager-kubehosta 1/1 Running 1 38m > kube-proxy-4tqqs 1/1 Running 1 38m > kube-proxy-cgwdg 1/1 Running 1 38m > kube-scheduler-kubehosta 1/1 Running 1 38m > > $ kubectl get svc nginx > NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE > nginx NodePort 10.108.205.61 <none> 80:30546/TCP 39m > > $ curl -s 192.168.0.14:30546 | grep title > <title>Welcome to nginx!</title> node-collector не запускался из-за taint'a Лечится командой: kubectl taint nodes <нода> node-role.kubernetes.io/control-plane:NoSchedule- Источник: https://kubernetes.io/docs/reference/labels-annotations-taints/#node-role-kubernetes-io-control-plane-taint (Ответ для Ivan на комментарий #1) > Лечится командой: > kubectl taint nodes <нода> node-role.kubernetes.io/control-plane:NoSchedule- Помогло, спасибо. При разворачивании в отсутствии доступа в Интернет возникает проблема доступа к образу ghcr.io/aquasecurity/node-collector:0.0.9 В этом случае необходимо: - получить этот образ на рабочем месте с доступом в Интернет - заархивировать его (podman save) - перенести в на рабочее место пользователя imagemaker и поместить в локальный регистратор # podman tag ghcr.io/aquasecurity/node-collector:0.0.9 registry.local/aquasecurity/node-collector # podman push registry.local/aquasecurity/node-collector - при вызове `trivy kubernetes ...` указать имя этого образа в флаге --node-collector-imageref trivy kubernetes --node-collector-imageref registry.local/aquasecurity/node-collector ... (Ответ для ALexey Kostarev на комментарий #3) > При разворачивании в отсутствии доступа в Интернет возникает проблема > доступа к образу ghcr.io/aquasecurity/node-collector:0.0.9 > > В этом случае необходимо: > - получить этот образ на рабочем месте с доступом в Интернет > - заархивировать его (podman save) > - перенести в на рабочее место пользователя imagemaker и поместить в > локальный регистратор > > # podman tag ghcr.io/aquasecurity/node-collector:0.0.9 > registry.local/aquasecurity/node-collector > # podman push registry.local/aquasecurity/node-collector > > - при вызове `trivy kubernetes ...` указать имя этого образа в флаге > --node-collector-imageref > > trivy kubernetes --node-collector-imageref > registry.local/aquasecurity/node-collector ... К сожалению этот подход имеет проблемы - хотя флаг node-collector-imageref присутствует в исходных кодах trivy он в настоящее время не поддерживается :-( Поэтому порядок действия должен быть таким: 1. получить этот образ на рабочем месте с доступом в Интернет # podman pull ghcr.io/aquasecurity/node-collector:0.0.9 2. заархивировать его # podman save ghcr.io/aquasecurity/node-collector:0.0.9 | xz -9v > node.collector.tar.xz 3. перенести архив node.collector.tar.xz на рабочее место, где будет запускаться trivy ... kubernetes ... Eсли на рабочем месте включены политики доступа в /etc/containers/policy.json, допускающие возможность запуска только подписанных образов из регистратора registry.local, то дальнейшие действия необходимо производить ТОЛЬКО ПОД ПОЛЬЗОВАТЕЛЕМ, ВХОДЯЩИМ В ГРУППУ podman_dev (класса создателей образов). В ином случае пользователь может быть любым, включая пользователя root 4. Разархивировать образ (podman load) $ xz -d < node.collector.tar.xz | podman load 5. Запускать команду trivy ... kubernetes ... от имени выбранного пользователя Для защищенных платформ c10f? возможно стоит включить архив образа node.collector.tar.xz (12Mb) в состав ISO-образа и разворачивать образ при разворачивании kuber-решений В последней версии trivy-0.48.3-alt2 у клиента trivy есть возможность указания имени образа node-collector флагом: --node-collector-imageref= Договорились создать следующие образы: - registry.altlinux.org/alt/k8s-trivy-node-collector:sisyphus - registry.altlinux.org/alt/k8s-trivy-node-collector:p10 - registry.altlinux.org/alt/k8s-trivy-node-collector:c10f1 - registry.altlinux.org/alt/k8s-trivy-node-collector:c10f2 В пакеты trivy соответствующих платформ в качестве образа по умолчанию вместо образа ghcr.io/aquasecurity/node-collector использоваь образы: * sisyphus - registry.altlinux.org/alt/k8s-trivy-node-collector:sisyphus * p10 - registry.altlinux.org/alt/k8s-trivy-node-collector:p10 * c10f1 - registry.local/alt/k8s-trivy-node-collector:c10f1 * c10f2 - registry.local/alt/k8s-trivy-node-collector:c10f2 Для дистрибутивов c10f1, c10f2 необходимо включить соответствующие образы в архив образов на ISO-диске и обеспечить их подпись помещение в локальный регистратор под именем: - c10f1 - registry.local/alt/k8s-trivy-node-collector:c10f1 (алиас образа registry.altlinux.org/alt/k8s-trivy-node-collector:c10f1) - c10f2 - registry.local/alt/k8s-trivy-node-collector:c10f2 (алиас образа registry.altlinux.org/alt/k8s-trivy-node-collector:c10f2) Для этого необходимо в пакете podsec модифицировать команду формирования архив ISO-образов [podsec-k8s-save-oci](https://github.com/alt-cloud/podsec/blob/master/podsec-k8s/bin/podsec-k8s-save-oci) По задаче создания образов добавил задачу - https://bugzilla.altlinux.org/49211 По задаче изменения образа по умолчания для пакета trivy добавлил задачу https://bugzilla.altlinux.org/49212 По задаче модификации команды podsec-k8s формирования архив ISO-образов добавил задачу https://bugzilla.altlinux.org/49213 Не совсем понятно, зачем для разных бранчей делать разные образы. Если мы будем стараться держать одинаковую версию trivy во всех браняах. Это значит, что нужно в разные бранчи добавлять разные патчи. Или в спеке делать sed на изменение url. Может один образ сделать(например на базе p10) и все? Без привязки к бранчам.Тут тэги больше по версиям подходят, а не по нашим бранчам. (Ответ для Alexey Shabalin на комментарий #9) > Не совсем понятно, зачем для разных бранчей делать разные образы. Если мы > будем стараться держать одинаковую версию trivy во всех браняах. Это значит, > что нужно в разные бранчи добавлять разные патчи. Или в спеке делать sed на > изменение url. Может один образ сделать(например на базе p10) и все? Без > привязки к бранчам.Тут тэги больше по версиям подходят, а не по нашим > бранчам. Тут как скажут постановщики задач. Мы же для разных платформ (p10, c10f1, ...) делаем разные образы на основе одного исходного кода (Ответ для Alexey Shabalin на комментарий #9) > Не совсем понятно, зачем для разных бранчей делать разные образы. Если мы > будем стараться держать одинаковую версию trivy во всех браняах. Это значит, > что нужно в разные бранчи добавлять разные патчи. Или в спеке делать sed на > изменение url. Может один образ сделать(например на базе p10) и все? Без > привязки к бранчам.Тут тэги больше по версиям подходят, а не по нашим > бранчам. Но если требования замены в исходных кодах trivy образа по умолчанию ghcr.io/aquasecurity/node-collector на наш образ registry.altlinux.org/alt/k8s-trivy-node-collector является обязательным, то надо иметь в виду, что для команды trivy для платформ c10 надо указывать образ с регистратора registry.local. То есть для команды trivy для платформ p10 будет registry.altlinux.org/alt/k8s-trivy-node-collector То есть для команды trivy для платформ c10 будет registry.local/alt/k8s-trivy-node-collector Если снять это требование (и оставить в trivy имя образа registry.altlinux.org/alt/k8s-trivy-node-collector), то можно будет для платформ c10 использовать флаг --node-collector-imageref=registry.local/aquasecurity/node-collector: trivy --debug kubernetes --node-collector-imageref=registry.local/aquasecurity/node-collector --report=summary cluster k8s-trivy-node-collector-0.3.1-alt1 trivy-0.55.0-alt1 Стенды (обновлены до сизифа): Server 10.2 office x86-64 Ошибка воспроизводится по шагам из https://bugzilla.altlinux.org/show_bug.cgi?id=48038#c0 : - get k8s artifacts with node info error: github.com/aquasecurity/trivy/pkg/k8s/commands.clusterRun /usr/src/RPM/BUILD/trivy-0.55.0/pkg/k8s/commands/cluster.go:42 - running node-collector job: runner received timeout При добавлении --timeout : - get k8s artifacts with node info error: github.com/aquasecurity/trivy/pkg/k8s/commands.clusterRun /usr/src/RPM/BUILD/trivy-0.55.0/pkg/k8s/commands/cluster.go:42 - running node-collector job: job failed: DeadlineExceeded: Job was active longer than specified deadline Команда # kubectl taint nodes <нода> node-role.kubernetes.io/control-plane:NoSchedule- не помогает В контейнере node-collector не хватало пакета procps После пересборки с procps ошибок не было |