Hierarchy Controller の概要

このドキュメントでは、Kubernetes 名前空間に階層を追加する Hierarchy Controller(Kubernetes コントローラダイナミック アドミッション コントローラ)について説明します。

階層型名前空間

Hierarchy Controller には、所有権の共通の概念を共有する名前空間のグループを管理しやすくする Kubernetes 名前空間の拡張機能である、階層型名前空間の概念が導入されています。複数のチームで共有されているクラスタでは特に便利ですが、オーナーは人である必要はありません。たとえば、Operator を一連の名前空間のオーナーにすることができます。

マルチテナントのユースケースをサポートするために、階層型名前空間には通常の Kubernetes 名前空間に加えて、2 つの主要な動作があります。

  • 委任された名前空間作成。Hierarchy Controller では、サブ名前空間というコンセプトが導入されています。これは、ユーザーがクラスタレベルの名前空間権限を持たない場合でも既存の名前空間内に作成できます。

    たとえば、Git リポジトリの Anthos Config Management でチームの名前空間を定義してから、そのサブ名前空間の作成をチームに委任できます。これにより、G Suite で変更せずに、定義したチームレベルの名前空間の下に独自のサブ名前空間を作成できます。

  • ポリシーの適用Anthos Config Management が、抽象名前空間ディレクトリから Kubernetes 名前空間にポリシー オブジェクトを伝播できるように、Hierarchy Controller はこれらのオブジェクトをサブネームスペースにさらに伝播できます。たとえば、これにより、チームのルート名前空間に適用されるポリシーがサブネームスペースにも適用されます。

    ただし、Hierarchy Controller と Anthos Config Management のポリシーの反映方法にはいくつかの違いがあります。Anthos Config Management は、抽象名前空間ディレクトリ内のすべてのオブジェクトを下位の Kubernetes 名前空間にコピーします。対照的に、Hierarchy Controller はデフォルトでは RBAC ロールとロール バインディングだけをコピーしますが、他のどのタイプの Kubernetes オブジェクトにも反映されるように構成できます。

Hierarchy Controller は Anthos Config Management バージョン 1.4.1 以降に統合されています。Hierarchy Controller は、オープンソース プロジェクトの Hierarchy Namespace Controller(HNC)に基づいています。

階層型名前空間と抽象名前空間

Hierarchy Controller によって提供される階層型名前空間は、Anthos Config Management の抽象名前空間と似ています。ただし、抽象名前空間は Anthos Config Management リポジトリにのみ存在しますが、階層型名前空間はすべて Kubernetes 名前空間であり、クラスタ上に存在します。

Anthos Config Management の抽象名前空間と Hierarchy Controller の名前空間の競合を回避するには、ルート階層以外の名前空間が Anthos Config Management リポジトリに抽象名前空間として作成されないようにします。

または、非構造化リポジトリを使用して Anthos Config Management の抽象名前空間を無効にし、Hierarchy Controller の定義とポリシーの反映のみを行います。これは、デフォルトのリポジトリ ディレクトリ構造を使用できない場合でも、階層機能を利用したい場合に便利です。

非構造化リポジトリを使用するには、サブ名前空間または完全な名前空間をチェックインします。HierarchicalConfiguration オブジェクト(こちらもチェックインする必要があります)を変更して階層関係を更新できるため、完全な名前空間を使用することをおすすめします。一方、サブ名前空間をチェックインする場合は、親の名前空間と SubnamespaceAnchor オブジェクトの両方をチェックインしますが、作成後に簡単に変更できないため注意が必要です。

どちらの場合も、必要なすべての Kubernetes オブジェクト タイプを階層全体に適用するように Hierarchy Controller を構成してください。デフォルトでは、RBAC ロールとロール バインディングのみが適用されます。

次のステップ