シングルクラスタへのIstioコントロールプレーンの複数インストール
このガイドでは、シングルクラスタ内に複数のIstioコントロールプレーンをインストールし、ワークロードを特定のコントロールプレーンにスコープする方法について説明します。このデプロイモデルでは、複数のIstioコントロールプレーンとメッシュを持つ単一のKubernetesコントロールプレーンを使用します。メッシュ間の分離は、Kubernetes名前空間とRBACによって提供されます。
discoverySelectors
を使用すると、Istioコントロールプレーンによって管理される特定のネームスペースに、クラスタ内のKubernetesリソースのスコープを限定できます。これには、メッシュの構成に使用されるIstioカスタムリソース(例:Gateway、VirtualService、DestinationRuleなど)も含まれます。さらに、discoverySelectors
を使用して、特定のIstioコントロールプレーンに対して、どのネームスペースにistio-ca-root-cert
config mapを含めるべきかを構成できます。これらの機能を組み合わせることで、メッシュオペレータは特定のコントロールプレーンに対するネームスペースを指定でき、1つ以上のネームスペースの境界に基づいて、複数のメッシュのソフトマルチテナント化が可能になります。このガイドでは、Istioのリビジョン機能とともにdiscoverySelectors
を使用して、各々がクラスタのリソースの適切なサブセットで動作する2つのメッシュを単一クラスタにデプロイする方法を説明します。
始める前に
このガイドでは、以下のいずれかのサポートされているKubernetesバージョン:1.28、1.29、1.30、1.31を搭載したKubernetesクラスタが必要です。
このクラスタには、2つの異なるシステムネームスペースにインストールされた2つのコントロールプレーンがホストされます。メッシュアプリケーションのワークロードは、複数のアプリケーション固有のネームスペースで実行され、各ネームスペースは、リビジョンとディスカバリセレクタの構成に基づいて、一方またはもう一方のコントロールプレーンに関連付けられます。
クラスタ設定
複数コントロールプレーンのデプロイ
単一クラスタへの複数Istioコントロールプレーンのデプロイは、各コントロールプレーンに異なるシステムネームスペースを使用することで実現できます。IstioのリビジョンとdiscoverySelectors
を使用して、各コントロールプレーンによって管理されるリソースとワークロードのスコープを限定します。
最初のシステムネームスペース
usergroup-1
を作成し、そこにistiodをデプロイします。2番目のシステムネームスペース
usergroup-2
を作成し、そこにistiodをデプロイします。usergroup-1
ネームスペース内のワークロードが相互TLSトラフィックのみを受け入れるように、ポリシーをデプロイします。usergroup-2
ネームスペース内のワークロードが相互TLSトラフィックのみを受け入れるように、ポリシーをデプロイします。
複数コントロールプレーンの作成の検証
各コントロールプレーンのシステムネームスペースのラベルを確認します。
コントロールプレーンがデプロイされ、実行されていることを確認します。
ユーザーグループごとに1つのistiodデプロイメントが指定されたネームスペースに作成されていることに気付くでしょう。
インストール済みのWebhookを一覧表示するには、次のコマンドを実行します。
出力には、
istiod-default-validator
とistio-revision-tag-default-usergroup-1
が含まれています。これらは、リビジョンに関連付けられていないリソースからのリクエストを処理するために使用されるデフォルトのWebhook構成です。すべてのコントロールプレーンが適切なネームスペースのラベル付けを通じてリソースに関連付けられている完全にスコープされた環境では、これらのデフォルトのWebhook構成は必要ありません。これらは呼び出されるべきではありません。
ユーザーグループごとのアプリケーションワークロードのデプロイ
3つのアプリケーションネームスペースを作成します。
各ネームスペースにラベルを付け、それぞれのコントロールプレーンに関連付けます。
ネームスペースごとに1つの
curl
とhttpbin
アプリケーションをデプロイします。サイドアカーが注入された状態で
httpbin
とcurl
ポッドが実行されるまで、数秒間待ちます。
アプリケーションとコントロールプレーンのマッピングの検証
アプリケーションがデプロイされたので、istioctl ps
コマンドを使用して、アプリケーションワークロードがそれぞれのコントロールプレーンによって管理されていることを確認できます(つまり、app-ns-1
はusergroup-1
によって、app-ns-2
とapp-ns-3
はusergroup-2
によって管理されています)。
アプリケーションの接続がそれぞれのユーザーグループ内でのみ行われることの検証
usergroup-1
のapp-ns-1
内のcurl
ポッドから、usergroup-2
のapp-ns-2
内のhttpbin
サービスへのリクエストを送信します。通信は失敗するはずです。usergroup-2
のapp-ns-2
内のcurl
ポッドから、usergroup-2
のapp-ns-3
内のhttpbin
サービスへのリクエストを送信します。通信は成功するはずです。
クリーンアップ
最初のユーザーグループをクリーンアップします。
2番目のユーザーグループをクリーンアップします。