先ほど、OPA ポリシーの自動同期を完了するために kube-mgmt サイドカー コンテナの使用を紹介しました。さらに、より高度なツールである Gatekeeper もあります。以前のモードと比較して、Gatekeeper (v3.0) アドミッション コントローラは OPA 制約フレームワークを統合して CRD ベースのポリシーを実行し、宣言的に構成されたポリシーを確実に共有できるようにします。これは、アドミッション制御と監査機能の検証と変更を提供する kubebuilder を使用して構築されています。これにより、Rego ポリシーのポリシー テンプレートを作成し、ポリシーを CRD として作成し、監査結果をポリシー CRD に保存できるようになります。このプロジェクトは、Google、Microsoft、Red Hat、Styra の共同プロジェクトです。 Gatekeeper をインストールするには、次のコマンドを使用します。 ➜ kubectl apply -f https://raw.githubusercontent.com/open-policy-agent/gatekeeper/release-3.7/deploy/gatekeeper.yaml デフォルトでは、Gatekeeper は gatekeeper-system 名前空間にインストールされ、関連する CRD もいくつかインストールされます。 ➜ kubectl get pods - n ゲートキーパー- システム Gatekeeper は、OPA 制約フレームワークを使用してポリシーを記述および適用します。制約を定義する前に、制約を適用する Rego と制約モードを記述する ConstraintTemplate オブジェクトをまず定義する必要があります。制約のスキーマを使用すると、管理者は関数のパラメータと同様に、制約の動作を微調整できます。 以下は、検証対象のオブジェクトに存在する必要があるラベルを記述する制約テンプレートです。 # k8s 必須ラベルテンプレート.yaml 上記の ConstraintTemplate リソース リストを直接適用します。 ➜ kubectl apply -f k8srequiredlabels_template .yaml 上記で定義した ConstraintTemplate オブジェクトはテンプレートです。 crd 部分は、定義した CRD テンプレートを記述します。たとえば、タイプは K8sRequiredLabels と呼ばれ、テンプレートの名前と一致する必要があります。次に、次の検証を通じて CRD の属性スキーマが定義されます。たとえば、文字列データ型に似た labels 属性パラメータがあります。 クレジット: 次に、その下のターゲット セクションは、Rego を使用して記述された定義済みの制約ターゲットです。
上記の制約テンプレートが作成されると、実際には、という名前の K8sRequiredLabels オブジェクトを作成することと同等になり、定義したプロパティは spec.parameters プロパティの下にあります。 ➜ kubectlでK8sRequiredLabels を取得する これで、上記の K8sRequiredLabels 制約テンプレートを使用してポリシーを定義できます。たとえば、すべての名前空間でゲートキーパー ラベルを定義する必要がある場合は、次のようにオブジェクトを作成できます。 # all_ns_must_have_gatekeeper .yaml 指定された制約が適用されるオブジェクトの範囲を定義する一致フィールドに注意してください。 kind: ["Namespace"] は、名前空間を作成するときにこの制約が適用されることを意味します。他のマッチャーもサポートされています:
以下のparameters.labelsは、上記のCRD仕様に従って定義されたプロパティです。値は opa に渡されるパラメータです。ここでは、キーラベルと値をリストとして持つ辞書を表します。 ConstraintTemplate のプロパティと一致する必要があります。ここでは、作成するオブジェクトにゲートキーパー ラベルが含まれている必要があることを意味します。 上記のリソース オブジェクトを直接適用するだけです。 ➜ kubectl apply -f all_ns_must_have_gatekeeper .yaml 作成後、制約オブジェクトを表示できます。 ➜ kubectl でk8s の必須ラベルを取得します Gatekeeper には監査機能があるため、クラスター内で強制されている制約に従ってリソースを定期的に評価し、既存の誤った構成を検出できます。 Gatekeeper は、監査結果を、関連する制約のステータス フィールドにリストされた違反として保存します。 K8sRequiredLabels オブジェクトのステータス フィールドを表示して、制約を満たさない動作を確認できます。 ➜ kubectl は制約ns - must - have - gk - o yaml を取得します たとえば、次のように名前空間を作成します。 # テスト- namespace.yaml キー gatekeeper を含むラベルを名前空間に追加しないと、作成時にエラーが報告されます。 サーバーからのエラー([ ns - must - have - gk ] ラベルを指定する必要があります: { "gatekeeper" }): "test-namespace.yaml" の作成中にエラーが発生しました: アドミッションWebhook "validation.gatekeeper.sh" がリクエストを拒否しました: [ ns - must - have - gk ] ラベルを指定する必要があります: { "gatekeeper" } 次に、gatekeeper: abc の行のコメントを解除すると、正常に作成されます。これが Gatekeeper の基本的な使い方です。 上記から、制約テンプレートを定義する戦略では、多くの場合、入力オブジェクトからデータを取得することがわかりますが、独自の制約を作成する必要があり、渡される入力パラメータがわからない場合は、すべてのリクエストを拒否し、リクエスト オブジェクトを拒否メッセージとして出力する制約/テンプレートを使用するのが簡単な方法です。テンプレートを作成するときに、違反する行は 1 行だけ残すことができます: msg := sprintf("input: %v", [input])。この場合、オブジェクトの作成は失敗し、すべての入力情報を含む出力エラー メッセージが取得されます。その後、Rego 構文を通じて必要なデータを取得できます。 apiバージョン: テンプレート。 ゲートキーパー。 sh / v1 制約テンプレートまたはポリシー ライブラリにはある程度の普遍性があるため、OPA Gatekeeper コミュニティは、多数のユニバーサル制約テンプレートを含むユニバーサル ポリシー ライブラリ (https://github.com/open-policy-agent/gatekeeper-library) を提供しています。 各テンプレート ライブラリには、制約テンプレートを記述する template.yaml ファイルが含まれています。サンプル ディレクトリには、特定の制約オブジェクトとサンプル リソース リストが含まれています。これらの戦略は、Rego 言語を学ぶための良い例でもあります。 |
<<: エッジ コンピューティングはクラウド コンピューティングよりも優れている点は何ですか?ついに誰かが明らかにした
>>: クラウド ネイティブ戦略を拡大するための手順は何ですか?
今夜、私はベッドの中で寝返りを打ちながら、インターネットビジネスを始めたときの経験を思い返しました。...
SEO は現在、活発な発展期に入っています。大規模なサイトから草の根のウェブマスターまで、ますます多...
左が李建成、右が李斌。 「垂直検索」というと、まず思い浮かぶのは、Yitao、Yiqisou、Woc...
[51CTO.comより引用] 2020年、観光、飲食、映画・テレビ劇場など、多くの業界がCOVID...
COVID-19パンデミックの影響により、オンライン電子商取引業界は急速に発展しました。コミュニティ...
検索エンジンの新規サイトレビュー期間が主な理由で、新しいサイトが上位にランクされるのは難しいことは誰...
検索エンジンの発展に伴い、企業は徐々にオンライン市場に注目するようになり、多くの企業が独自の企業ウェ...
「OpenStackとクラウドコンピューティングは成熟し、企業や通信ユーザーが大量に導入し始めていま...
「他の人がこうしているから、私もそうしなくてはいけない」。ほとんどのウェブサイトがSEO最適化を使用...
最近、ある読者から、競合他社のネガティブ SEO のターゲットにならないようにするにはどうしたらよい...
最近、北京華雲安情報技術有限公司は、ナレッジグラフと人工知能に基づく中国初の脆弱性管理ソリューション...
多くの個人がウェブサイトを構築してサーバーを選択する際、基本的に暗黙の了解で香港サーバーを選択します...
過去20年間、中国のインターネットビジネスは、プラットフォームパラダイムとアルゴリズムパラダイムから...
Google の公式セキュリティ ブログによると、Google は、フランス情報システムセキュリティ...
なぜこの記事を書くのですか?まず、キャッシュは、その高い同時実行性と高いパフォーマンスにより、プロジ...