ディスカバリーセレクターを使用してIstioサービスメッシュのネームスペースを設定する

ディスカバリーセレクターの使用方法と、Sidecarリソースとの関係について説明します。

2021年4月30日 | 執筆者:Lin Sun - Solo.io、Christian Posta - Solo.io、Harvey Xia - Solo.io

ユーザーがサービスをIstioサービスメッシュで実行するように移行すると、コントロールプレーンがデフォルトでクラスター内のすべてのネームスペースからすべてのKubernetesリソースを監視および処理することに驚くことがよくあります。これは、ネームスペースとデプロイメントが多数存在する非常に大規模なクラスター、またはリソースの変更が急速に行われる中規模のクラスター(たとえば、Sparkジョブ)では問題になる可能性があります。

コミュニティSolo.ioの大規模顧客の両方で、Istioコントロールプレーンがこれらのネームスペースのリソースのみを処理するように、メッシュの一部であるネームスペースのセットを動的に制限する方法が必要です。ネームスペースを制限する機能により、Istiodはより少ないリソースと関連する変更を監視してサイドカーにプッシュできるため、コントロールプレーンとデータプレーンの全体的なパフォーマンスが向上します。

背景

デフォルトでは、Istioはクラスター内のすべてのネームスペース、サービス、エンドポイント、およびPodを監視します。たとえば、Kubernetesクラスターでは、`default`ネームスペースに`sleep`サービスを、`ns-x`ネームスペースに`httpbin`サービスをデプロイしました。 `sleep`サービスはメッシュに追加しましたが、`httpbin`サービスをメッシュに追加したり、メッシュ内のサービスを`httpbin`サービスと対話させたりする予定はありません。

`istioctl proxy-config endpoint`コマンドを使用して、`sleep`デプロイメントのすべてのエンドポイントを表示します

Endpoints for Sleep Deployment
Sleepデプロイメントのエンドポイント

`ns-x`ネームスペースの`httpbin`サービスエンドポイントが、検出されたエンドポイントのリストに含まれていることに注意してください。サービスが少数の場合、これは問題にならない可能性があります。ただし、Istioサービスメッシュで実行されているサービスと対話しないサービスが数百ある場合、Istioコントロールプレーンがこれらのサービスを監視して、メッシュ内のサービスのサイドカーに情報を送信することは望ましくないでしょう。

ディスカバリーセレクターの紹介

Istio 1.10以降、MeshConfigに新しい`discoverySelectors`オプションが導入されました。これは、Kubernetesのセレクターの配列です。正確なタイプはこちらで定義されている`[]LabelSelector`であり、単純なセレクターとセットベースのセレクターの両方が可能です。これらのセレクターは、ネームスペースのラベルに適用されます。

さまざまなユースケースを表現するために、各ラベルセレクターを設定できます。以下はその例です。

注:`discoverySelectors`はセキュリティ境界ではありません。 `discoverySelectors`を設定した場合でも、Istiodはすべてのネームスペースにアクセスできます。

ディスカバリーセレクターの動作

サービスメッシュの一部として含めるネームスペースがわかっている場合、メッシュ管理者は、インストール時またはインストール後に、目的のディスカバリーセレクターをIstioのMeshConfigリソースに追加することで、`discoverySelectors`を設定できます。たとえば、`istio-discovery=enabled`ラベルが付いたネームスペースのみを検出するようにIstioを設定できます。

  1. 前の例を使用して、`default`ネームスペースに`istio-discovery=enabled`ラベルを付けましょう。

    $ kubectl label namespace default istio-discovery=enabled
    
  2. `discoverySelectors`を含むyamlを`istioctl`を使用して適用し、Istioインストールを更新します. 安定した環境への影響を避けるため、Istioインストールには別のリビジョンを使用することをお勧めします.

    $ istioctl install --skip-confirmation -f - <<EOF
    apiVersion: install.istio.io/v1alpha1
    kind: IstioOperator
    metadata:
    namespace: istio-system
    spec:
    # You may override parts of meshconfig by uncommenting the following lines.
      meshConfig:
        discoverySelectors:
          - matchLabels:
              istio-discovery: enabled
    EOF
    
  3. `sleep`デプロイメントのエンドポイント設定を表示します

    Endpoints for Sleep Deployment With Discovery Selectors
    ディスカバリーセレクターを使用したSleepデプロイメントのエンドポイント

    今回は、`ns-x`ネームスペースの`httpbin`サービスが、`default`ネームスペースにない他の多くのサービスとともに、検出されたエンドポイントのリストに含まれていないことに注意してください。 `sleep`デプロイメントのルート(またはクラスターまたはリスナー)情報を表示すると、返される設定がはるかに少ないことにも気付くでしょう

    Routes for Sleep Deployment With Discovery Selectors
    ディスカバリーセレクターを使用したSleepデプロイメントのルート

`matchLabels`を使用してANDセマンティクスで複数のラベルを設定したり、`matchLabels`セットを使用して複数のラベル間でORセマンティクスを設定したりできます。異なるラベルセットを持つネームスペースにサービスまたはPodをデプロイする場合でも、組織内の複数のアプリケーションチームが異なるラベル付け規則を使用する場合でも、`discoverySelectors`は必要な柔軟性を提供します。さらに、ドキュメントに従って、`matchLabels`と`matchExpressions`を一緒に使用できます。セレクターのセマンティクスの詳細については、Kubernetesセレクターのドキュメントを参照してください。

ディスカバリーセレクターとSidecarリソース

`discoverySelectors`設定により、ユーザーはメッシュの一部であるネームスペースのセットを動的に制限できます。 Sidecarリソースは、サイドカー設定の可視性とサイドカープロキシにプッシュされる内容も制御します。それらの違いは何ですか?

`discoverySelectors`はSidecarリソースと一緒に使用できます。 `discoverySelectors`を使用して、Istioコントロールプレーンが監視および処理するネームスペースをメッシュワイドレベルで設定できます。 Istioサービスメッシュのこれらのネームスペースでは、グローバルまたはネームスペースごとにSidecarリソースを作成して、サイドカープロキシにプッシュされる内容をさらに制御できます。以下の図に示すように、`ns-y`ネームスペースに`Bookinfo`サービスをメッシュに追加してみましょう。 `discoverySelectors`を使用すると、`default`と`ns-y`ネームスペースがメッシュの一部であると定義できます。 `sleep`サービスが`default`ネームスペース以外を認識しないようにするにはどうすればよいでしょうか? `default`ネームスペースのSidecarリソースを追加することにより、`sleep`サイドカーが現在のネームスペースとその他の必要なネームスペースに関連付けられたクラスター/ルート/リスナー/エンドポイントのみを表示するように効果的に設定できます。

Discovery Selectors vs Sidecar Resource
ディスカバリーセレクターとSidecarリソース

まとめ

ディスカバリーセレクターは、Istioコントロールプレーンが特定のネームスペースのみを監視および処理するように調整するための強力な設定です。 Kubernetesクラスター内のすべてのネームスペースをサービスメッシュの一部にしたくない場合、またはKubernetesクラスター内に複数のIstioサービスメッシュがある場合は、この設定を検討し、Istio slackまたはGitHubでフィードバックをお寄せください。

この記事を共有する