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感興趣,或者對我們所做的任何其他很酷的事情,請知道我們正在招聘!查看我們的公開位置。我們很想收到您的來信!