|
KyvernoはNirmataが開発したオープンソースプロジェクトで、後にCNCFに寄贈されました。Kyvernoは、検証と変更機能を備えたKubernetesポリシーエンジンですが、リソース生成機能とAPIオブジェクトクエリ機能も備えています。元々Kubernetes向けに開発されたKyvernoは、オブジェクト生成を除き、専用言語を必要とせずにポリシーを記述できます。 同様に、Kyverno は Kubernetes クラスター内で動的アドミッションコントローラーとして動作します。Kyverno は、kube-apiserver から認証およびアドミッション変更の Webhook HTTP コールバックを受信し、一致するポリシーを適用し、アドミッションポリシーを適用するかリクエストを拒否するかの結果を返します。Kyverno のポリシーは、リソースの種類、名前、タグセレクターを使用してリソースをマッチングでき、名前にはワイルドカードがサポートされています。 ポリシーの適用はKubernetesイベントを介してキャプチャされ、Kyvernoは既存のリソースのポリシー違反も報告します。次の図は、Kyvernoの全体的なアーキテクチャを示しています。 キヴェルノ建築 高可用性のKyvernoインストールは、複数のレプリカを実行することで実現できます。各レプリカには、異なる機能を実行する複数のコントローラーが配置されます。WebhookはKubernetes APIServerからのAdmissionReviewリクエストを処理し、そのMonitorコンポーネントは必要な設定を作成および管理します。PolicyControllerはポリシーリソースを監視し、設定されたスキャン間隔に基づいてバックグラウンドスキャンを開始します。GenerateControllerは生成されたリソースのライフサイクルを管理します。 インストールまず、Kubernetes クラスターのバージョンが v1.14 以降であることを確認する必要があります。インストールする必要があるバージョンも Kubernetes のバージョンによって異なります。 互換バージョン すでにバージョン v1.26.x を使用しているため、最新バージョン 1.9.2 をインストールすることを選択できます。 次のコマンドを実行すると、最新バージョンのリソース リストから Kyverno を直接インストールすることを選択できます。 ➜ kubectl create -f https://github.com/kyverno/kyverno/releases/download/v1.9.2/install.yaml あるいは、Helm を使用してワンクリック インストールを行うこともできます。 ➜ Helmリポジトリにkyvernoを追加https://kyverno.github.io/kyverno/ インストール後、kube-kyverno 名前空間が作成され、関連する CRD もいくつか含まれます。 ➜ kubectlポッドを取得- n kube - kyverno ご覧のとおり、インストール後にいくつかの validatingwebhookconfiguration オブジェクトと mutatingwebhookconfigurations オブジェクトが作成されました。 戦略とルールKyverno の使用は、基本的にポリシーとルールの適用です。Kyverno ポリシーはルールの集合です。各ルールは、match ステートメント、オプションの exclude ステートメント、および validate、mutate、generate、または verifyImages ステートメントのいずれかで構成されます。各ルールには、validate、mutate、generate、または verifyImages サブステートメントを 1 つだけ含めることができます。 キベルノ戦略 ポリシーは、クラスター全体のリソース (ClusterPolicy) または名前空間レベルのリソース (Policy) として定義できます。
戦略の定義ポリシーを記述することは、基本的に Policy または ClusterPolicy オブジェクトを定義することです。 リソースを確認する検証ルールは、私たちが使用する最も一般的で実用的なルールタイプです。ユーザーまたはプロセスが新しいリソースを作成すると、Kyvernoは検証ルールに従ってリソースの属性をチェックします。検証に合格した場合、リソースの作成は許可されます。検証に失敗した場合、作成はブロックされます。例えば、すべてのポッドにkyvernoタグを含めることを要求するポリシーを追加してみましょう。 # kyverno - require - label .yaml 上記のポリシー ファイルには、`validatinotallow=[Audit, Enforce]` 属性が含まれています。
次は、`rules` 属性を使用して定義される一連のルールです。`match` は照合するリソースを指定するために使用され、`validate` は検証方法を指定します。ここでは、`kyverno: "?*"` のようなタグを定義して、そのようなタグキーが必須であることを示します。 上記の戦略オブジェクトを適用するだけです。 ➜ kubectl apply -f kyverno -require -label .yaml 次に、「kyverno」タグなしで Pod を追加してみましょう。 ➜ kubectl run busybox -- image = busybox : 1.28 .3 -- restart = Never -- sleep 1000000 ご覧の通り、kyvernoタグが必要です。同様に、イベントセクションでポリシーがどのように適用されているかを確認できます。 ➜ kubectlイベントを取得- A - w 作成する Pod に kyverno タグが付いている場合は、通常どおり作成できます。 ➜ kubectl run busybox -- image = busybox : 1.28 .3 -- labels kyverno = demo -- restart = Never -- sleep 1000000 validationFailureAction の値を Audit に変更すると、kyverno タグが付いていない場合でも、作成する Pod は正常に作成されます。ただし、対応する違反レポートは PolicyReport オブジェクトで確認できます。 ➜ kubectlポリシーレポートを取得する ポリシーに違反したリソース オブジェクトは、上記のレポート リソースから確認できます。 ルールを変えるルールを変更すると、ルールに一致するリソースを変更できます (たとえば、ルールによってリソースのメタデータと結合できるメタデータ フィールドが設定されている場合)。つまり、設定したルールに従って対応するリソースが変更されます。 たとえば、nginx イメージを含むすべてのポッドにタグ (kyverno=nginx) を追加する、次のようなポリシーを追加します。 # kyverno -変異-ラベル.yaml 上記の戦略オブジェクトを適用するだけです。 ➜ kubectl apply -f kyverno -mutate -label .yaml ここで、nginx イメージを使用して Pod を直接作成します。 ➜ kubectl run --image = nginx : 1.7 .9 nginx ご覧の通り、Podは正常に作成され、kyverno=nginxタグが含まれています。kyvernoタグのおかげで上記の検証戦略は成功し、Podを正常に作成できます。 リソースを生成する生成ルールは、名前空間の新しい RoleBinding や Secret の作成など、新しいリソースを作成したりソースを更新したりするときに追加のリソースを作成するために使用できます。 例えば、特定のシークレット(TLSキーやミラーリポジトリの認証情報など)を他の名前空間に同期する必要がある場合、これらのシークレットを手動でコピーするのは面倒です。Kyvernoを使用すれば、これらのシークレットを同期するための戦略を作成できます。例えば、デフォルトの名前空間にregcredというシークレットオブジェクトがあり、これを別の名前空間にコピーする必要がある場合、元のシークレットが変更されると、コピーされたシークレットも更新されます。 # kyverno -生成-シークレット.yaml まず、デフォルトの名前空間に Secret オブジェクトを準備します。 ➜ kubectl create secret docker - registry regcred -- docker - server = DOCKER_REGISTRY_SERVER -- docker - username = DOCKER_USER -- docker - password = DOCKER_PASSWORD -- docker - email = DOCKER_EMAIL 次に、上記の同期された秘密戦略を適用します。 ➜ kubectl apply -f kyverno -generate -secret .yaml 次に、新しい名前空間を作成しましょう。 ➜ kubectl nsテストを作成 新しく作成された名前空間に、regcred という名前の新しい Secret オブジェクトが作成されたことがわかります。 Kyvernoのポリシーは公式サイト(https://kyverno.io/policies)でご覧いただけます。ポリシーは種類、カテゴリ、テーマなどで絞り込むことができます。Kyvernoは柔軟性、パワー、使いやすさのバランスが取れています。多くの学習時間を必要とせず、便利な機能を提供します。公式サイトには様々なシナリオに対応した豊富な例が掲載されているため、ぜひ活用してみてください。 たとえば、NGINX Ingress のパス値を制限するには、次のようなポリシーを作成できます (CVE-2021-25745 セキュリティ問題、NGINX Ingress v1.2.0 で修正済み)。 apiバージョン: kyverno.io/v1 |
KubernetesポリシーエンジンであるKyvernoが使用される
関連するおすすめ記事
-
信じられない!Vimユーザーの考え方(オープンソースツール)
-
C# でおすすめのオープンソース プロジェクト 15 件
-
Qwen2.5が世界オープンソースの王座に昇格!72BモデルはLIama3 405Bを凌駕し、GPT-4o-miniをも凌駕します。
-
オープンソースの描画プログラム Pinta 2.1 がリリースされました。WebP 形式と .NET 7 フレームワークのサポートが追加され、Wayland が改良されています。
-
PingtougeがRISC-VコアMCUチップ設計プラットフォームのオープンソース化を発表
-
優れたオープンソースのWebパフォーマンスとユーザー行動分析ツール12選