2.20.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
| パラメーター | 説明 | 値 |
|---|---|---|
| このサービスを公開する ServiceMeshPeer の名前。 |
|
| このリソースを含むプロジェクト/namespace の名前 (メッシュのシステム namespace を指定する必要があります)。 | |
| このサービスのエクスポートを管理するルールのタイプ。サービスで最初に一致するルールがエクスポートに使用されます。 |
|
|
| |
|
サービスの | |
|
| |
|
サービスのエイリアスを使用する |
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: "*"
2.20.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 サービスにルーティングされます。
importAsLocal パラメーターを true に設定して、リモートエンドポイントをローカルサービスで集約する場合は、サービスのエイリアスを使用する必要があります。パラメーターを false に設定した場合、エイリアスは必要ありません。
前提条件
-
クラスターおよび
ServiceMeshControlPlaneがメッシュフェデレーション用に設定されている。 -
cluster-adminロールを持つアカウントがある。
サービスがまだ存在していない場合でも、エクスポート用にサービスを設定できます。ExportedServiceSet で指定された値に一致するサービスがデプロイされ、自動的にエクスポートされます。
CLI からの手順
以下の手順に従って、コマンドラインから ExportedServiceSet を作成します。
cluster-adminロールを持つユーザーとして OpenShift Container Platform CLI にログインします。以下のコマンドを入力します。次に、プロンプトが表示されたら、ユーザー名とパスワードを入力します。$ oc login --username=<NAMEOFUSER> <API token> https://<HOSTNAME>:6443Service 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 -n red-mesh-system get exportedserviceset green-mesh -o yamlred メッシュからエクスポートして 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-bookinfostatus.exportedServices配列には、現在エクスポートされているサービスがリストされます (これらのサービスがExportedServiceSet objectのエクスポートルールと一致しました)。配列の各エントリーは、エクスポートされたサービスの名前と、エクスポートされたローカルサービスの詳細を示します。エクスポート予定のサービスがない場合は、Service オブジェクトが存在すること、その名前またはラベルが
ExportedServiceSetオブジェクトで定義されるexportRulesと一致すること、および Service オブジェクトの namespace がServiceMeshMemberRollまたはServiceMeshMemberオブジェクトを使用して Service Mesh のメンバーとして設定されることを確認します。