Анализ объектов Kubernetes с рекомендациями по повышению надежности и безопасности. kube-score активно предотвращает простои и ошибки в ваших YAML и Charts Kubernetes. Статический анализ кода для Kubernetes.
kube-score легко установить; он доступен из следующих источников:
| Распространение | Команда / Ссылка |
|---|---|
| Предварительно собранные бинарники для macOS, Linux и Windows | Релизы GitHub |
| Docker | docker pull zegl/kube-score (Docker Hub) |
| Homebrew (macOS и Linux) | brew install kube-score |
| Krew (macOS и Linux) | kubectl krew install score |
Полный список проверок см. в README_CHECKS.md.
NetworkPolicy; рекомендуется настройка правил как egress, так и ingressPodDisruptionPolicy
kube-score может работать в вашем CI/CD-окружении и завершится с кодом 1, если найдена критическая ошибка.
Уровень срабатывания можно изменить на предупреждение с помощью аргумента --exit-one-on-warning.
Для наилучшего результата на вход kube-score следует подавать все приложения, развёртываемые в одно пространство имён.
helm template my-app | kube-score score -
kustomize build . | kube-score score -
kube-score score my-app/*.yaml
kube-score score my-app/deployment.yaml my-app/service.yaml
kubectl api-resources --verbs=list --namespaced -o name \
| xargs -n1 -I{} bash -c "kubectl get {} --all-namespaces -oyaml && echo ---" \
| kube-score score -
docker run -v $(pwd):/project zegl/kube-score:latest score my-app/*.yaml
Usage of kube-score:
kube-score [action] --flags
Actions:
score Checks all files in the input, and gives them a score and recommendations
list Prints a CSV list of all available score checks
version Print the version of kube-score
help Print this message
Flags for score:
--disable-ignore-checks-annotations Set to true to disable the effect of the 'kube-score/ignore' annotations
--disable-optional-checks-annotations Set to true to disable the effect of the 'kube-score/enable' annotations
--enable-optional-test strings Enable an optional test, can be set multiple times
--exit-one-on-warning Exit with code 1 in case of warnings
--help Print help
--ignore-container-cpu-limit Disables the requirement of setting a container CPU limit
--ignore-container-memory-limit Disables the requirement of setting a container memory limit
--ignore-test strings Disable a test, can be set multiple times
--kubernetes-version string Setting the kubernetes-version will affect the checks ran against the manifests. Set this to the version of Kubernetes that you're using in production for the best results. (default "v1.18")
-o, --output-format string Set to 'human', 'json', 'ci' or 'sarif'. If set to ci, kube-score will output the program in a format that is easier to parse by other programs. Sarif output allows for easier integration with CI platforms. (default "human")
--output-version string Changes the version of the --output-format. The 'json' format has version 'v2' (default) and 'v1' (deprecated, will be removed in v1.7.0). The 'human' and 'ci' formats has only version 'v1' (default). If not explicitly set, the default version for that particular output format will be used.
-v, --verbose count Enable verbose output, can be set multiple times for increased verbosity.
Проверку можно игнорировать во всём запуске программы с помощью флага --ignore-test.
Проверку также можно игнорировать для отдельного объекта, добавив к нему аннотацию kube-score/ignore.
Значение должно быть строкой, разделённой запятыми, содержащей идентификаторы проверок.
Пример:
При проверке этого объекта временно отключается проверка service-type, предупреждающая об использовании сервисов типа NodePort.
apiVersion: v1
kind: Service
metadata:
name: node-port-service-with-ignore
namespace: foospace
annotations:
kube-score/ignore: service-type
spec:
selector:
app: my-app
ports:
- protocol: TCP
port: 80
targetPort: 8080
type: NodePort
Дополнительные проверки можно включить во всём запуске программы с помощью флага --enable-optional-test.
Проверку также можно включить для отдельного объекта, добавив к нему аннотацию kube-score/enable.
Значение должно быть строкой, разделённой запятыми, содержащей идентификаторы проверок.
Пример:
При проверке этого объекта включается проверка container-seccomp-profile.
Также одновременно игнорируются несколько проверок, определённых аннотацией kube-score/ignore.
apiVersion: apps/v1
kind: Deployment
metadata:
name: optional-test-manifest-deployment
labels:
app: optional-test-manifest
annotations:
kube-score/ignore: pod-networkpolicy,container-resources,container-image-pull-policy,container-security-context-privileged,container-security-context-user-group-id,container-security-context-readonlyrootfilesystem,container-ephemeral-storage-request-and-limit
kube-score/enable: container-seccomp-profile
spec:
replicas: 1
selector:
matchLabels:
app: optional-test-manifest
template:
metadata:
labels:
app: optional-test-manifest
spec:
containers:
- name: optional-test-manifest
image: busybox:1.34
command:
- /bin/sh
- -c
- date; env; tail -f /dev/null
Для сборки kube-score требуется Go версии 1.21 или новее. Клонируйте этот репозиторий, а затем выполните:
# Собрать проект
go build ./cmd/kube-score
# Запустить все тесты
go test -v ./...
Хотите помочь? Загляните в Руководство по внесению вклада для получения дополнительной информации. 🤩
| Проект | Версия |
|---|---|
| go.dev | ^1.21 |