1.18.11. フェデレーションメッシュからのサービスのエクスポート
サービスをエクスポートすると、メッシュは、フェデレーションされたメッシュの別のメンバーとサービスを共有できます。
ExportedServiceSet
リソースを使用して、フェデレーションメッシュ内の別のピアから利用できるように指定したメッシュからサービスを宣言します。ピアと共有される各サービスを明示的に宣言する必要があります。
- サービスは、namespace または名前別に選択できます。
- ワイルドカードを使用してサービスを選択できます。たとえば、namespace 内のすべてのサービスをエクスポートします。
-
エイリアスを使用してサービスをエクスポートできます。たとえば、
foo/bar
サービスをcustom-ns/bar
としてエクスポートできます。 -
メッシュのシステム namespace に表示されるサービスのみをエクスポートできます。たとえば、
networking.istio.io/exportTo
ラベルが '.' に設定された別の namespace のサービスは、エクスポートの候補にはなりません。 - エクスポートされたサービスの場合には、それらのターゲットサービスは、元の要求元 (他のメッシュの egress ゲートウェイや、要求元のワークロードのクライアント ID は表示されない) ではなく、ingress ゲートウェイからのトラフィックのみが表示されます。
以下の例は、 red-mesh
が green-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
パラメーター | 説明 | 値 |
---|---|---|
metadata: name: | このサービスを公開する ServiceMeshPeer の名前。 |
|
metadata: namespace: | このリソースを含むプロジェクト/namespace の名前 (メッシュのシステム namespace を指定する必要があります)。 | |
spec: exportRules: - type: | このサービスのエクスポートを管理するルールのタイプ。サービスで最初に一致するルールがエクスポートに使用されます。 |
|
spec: exportRules: - type: NameSelector nameSelector: namespace: name: |
| |
spec: exportRules: - type: NameSelector nameSelector: alias: namespace: name: |
サービスの | |
spec: exportRules: - type: LabelSelector labelSelector: namespace: <exportingMesh> selector: matchLabels: <labelKey>: <labelValue> |
| |
spec: exportRules: - type: LabelSelector labelSelector: namespace: <exportingMesh> selector: matchLabels: <labelKey>: <labelValue> aliases: - namespace: name: alias: namespace: name: |
サービスのエイリアスを使用する |
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
を作成します。
cluster-admin
ロールを持つユーザーとして OpenShift Container Platform CLI にログインします。以下のコマンドを入力します。次に、プロンプトが表示されたら、ユーザー名とパスワードを入力します。$ oc login --username=<NAMEOFUSER> <API token> https://<HOSTNAME>:6443
Service Mesh コントロールプレーンをインストールしたプロジェクト (例:
red-mesh-system
) に切り替えます。$ oc project red-mesh-system
以下の例に基づいて、
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
以下のコマンドを実行して、red-mesh-system namespace に
ExportedServiceSet
リソースをアップロードおよび作成します。$ oc create -n <ControlPlaneNamespace> -f <ExportedServiceSet.yaml>
以下に例を示します。
$ oc create -n red-mesh-system -f export-to-green-mesh.yaml
-
フェデレーションメッシュのメッシュピアごとに、必要に応じて追加の
ExportedServiceSets
を作成します。 red-mesh
からエクスポートしてgreen-mesh
に共有したサービスを検証するには、以下のコマンドを実行します。$ oc get exportedserviceset <PeerMeshExportedTo> -o yaml
以下に例を示します。
$ oc get exportedserviceset green-mesh -o yaml
以下のコマンドを実行して、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
オブジェクトを使用してサービスメッシュのメンバーとして設定されることを確認します。