Bug 48038 - Ошибка при сканировании kubernetes
Summary: Ошибка при сканировании kubernetes
Status: CLOSED NOTABUG
Alias: None
Product: Sisyphus
Classification: Development
Component: trivy (show other bugs)
Version: unstable
Hardware: x86_64 Linux
: P5 normal
Assignee: Ivan
QA Contact: qa-sisyphus
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2023-10-17 10:36 MSK by Alexander Makeenkov
Modified: 2024-02-26 16:03 MSK (History)
4 users (show)

See Also:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Alexander Makeenkov 2023-10-17 10:36:51 MSK
Версия пакета:
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>
Comment 1 Ivan 2023-10-20 15:00:01 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
Comment 2 Alexander Makeenkov 2023-10-20 15:09:45 MSK
(Ответ для Ivan на комментарий #1)
> Лечится командой:
> kubectl taint nodes <нода> node-role.kubernetes.io/control-plane:NoSchedule-

Помогло, спасибо.
Comment 3 ALexey Kostarev 2024-01-10 14:42:05 MSK
При  разворачивании в отсутствии доступа в Интернет возникает проблема доступа к образу 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 ...
Comment 4 ALexey Kostarev 2024-01-17 15:14:37 MSK
(Ответ для 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-решений
Comment 5 ALexey Kostarev 2024-01-28 17:49:53 MSK
В последней версии
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)
Comment 6 ALexey Kostarev 2024-01-28 18:01:52 MSK
По задаче создания образов добавил задачу - https://bugzilla.altlinux.org/49211
Comment 7 ALexey Kostarev 2024-01-28 18:13:17 MSK
По задаче изменения образа по умолчания для пакета trivy добавлил задачу
https://bugzilla.altlinux.org/49212
Comment 8 ALexey Kostarev 2024-01-28 18:18:41 MSK
По задаче модификации команды podsec-k8s формирования архив ISO-образов добавил задачу 
https://bugzilla.altlinux.org/49213
Comment 9 Alexey Shabalin 2024-01-29 03:49:34 MSK
Не совсем понятно, зачем для разных бранчей делать разные образы. Если мы будем стараться держать одинаковую версию trivy во всех браняах. Это значит, что нужно в разные бранчи добавлять разные патчи. Или в спеке делать sed на изменение url. Может один образ сделать(например на базе p10) и все? Без привязки к бранчам.Тут тэги больше по версиям подходят, а не по нашим бранчам.
Comment 10 ALexey Kostarev 2024-01-29 09:03:10 MSK
(Ответ для Alexey Shabalin на комментарий #9)
> Не совсем понятно, зачем для разных бранчей делать разные образы. Если мы
> будем стараться держать одинаковую версию trivy во всех браняах. Это значит,
> что нужно в разные бранчи добавлять разные патчи. Или в спеке делать sed на
> изменение url. Может один образ сделать(например на базе p10) и все? Без
> привязки к бранчам.Тут тэги больше по версиям подходят, а не по нашим
> бранчам.

Тут как скажут постановщики задач. Мы же для разных платформ (p10, c10f1, ...) делаем разные образы на основе одного исходного кода
Comment 11 ALexey Kostarev 2024-01-29 09:10:59 MSK
(Ответ для 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