Kubernetes アドミッション コントローラーは、クラスター管理に不可欠です。これらのコントローラーは主にバックグラウンドで動作し、多くはコンパイルされたプラグインとして利用できるため、デプロイメントのセキュリティを大幅に向上させることができます。 アドミッション コントローラは、API リクエストが APIServer に渡される前にそれをインターセプトし、それを禁止したり変更したりできます。これは、ほとんどの種類の Kubernetes リクエストに適用されます。アドミッション コントローラは、適切な認証と承認の後にリクエストを処理します。 通常の Kubernetes 操作のほとんどはアドミッション コントローラーに依存しているため、いくつかのアドミッション コントローラーがデフォルトで有効になっています。これらのコントローラーのほとんどは、Kubernetes ソースツリーに含まれており、プラグインとしてコンパイルされています。ただし、サードパーティのアドミッション コントローラーを作成して展開することも可能です。この問題については、後ほどいくつかの例で説明します。 アドミッションコントローラーの仕組みKubernetes コントロール プレーンは、複数のコンポーネントで構成されています。これらのコンポーネントの 1 つは、シンプルな API サーバーである kube-apiserver です。これは、ユーザー、クラスター コンポーネント、およびクライアント アプリケーションがクラスターと通信できる REST エンドポイントを公開します。一般的には、次のことを行います。
ここで、リクエストが認証された後、etcd データ ストアに変更が加えられる前にリクエストをインターセプトする必要がある状況を考えてみましょう。例えば:
Kubernetes アドミッション コントローラーは、この目的のためのプラグインです。コード レベルでは、アドミッション コントローラー ロジックは API サーバー ロジックから分離されているため、ユーザーは、etcd からオブジェクトが作成、更新、または削除されるたびに呼び出すことができるカスタム インターセプターを開発できます。 アドミッション コントローラーが配置されている場合、任意のソースから API サーバーへのリクエスト フローは次のようになります。 アドミッション コントローラは、実行する操作の種類に基づいて 3 つのタイプに分けられます。
変化: このコントローラーはリクエストを解析し、リクエストを送信する前に変更を加えることができます (リクエストを変化させます)。 例: AlwaysPullImages 検証: このコントローラーはリクエストを解析し、特定のデータに対して検証します。 例: NamespaceExists 両方: このコントローラーは、変更操作と検証操作の両方を実行できます。 例: 証明書署名 デフォルトのアドミッションコントローラKubernetes には、いくつかの組み込みアドミッション コントローラーがあります。簡単な例として、DefaultIngressClass は、まだクラスが割り当てられていない Ingress オブジェクトにデフォルトの Ingress クラスを適用します。同様に、DefaultStorageClass は、まだストレージ クラスを持たない PersistentVolumeClaims にデフォルトのストレージ クラスを適用します。ストレージ クラスに基づいて動的なストレージ プロビジョニングを許可するには、このコントローラーを有効にする必要があります。 アドミッションコントローラーはセキュリティの維持に非常に役立ちます。たとえば、マルチテナント クラスターに対するサービス拒否 (DoS) 攻撃を軽減できます。名前が示すように、制限範囲を強制する LimitRanger プラグインを検討してください。制限スコープは、名前空間ごとにリソース消費の強制スコープを定義します。これにより、テナントが互いのリソースを使い果たすことが防止されます。 もう 1 つの問題は、いわゆるイベント フラッディングです。これは、クラスターがイベントで圧倒され、他の正当な要求を適切に処理できなくなる状態です。 EventRateLimit のような状況では、コントローラーは強力な緩和ツールとなります。名前空間ごとまたはユーザーごとにイベント レートを制限できるように設計されています。 さらに、開発者がアドミッション プラグインを Webhook として実行し、実行時に構成できるようにする重要なコントローラーが 2 つあります。 MutatingAdmissionWebhook を使用すると、Webhook で送信されたリソースを変更できるようになります。これは通常、カスタムのデフォルトを適用するために使用されます。同時に、ValidatingAdmissionWebhook コントローラーにより、登録された Webhook は、最終状態の API 検証リソースを引き続き通過させるか、完全に破棄するかを決定できるようになります。 サードパーティのアドミッションコントローラKubernetes には、Open Policy Agent (OPA) Gatekeeper と Kyverno という 2 つの主要なオープン ソース ポリシー エンジンがあります。 どちらのエンジンも、クラウド ネイティブ テクノロジーの標準化と推進に取り組む Cloud Native Computing Foundation (CNCF) への寄贈品です。親組織である Linux Foundation の下で運営されています。 Kubernetes は CNCF プロジェクトであることは注目に値します。 Kyverno の主な利点は、追加の言語を学習する必要がないことです。すべてのポリシーは Kubernetes リソースとして定義されます。代わりに、Gatekeeper は OPA の宣言型言語である Rego を活用します。 Gatekeeper はより大きな OPA システムの一部ですが、Kyverno は Kubernetes のスタンドアロン プロジェクトです。全体的に見ると、Gatekeeper の方が成熟したプロジェクトですが、Kyverno の方が学習曲線が小さいです。 コントローラーの使用目的物理マシン上で複数のサービスを実行するための当初のアプローチは、仮想マシンで同じホストを共有し、ハイパーバイザーを使用してオペレーティング システムを分離することでした。洗練されたクラウド構成システム (AWS で定義されているものなど) により、システムの独立性が維持され、テナントが誤ってまたは意図的に互いに危害を加えることがなくなります。 Kubernetes はもともと、単一の組織またはユーザーが使用できる共同システムとして設計されました。さらに、他のクラウド システムよりも依存性が強くなります。ただし、Kubernetes の利用可能なデプロイメントの多様性と、より大きなクラスター サイズを処理できる能力が拡大するにつれて、単一のユーザーがシステムの操作に干渉しないようにするための戦略を導入することがますます重要になります。 このプロセスを自動化するには、組織にポリシー システムが必要です。 Kubernetes にはいくつかの組み込みサポートがありますが、フル機能の専用ポリシー エンジンの機能はありません。 カスタムアドミッションコントローラWebhook を使用すると、HTTP リクエストを処理して JavaScript Object Notation (JSON) を返すことができる任意の言語でカスタム アドミッション コントローラー ロジックを記述できます。たとえば、Go、Python、Ruby はすべて有効なオプションです。 次の例は、カスタム アドミッション コントローラーの Webhook を設定する方法を示しています。これは、リソース名前空間の制限を超える Pod のリクエストを拒否する、上記の LimitRanger に似ています。 まず、構成オブジェクトを使用して webhook を登録します。 apiバージョン: admissionregistration 。 k8s 。 io / v1beta1 これは、ValidatingWebhookController Webhook を示しています。また、アクセスするサービスと、サーバーを実行しているコンテナ上でプローブするパスも指定します。また、Webhook を呼び出すかどうかを決定するときに適用するルールも決定します。この例では、新しいポッドの作成に重点を置いています。 実際、クラスター上でのこのリソースの作成は、Webhook サーバーのデプロイメントを作成した後、最後に行われます。デプロイメントには、上記のファイルの定義に一致するサービスが含まれています。 APIバージョン: v1 以下は、通常のアプリケーションと変わらない Webhook のサンプルデプロイメントです。通信を保護するためにトランスポート層セキュリティ (TLS) を使用する方法については説明しませんが、強くお勧めします。 apiバージョン: アプリ/ v1 新しい Pod リクエストが Kubernetes に送信され、Kubernetes ValidatingWebhook を通過すると、関連情報が構成された URL パスに POST リクエストとして送信され、Webhook が処理するための JSON オブジェクトが含まれます。 正常に動作することを確認するWebhook サーバーをデプロイして構成を完了したら、テストと検証も行う必要があります。 kubectl create -f examples/.yaml を使用して Pod を作成します。最初の 2 つのケースでは、ログを確認することで Pod ランタイムのユーザー ID を確認できます。次に例を示します。 $ kubectl create -f examples / pod - テスト.yaml { もちろん、より複雑なアドミッション コントローラーをカスタマイズして、特定の Pod を非ルート ユーザーとして実行する必要があることを指定することもできます。そうでない場合、オブジェクト作成要求は拒否される可能性があります。 カスタム アドミッション コントローラーは、この例のように単純なものから、もっと複雑なものまであります。 |
<<: インフォア:業界を深く掘り下げ、顧客がより早く価値を実現できるよう支援
>>: ハイブリッドクラウドかマルチクラウドか?企業はこれらの要素を考慮すべきである
前回は「ローカルポータルの運用経験と収益モデルの共有」をさせていただきましたが、今回はオンラインとオ...
この記事では、必要なツールを選択するための詳細な参考情報を提供するために、ツールのリストをまとめてい...
今年、Green Radish と Pomegranate アルゴリズムが導入され、SEO 業界は大...
2018年最もホットなプロジェクト:テレマーケティングロボットがあなたの参加を待っています市場調査中...
Underhost のオランダのデータセンターには、2 つの特別なサーバー、「防弾サーバー」がありま...
2009 年に設立されたバングラデシュのホスティング会社である Hosteseba は、いわゆる「O...
クラウド移行、つまりデータとアプリケーションをオンサイトの IT インフラストラクチャからクラウド ...
大多数のネットユーザーの要望に応えて、dwidc(大王IDC)はダブルイレブン特別プロモーションを1...
感謝祭、ブラックフライデー、サイバーマンデーが重なるので、プロモーションには最適な時期です。まだ素晴...
現在、60% を超える組織が、新しいアプリケーションの大部分がクラウドで構築されていると報告していま...
多くの新しいウェブマスターは、Baidu Knows や有名なウェブマスターフォーラムで、「新しく立...
今週、ロシアのフラッシュセールサイトKupiVIPは、複数の大手投資家を含む3,800万ドルの資金を...
みなさんこんにちは。私は徐子宇です。先ほどの記事「3つの大きな目標を指針にウェブサイトコンテンツマー...
近年、タオバオオンラインストアのさらなる成長に伴い、タオバオオンラインストアの数は企業ウェブサイトの...