糸くず、一般的な検証、静的コード分析、セキュリティスキャン、構成テスト、監査、監査、Kustomizeビルド、および構造化されたKubernetes Yamlマニフェストのドライラン構成を実行するためのツールのオールインワンコレクション。検証とテストの一部としてCI(継続的な統合)プロセスで実行するように設計されています。これは、Gitopsを介して管理されるKubernetesクラスターに特に役立ちます。
Kubernetesに自動的に展開される前に、CI/CDプロセスの一部としてKubernetes YAMLマニフェストファイルを検証するために、すべての主要な検証ツール(いくつかあります!)を含むすべての主要な検証ツールを含む単一のDocker画像を見つけることができませんでした。このレポは、これらの個々のツールの使用方法をカバーするように設計されていませんが、いくつかの基本的な使用例が含まれています。以下のリンクは、各ツールを使用する詳細については、ドキュメントに導くはずです。一部のツールは他のツールではできない特定の側面をチェックするため、CI検証とスキャンプロセス中にいくつかのツールを使用することが有用であることがわかりました。
GithubパッケージまたはDocker Hubから最新の画像を入手してください。
画像をDockerで直接実行するか、CI/CDの使用例については以下を参照してください。
docker run --rm -it docker.pkg.github.com/highwayoflife/kubernetes-validation-tools/image:latest /bin/bashdocker run --rm -it deck15/kubeval-tools:latest /bin/bash| 道具 | バージョン | 目的 | 説明 |
|---|---|---|---|
| Kubectl | 1.23.5 | cli | Kubernetes Cli。マニフェストを検証するために--dry-run=clientで使用できます |
| 舵 | 3.8.1 | cli | Helmは、Kubernetesアプリケーションの管理を支援します。Kubernetesアプリケーションをヘルムチャートとして定義、インストール、アップグレードします。検証ツールとして実行し、 helm lintまたはhelm templateとして実行できます。 |
| yamllint | 1.26.3 | リナー | YAMLファイル用の基本的なリナー |
| Kubeval | 0.16.1 | 検証 | kubernetes yamlマニフェストを検証するためのツール。 CRDで動作しません。 |
| kustomize | 4.5.3 | コンパイル | アプリの構成をカスタマイズするテンプレートフリーの方法。 Kustomize Configsを検証するのに役立ちます。 |
| Config Lint | 1.6.0 | 検証 | YAMLで指定されたカスタムルールを使用して、構成ファイルを検証します。 |
| 対立 | 0.30.0 | テスト | 構造化された構成データに対するテストを作成するのに役立つユーティリティ。 |
| Kubeスコア | 1.14.0 | 安全 | Kubernetesオブジェクト定義の静的コード分析を実行するツール。 |
| ポラリス | 5.1.0 | 検証 | Kubernetes展開構成エラーを識別します |
| キューブリナー | 0.2.6 | 安全 | Kubernetesを確認するリンターおよび静的分析ツール |
| Kubeconform | 0.4.13 | 検証 | Kubernetesは、CRDサポートを備えたKubevalのような検証ツールを示します |
| Kubeaudit | 0.16.0 | 安全 | セキュリティ上の懸念事項のために、クラスターまたはマニフェストファイルを監査します |
| datree | 1.0.15 | ポリシー | Kubernetesマニフェストとヘルムチャートが有効であることを確認し、ポリシーに従ってください。 |
| Kubesec | 2.11.4 | 安全 | Kubernetesリソースのセキュリティリスク分析 |
理想的には、Kubernetes-validation-ToolsコンテナをCIビルドプロセスで使用して、Kubernetesの構成とマニフェストまたはヘルムチャートを検証、スキャン、およびリントする必要があります。 Gitopsの連続統合ワークフローの一部としてこれらのツールを実行することが最適です。
コンテナ仕様を使用して、コンテナの内側のステップを実行します。コンテナの適切なホスト環境としてruns-onを指定してください(Linuxコンテナ用のubuntu-latest、Windows-Latest for Windowsコンテナ)。例えば:
jobs :
container :
runs-on : ubuntu-latest
container : deck15/kubeval-tools:latest
steps :
- run : |
kubeconform -summary manifests.yaml
name: Run in container この例は、JenkinsがKubernetesクラスターで実行中のエージェントを実行している場合に役立ちます: Jenkinsfile
pipeline {
agent {
kubernetes {
cloud ' build-pipeline '
defaultContainer ' validate '
inheritFrom ' jnlp '
yaml """
apiVersion: v1
kind: Pod
spec:
containers:
- name: validate
image: deck15/kubeval-tools:latest
command:
- cat
tty: true
"""
} // kubernetes
} // agent
stages {
steps {
container( ' validate ' ) {
sh ' kubeconform -summary manifests.yaml '
}
}
}
}pipeline {
agent {
docker { image ' deck15/kubeval-tools:latest ' }
} // agent
.. .
}.drone.yml kind : pipeline
type : docker
name : default
steps :
- name : validate
image : deck15/kubeval-tools:latest
commands :
- kubeconform -summary manifests.yaml .circleci/config.yml version : 2.0
jobs :
build :
docker :
- image : deck15/kubeval-tools:latest .gitlab-ci.yamlすべてのジョブに使用される画像と、ランタイム中に使用するサービスのリストを定義できます。
default :
image : deck15/kubeval-tools:latest
validate :
script :
- kubeconform -summary manifests.yaml Kubeauditは、次のようなさまざまなセキュリティ上の懸念について、kubernetesクラスターを監査するためのコマンドラインツールとGOパッケージです。
Kubeauditは、安全なコンテナを展開することを確認してください!
Kubevalは、Kubernetes YamlまたはJSON構成ファイルを検証するためのツールです。これは、Kubernetes Openapi仕様から生成されたスキーマを使用して、したがって、Kubernetesの複数のバージョンのスキーマを検証できます。
KubeConformは、Kubernetesマニフェスト検証ツールです。 kubernetes構成を検証するためにCIにそれを構築してください!
それは触発され、クベールの近くにとどまるように設計されており、次の改善があります。
単一の有効なファイルの検証
kubeconform fixtures/valid.yaml
echo $?
0単一の無効なファイルを検証し、JSONへの出力を設定し、概要を印刷する
kubeconform -summary -output json fixtures/invalid.yaml
{
" resources " : [
{
" filename " : " fixtures/invalid.yaml " ,
" kind " : " ReplicationController " ,
" version " : " v1 " ,
" status " : " INVALID " ,
" msg " : " Additional property templates is not allowed - Invalid type. Expected: [integer,null], given: string "
}
],
" summary " : {
" valid " : 0,
" invalid " : 1,
" errors " : 0,
" skipped " : 0
}
}
echo $?
1Stdin経由でマニフェストを通過します
cat fixtures/valid.yaml | kubeconform -summary
Summary: 1 resource found parsing stdin - Valid: 1, Invalid: 0, Errors: 0 Skipped: 0フォルダーの検証、並列労働者の数を増やします
kubeconform -summary -n 16 fixtures
fixtures/crd_schema.yaml - CustomResourceDefinition trainingjobs.sagemaker.aws.amazon.com failed validation: could not find schema for CustomResourceDefinition
fixtures/invalid.yaml - ReplicationController bob is invalid: Invalid type. Expected: [integer,null], given: string
[...]
Summary: 65 resources found in 34 files - Valid: 55, Invalid: 2, Errors: 8 Skipped: 0Conftestは、構造化された構成データに対するテストを作成するのに役立つユーティリティです。たとえば、Kubernetes構成、またはTektonパイプライン定義、Terraformコード、サーバーレス構成、またはその他の構造化データのテストを作成できます。
Conftestは、オープンポリシーエージェントのAssertionsを作成するためにREGO言語に依存しています。
Yamllintは、YAMLファイル用のリナーです。
Yamllintは、構文の妥当性をチェックするだけでなく、重要な繰り返しや、ラインの長さ、後続のスペース、インデントなどの美容上の問題などの奇妙さを確認します。
Kustomizeを使用すると、複数の目的でRAWのテンプレートフリーのYAMLファイルをカスタマイズでき、元のYAMLをそのまま使用できます。
KustomizeはKubernetesをターゲットにします。 KubernetesスタイルのAPIオブジェクトを理解し、パッチすることができます。それはメイクのようなものであり、それが行うことはファイルで宣言されており、編集されたテキストを排出するという点でSEDのようなものです。 Kustomizeは、Kubernetesマニフェストをトラバースして、フォーキングなしで構成オプションを追加、削除、または更新します。
Kustomizeは、ArgoCD、FluxCD、Spinnakerなどのツールで使用して、コードを複製することなく複数のクラスターまたは環境で共有マニフェスト(リソース)を有効にするのに特に便利です。 Kustomizeは、オーバーライド、マージ、およびその他の構成機能を可能にします。
Kubectlは、スイスアーミーナイフのKubernetes CLIバージョンであり、多くのことをすることができます。それらの1つは、YAMLファイルでドライラン検証を行うことができることです。
$ kubectl create --dry-run --validate -f invalid.yamlCIで使用するヘルムコマンドは、ヘルムチャートを癒すか検証します。
可能な問題についてチャートを調べます。
注記:
helm lint自体は、ヘルムチャートを適切に検証するには不十分です。他のマニフェスト検証ツールの1つと組み合わせて、helm lintとhelm templateを使用することをお勧めします。 (以下の例を参照)
このコマンドは、チャートへのパスを取り、一連のテストを実行して、チャートが適切に形成されていることを確認します。
リナーがチャートをインストールに失敗させるものに遭遇すると、 [ERROR]メッセージが発生します。コンベンションや推奨事項で破る問題に遭遇すると、 [WARNING]メッセージが発生します。
helm lint PATH [flags]helm template ./path/to/chart | kubeconform -strict -ignore-missing-schemasconfig-lintは、yamlで指定されたルールを使用して構成ファイルを検証するコマンドラインツールです。構成ファイルは、Kubernetesのサポートを備えたTerraform、Json、Yamlのいくつかの形式の1つになります。 Terraformには組み込みのルールが提供されており、カスタムファイルは他の形式に使用できます。
config-lint -rules example-files/rules/kubernetes.yml example-files/configKube-Scoreは、Kubernetesオブジェクト定義の静的コード分析を実行するツールです。出力は、アプリケーションをより安全で回復力のあるものにするために、改善できるものの推奨事項のリストです。
Kube-Scoreは、CI/CD環境で実行でき、重大なエラーが見つかった場合はExitコード1で終了します。トリガーレベルは、-1つの警告の引数を使用して警告に変更できます。
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.yamlPolaris、Polarisは、Kubernetesのポッドとコントローラーがベストプラクティスを使用して構成されていることを確認するために、さまざまなチェックを実行します。 Polarisは、CI/CDプロセスの一部として、ローカルYAMLファイルをテストするためのCLIツールとして含まれています。
Polarisは、いくつかの異なるモードで実行できます。
コマンドラインで監査を実行して、出力をJSON、YAML、またはRAWスコアとして見ることができます。
polaris audit --format yaml > report.yaml
polaris audit --format score
# 92監査は、クラスターではなく、ローカルディレクトリまたはYAMLファイルに対して実行できます。
polaris audit --audit-path ./deploy/
# or to use STDIN
cat pod.yaml | polaris audit --audit-path -クラスター全体ではなく、単一のリソースで監査を実行することもできます。
polaris audit --resource " nginx-ingress/Deployment.apps/v1/default-backend " コードとしてのインフラストラクチャを含むリポジトリのPolarisをCI/CDに統合できます。たとえば、Polarisが危険レベルの問題を検出した場合、またはスコアが90%未満に低下した場合に故障するには:
polaris audit --audit-path ./deploy/
--set-exit-code-on-danger
--set-exit-code-below-score 90CLIの使用オプションについては、使用状況ドキュメントを参照してください
Kube Linterは、Kubernetes YAMLファイルとヘルムチャートをチェックして、それらに表されるアプリケーションがベストプラクティスに準拠していることを確認する静的分析ツールです。 KubelinterはYAMLファイルを入力として受け入れ、それらの一連のチェックを実行します。問題が見つかった場合、それはそれらを報告し、ゼロ以外の出口コードを返します。
Datreeは、kubernetesがマニフェストおよびヘルムチャートがベストプラクティスと組織のポリシーに従うことを保証するために、ローカルまたはCI/CDで使用できるCLIツールです。 YamlおよびKubernetesスキーマ検証の組み込みサポートとともに、選択できる30のバトルテストルールが付属しています。
datree test my-app/ * .yaml
datree test my-app/deployment.yamlhelm datree test < CHART_DIRECTORY > Kubesecは、Kubernetes Pods、展開、Daemonsets、Statefulsetsのセキュリティスキャンツールです。
kubesec scan manifest.yamlKubesecはJSONアレイを返し、単一の入力ファイルで複数のYAMLドキュメントをスキャンできます。
[
{
"object" : " Pod/security-context-demo.default " ,
"valid" : true ,
"message" : " Failed with a score of -30 points " ,
"score" : -30 ,
"scoring" : {
"critical" : [
{
"selector" : " containers[] .securityContext .capabilities .add == SYS_ADMIN " ,
"reason" : " CAP_SYS_ADMIN is the most privileged capability and should always be avoided " ,
"points" : -30
}
],
"advise" : [
{
"selector" : " containers[] .securityContext .runAsNonRoot == true " ,
"reason" : " Force the running image to run as a non-root user to ensure least privilege " ,
"points" : 1
},
{
// ...
}
]
}
}
]PRSようこそ!詳細については、貢献ガイドラインをご覧ください。