Kubernetesオブジェクト分析により、信頼性とセキュリティ向上のための推奨事項を提供します。kube-scoreは、KubernetesのYAMLとChartsにおけるダウンタイムやバグを積極的に防止します。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 と 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
Usage of kube-score:
kube-score [action] --flags
Actions:
score 入力内のすべてのファイルをチェックし、スコアと推奨事項を提供します
list 利用可能なすべてのスコアチェックの CSV リストを表示
version kube-score のバージョンを表示
help このメッセージを表示
Flags for 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 のバージョンに設定してください。(デフォルト "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 のカンマ区切り文字列である必要があります。
例:
このオブジェクトをテストすると、NodePort タイプのサービスに対する警告を出す service-type テストが一時的に無効になります。
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 |