
kube-score 是一个对您的 Kubernetes 对象定义进行静态代码分析的工具。
输出是一系列建议,帮助您提高应用程序的安全性和弹性。
您可以通过在线演示(源代码)在浏览器中尝试 kube-score。
kube-score 安装简单,可通过以下途径获取:
完整检查项列表请参见 README_CHECKS.md。
NetworkPolicy 覆盖,建议同时配置 egress 和 ingress 规则PodDisruptionPolicy
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
kube-score 用法:
kube-score [action] --flags
操作:
score 检查输入中的所有文件,给出评分和建议
list 打印所有可用评分检查的 CSV 列表
version 打印 kube-score 版本
help 打印此帮助信息
score 标志:
--disable-ignore-checks-annotations 设为 true 以禁用 'kube-score/ignore' 注释的效果
--disable-optional-checks-annotations 设为 true 以禁用 'kube-score/enable' 注释的效果
--enable-optional-test strings 启用一个可选测试,可多次设置
--exit-one-on-warning 如果有警告则退出码为 1
--help 打印帮助信息
--ignore-container-cpu-limit 禁用设置容器 CPU 限制的要求
--ignore-container-memory-limit 禁用设置容器内存限制的要求
--ignore-test strings 禁用一个测试,可多次设置
--kubernetes-version string 设置 kubernetes-version 会影响对清单运行检查。建议设置为生产环境使用的 Kubernetes 版本以获得最佳结果。(默认 "v1.18")
-o, --output-format string 设为 'human'、'json'、'ci' 或 'sarif'。若设为 ci,kube-score 将输出更易于其他程序解析的格式。Sarif 输出便于与 CI 平台集成。(默认 "human")
--output-version string 改变 --output-format 的版本。'json' 格式有 'v2'(默认)和 'v1'(已弃用,将在 v1.7.0 中移除)。'human' 和 'ci' 格式只有 'v1' 版本(默认)。若未显式设置,将使用该输出格式的默认版本。
-v, --verbose count 启用详细输出,可多次设置以增加详细程度。
可以使用 --ignore-test 标志在程序全局运行中忽略测试。
也可以通过向对象添加 kube-score/ignore 注释,以每个对象为基础忽略测试。其值应为逗号分隔的测试 ID 字符串。
示例:
测试此对象将临时禁用 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 注释,以每个对象为基础启用测试。其值应为逗号分隔的测试 ID 字符串。
示例:
测试此对象将启用 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 |
| 发行方式 | 命令 / 链接 |
|---|
| macOS、Linux 和 Windows 的预构建二进制文件 | GitHub releases |
| Docker | docker pull zegl/kube-score (Docker Hub) |
| Homebrew(macOS 和 Linux) | brew install kube-score |
| Krew(macOS 和 Linux) | kubectl krew install score |