Kubernetes的静态分析
Kubelinter分析了Kubernetes YAML文件和头盔图表,并根据各种最佳实践对其进行检查,重点是生产准备和安全性。
Kubelinter运行明智的默认检查,旨在为您提供有关kubernetes yaml文件和舵加图表的有用信息。这是为了帮助团队尽早检查,并且经常检查安全性错误和DevOps的最佳实践。其中的一些常见示例包括作为非root用户运行容器,执行最低特权,并仅在秘密中存储敏感信息。
Kubelinter是可配置的,因此您可以启用和禁用支票,并根据您想要在组织中遵循的策略来创建自己的自定义检查。
当皮棉检查失败时,Kubelinter报告了如何解决任何潜在问题并返回非零退出代码的建议。
请访问https://docs.kubelinter.io,以获取有关安装,使用和配置Kubelinter的详细文档。
可以在这里找到Kube-Linter二进制文件:https://github.com/stackrox/kube-linter/releases/latest
要使用GO安装,请运行以下命令:
go install golang.stackrox.io/kube-linter/cmd/kube-linter@latest否则,请从发行版中下载最新的二进制文件,然后将其添加到您的路径中。
要使用Homebrew或Linuxbrew安装,请运行以下命令:
brew install kube-linter nix-shell -p kube-linter
docker pull stackrox/kube-linter:latest
从源安装kubelinter就像遵循以下步骤一样简单:
首先,克隆Kubelinter存储库。
git clone [email protected]:stackrox/kube-linter.git然后,编译源代码。这将为每个平台创建Kube-linter二进制文件,并将它们放入.gobin文件夹中。
make build最后,您准备开始使用Kubelinter。验证您的版本以确保您已成功安装了Kubelinter。
.gobin/kube-linter version有几层测试。每层都将通过。
go单位测试:
make test端到端集成测试:
make e2e-test最后,使用bats-core的端到端集成测试:
make e2e-batsKubelinter图像由Cosign签名。我们建议在使用图像之前验证图像。
安装COSIGN后,您可以使用Kubelinter公共密钥来验证Kubelinter图像:
cat kubelinter-cosign.pub
-----BEGIN PUBLIC KEY-----
MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEl0HCkCRzYv0qH5QiazoXeXe2qwFX
DmAszeH26g1s3OSsG/focPWkN88wEKQ5eiE95v+Z2snUQPl/mjPdvqpyjA==
-----END PUBLIC KEY-----
cosign verify --key kubelinter-cosign $IMAGE_NAMEKubelinter还提供无钥匙签名。
您可以使用以下方式验证Kubelinter图像
# NOTE: Keyless signatures are NOT PRODUCTION ready.
COSIGN_EXPERIMENTAL=1 cosign verify $IMAGE_NAME 运行kubelinter来提交您的yaml文件,只需要以其最基本的形式两个步骤。
找到您要测试的安全性和生产准备最佳实践的YAML文件:
运行以下命令:
kube-linter lint /path/to/your/yaml.yaml考虑以下样本POD规范文件pod.yaml 。该文件有两个生产准备问题和一个安全问题:
安全问题:
生产准备:
没有设置容器的内存限制,这可以使其消耗过多的内存
apiVersion : v1
kind : Pod
metadata :
name : security-context-demo
spec :
securityContext :
runAsUser : 1000
runAsGroup : 3000
fsGroup : 2000
volumes :
- name : sec-ctx-vol
emptyDir : {}
containers :
- name : sec-ctx-demo
image : busybox
resources :
requests :
memory : " 64Mi "
cpu : " 250m "
command : [ "sh", "-c", "sleep 1h" ]
volumeMounts :
- name : sec-ctx-vol
mountPath : /data/demo
securityContext :
allowPrivilegeEscalation : false通过运行以下命令将上面的YAML复制到pod.yaml,并填充此文件:
kube-linter lint pod.yamlKubelinter运行其默认检查并报告建议。以下是我们以前命令的输出。
pod.yaml: (object: <no namespace>/security-context-demo /v1, Kind=Pod) The container "sec-ctx-demo" is using an invalid container image, "busybox". Please use images that are not blocked by the `BlockList` criteria : [".*:(latest)$" "^[^:]*$" "(.*/[^:]+)$"] (check: latest-tag, remediation: Use a container image with a specific tag other than latest.)
pod.yaml: (object: <no namespace>/security-context-demo /v1, Kind=Pod) container "sec-ctx-demo" does not have a read-only root file system (check: no-read-only-root-fs, remediation: Set readOnlyRootFilesystem to true in the container securityContext.)
pod.yaml: (object: <no namespace>/security-context-demo /v1, Kind=Pod) container "sec-ctx-demo" has memory limit 0 (check: unset-memory-requirements, remediation: Set memory limits for your container based on its requirements. Refer to https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/#requests-and-limits for details.)
Error: found 3 lint errors
要了解有关使用和配置Kubelinter的更多信息,请访问文档页面。
以下是用户编写的Kubelinter的教程。如果您想将其添加到此列表中,请发送PR!
如果您想与Kubelinter社区(包括维护人员和其他用户)互动,则可以在此处加入Slack Workspace。
为了贡献,请查看我们的贡献指南。
提醒您,所有参与Kubelinter社区都受我们的行为准则的约束。
Kubelinter处于发展的早期阶段。将来可能会发生破坏命令使用情况,标志和配置文件格式的变化。但是,我们鼓励您使用Kubelinter测试您的环境yaml文件,查看什么破裂并做出贡献。
Kubelinter已获得Apache许可证2.0的许可。
Kubelinter由Stackrox用❤️制造。
如果您对Kubelinter感兴趣,或者对我们所做的任何其他很酷的事情,请知道我们正在招聘!查看我们的公开位置。我们很想收到您的来信!