1.18.11. フェデレーションメッシュからのサービスのエクスポート


サービスをエクスポートすると、メッシュは、フェデレーションされたメッシュの別のメンバーとサービスを共有できます。

Service Mesh federation exporting service illustration

ExportedServiceSet リソースを使用して、フェデレーションメッシュ内の別のピアから利用できるように指定したメッシュからサービスを宣言します。ピアと共有される各サービスを明示的に宣言する必要があります。

  • サービスは、namespace または名前別に選択できます。
  • ワイルドカードを使用してサービスを選択できます。たとえば、namespace 内のすべてのサービスをエクスポートします。
  • エイリアスを使用してサービスをエクスポートできます。たとえば、foo/bar サービスを custom-ns/bar としてエクスポートできます。
  • メッシュのシステム namespace に表示されるサービスのみをエクスポートできます。たとえば、networking.istio.io/exportTo ラベルが '.' に設定された別の namespace のサービスは、エクスポートの候補にはなりません。
  • エクスポートされたサービスの場合には、それらのターゲットサービスは、元の要求元 (他のメッシュの egress ゲートウェイや、要求元のワークロードのクライアント ID は表示されない) ではなく、ingress ゲートウェイからのトラフィックのみが表示されます。

以下の例は、 red-meshgreen-mesh にエクスポートするサービス向けです。

ExportedServiceSet リソースの例

kind: ExportedServiceSet
apiVersion: federation.maistra.io/v1
metadata:
  name: green-mesh
  namespace: red-mesh-system
spec:
  exportRules:
  # export ratings.mesh-x-bookinfo as ratings.bookinfo
  - type: NameSelector
    nameSelector:
      namespace: red-mesh-bookinfo
      name: red-ratings
      alias:
        namespace: bookinfo
        name: ratings
  # export any service in red-mesh-bookinfo namespace with label export-service=true
  - type: LabelSelector
    labelSelector:
      namespace: red-mesh-bookinfo
      selector:
        matchLabels:
          export-service: "true"
      aliases: # export all matching services as if they were in the bookinfo namespace
      - namespace: "*"
        name: "*"
        alias:
          namespace: bookinfo

表1.11 ExportedServiceSet パラメーター
パラメーター説明
metadata:
  name:

このサービスを公開する ServiceMeshPeer の名前。

ServiceMeshPeer リソースのメッシュの name 値と一致する必要があります。

metadata:
  namespace:

このリソースを含むプロジェクト/namespace の名前 (メッシュのシステム namespace を指定する必要があります)。

 
spec:
  exportRules:
  - type:

このサービスのエクスポートを管理するルールのタイプ。サービスで最初に一致するルールがエクスポートに使用されます。

NameSelector, LabelSelector

spec:
  exportRules:
  - type: NameSelector
    nameSelector:
      namespace:
      name:

NameSelector ルールを作成するには、サービスの namespace および サービスの namespaceService リソースで定義されるとおり指定します。

 
spec:
  exportRules:
  - type: NameSelector
    nameSelector:
      alias:
        namespace:
        name:

サービスの namespacename を指定した後に、namespace のエイリアスと、サービスの name として使用するエイリアスを指定し、このサービスのエイリアスに使用する NameSelector ルールを作成します。

 
spec:
  exportRules:
  - type: LabelSelector
    labelSelector:
      namespace: <exportingMesh>
      selector:
        matchLabels:
          <labelKey>: <labelValue>

LabelSelector ルールを作成するには、サービスの namespace を指定し、Service リソースで定義されている ラベル を指定します。上記の例では、ラベルは export-service です。

 
spec:
  exportRules:
  - type: LabelSelector
    labelSelector:
      namespace: <exportingMesh>
      selector:
        matchLabels:
          <labelKey>: <labelValue>
      aliases:
      - namespace:
        name:
        alias:
          namespace:
          name:

サービスのエイリアスを使用する LabelSelector ルールを作成するには、selector を指定した後で、サービスの name または namespace に使用するエイリアスを指定します。上記の例では、一致するすべてのサービスの namespace エイリアスは bookinfo です。

 

Red-mesh のすべての namespace から blue-mesh へ ratings という名前のサービスをエクスポートします。

kind: ExportedServiceSet
apiVersion: federation.maistra.io/v1
metadata:
  name: blue-mesh
  namespace: red-mesh-system
spec:
  exportRules:
  - type: NameSelector
    nameSelector:
      namespace: "*"
      name: ratings

すべてのサービスを west-data-center namespace から green-mesh にエクスポートします。

kind: ExportedServiceSet
apiVersion: federation.maistra.io/v1
metadata:
  name: green-mesh
  namespace: red-mesh-system
spec:
  exportRules:
  - type: NameSelector
    nameSelector:
      namespace: west-data-center
      name: "*"

1.18.11.1. ExportedServiceSet の作成

ExportedServiceSet リソースを作成し、メッシュピアで利用可能なサービスを明示的に宣言します。

サービスは <export-name>.<export-namespace>.svc.<ServiceMeshPeer.name>-exports.local としてエクスポートされ、ターゲットサービスに自動的にルーティングされます。これは、エクスポートメッシュでエクスポートされたサービスで認識される名前です。Ingress ゲートウェイが宛先がこの名前の要求を受信すると、エクスポートされる実際のサービスにルーティングされます。たとえば、ratings.red-mesh-bookinfo という名前のサービスが ratings.bookinfo として green-mesh にエクスポートされると、 サービスは ratings.bookinfo.svc.green-mesh-exports.local という名前でエクスポートされ、そのホスト名の ingress ゲートウェイが受信するトラフィックは ratings.red-mesh-bookinfo サービスにルーティングされます。

前提条件

  • クラスターおよび ServiceMeshControlPlane がメッシュフェデレーション用に設定されている。
  • cluster-admin ロールを持つアカウントがある。
注記

サービスがまだ存在していない場合でも、エクスポート用にサービスを設定できます。ExportedServiceSet で指定された値に一致するサービスがデプロイされ、自動的にエクスポートされます。

CLI からの手順

以下の手順に従って、コマンドラインから ExportedServiceSet を作成します。

  1. cluster-admin ロールを持つユーザーとして OpenShift Container Platform CLI にログインします。以下のコマンドを入力します。次に、プロンプトが表示されたら、ユーザー名とパスワードを入力します。

    $ oc login --username=<NAMEOFUSER> <API token> https://<HOSTNAME>:6443
  2. Service Mesh コントロールプレーンをインストールしたプロジェクト (例: red-mesh-system) に切り替えます。

    $ oc project red-mesh-system
  3. 以下の例に基づいて、ExportedServiceSet ファイルを作成します。ここでは、red-mesh がサービスを green-mesh にエクスポートします。

    red-mesh から green-mesh への ExportedServiceSet リソースの例

    apiVersion: federation.maistra.io/v1
    kind: ExportedServiceSet
    metadata:
      name: green-mesh
      namespace: red-mesh-system
    spec:
      exportRules:
      - type: NameSelector
        nameSelector:
          namespace: red-mesh-bookinfo
          name: ratings
          alias:
            namespace: bookinfo
            name: red-ratings
      - type: NameSelector
        nameSelector:
          namespace: red-mesh-bookinfo
          name: reviews

  4. 以下のコマンドを実行して、red-mesh-system namespace に ExportedServiceSet リソースをアップロードおよび作成します。

    $ oc create -n <ControlPlaneNamespace> -f <ExportedServiceSet.yaml>

    以下に例を示します。

    $ oc create -n red-mesh-system -f export-to-green-mesh.yaml
  5. フェデレーションメッシュのメッシュピアごとに、必要に応じて追加の ExportedServiceSets を作成します。
  6. red-mesh からエクスポートして green-mesh に共有したサービスを検証するには、以下のコマンドを実行します。

    $ oc get exportedserviceset <PeerMeshExportedTo> -o yaml

    以下に例を示します。

    $ oc get exportedserviceset green-mesh -o yaml
  7. 以下のコマンドを実行して、red-mesh が green-mesh と共有するためにエクスポートしたサービスを検証します。

    $ oc get exportedserviceset <PeerMeshExportedTo> -o yaml

    以下に例を示します。

    $ oc -n red-mesh-system get exportedserviceset green-mesh -o yaml

    red メッシュからエクスポートして Green メッシュに共有したサービスの検証例。

      status:
        exportedServices:
        - exportedName: red-ratings.bookinfo.svc.green-mesh-exports.local
          localService:
            hostname: ratings.red-mesh-bookinfo.svc.cluster.local
            name: ratings
            namespace: red-mesh-bookinfo
        - exportedName: reviews.red-mesh-bookinfo.svc.green-mesh-exports.local
          localService:
            hostname: reviews.red-mesh-bookinfo.svc.cluster.local
            name: reviews
            namespace: red-mesh-bookinfo

    status.exportedServices 配列では、現在エクスポートされているサービス (これらのサービスは ExportedServiceSet オブジェクト のエクスポートルールに一致) を一覧表示します。配列の各エントリーは、エクスポートされたサービスの名前と、エクスポートされたローカルサービスの詳細を示します。

    エクスポート予定のサービスがない場合には、Service オブジェクトが存在すること、その名前またはラベルが ExportedServiceSet オブジェクトで定義される exportRules と一致すること、および Service オブジェクトの namespace が ServiceMeshMemberRoll または ServiceMeshMember オブジェクトを使用してサービスメッシュのメンバーとして設定されることを確認します。

Red Hat logoGithubRedditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

© 2024 Red Hat, Inc.