1.18.12. サービスのフェデレーションメッシュへのインポート
サービスをインポートすると、別のメッシュからエクスポートされたサービスの内、サービスメッシュ内でアクセスできるものを明示的に指定できます。
ImportedServiceSet
リソースを使用して、インポートするサービスを選択します。メッシュピアによってエクスポートされ、明示的にインポートされるサービスのみがメッシュで利用できます。明示的にインポートしない場合には、サービスは、メッシュ内で利用できません。
- サービスは、namespace または名前別に選択できます。
- namespace にエクスポートされたすべてのサービスをインポートするなど、ワイルドカードを使用してサービスを選択できます。
- メッシュにグローバルであるか、特定のメンバーの namespace の範囲内にあるラベルセレクターを使用してエクスポートするサービスを選択できます。
-
エイリアスを使用してサービスをインポートできます。たとえば、
custom-ns/bar
サービスをother-mesh/bar
としてインポートできます。 -
カスタムドメイン接尾辞を指定できます。これは、
bar.other-mesh.imported.local
など、インポートされたサービスのname.namespace
に、完全修飾ドメイン名として追加されます。
以下の例は、red-mesh
でエクスポートされたサービスをインポートする green-mesh
の例です。
ImportedServiceSet の例
kind: ImportedServiceSet apiVersion: federation.maistra.io/v1 metadata: name: red-mesh #name of mesh that exported the service namespace: green-mesh-system #mesh namespace that service is being imported into spec: importRules: # first matching rule is used # import ratings.bookinfo as ratings.bookinfo - type: NameSelector importAsLocal: false nameSelector: namespace: bookinfo name: ratings alias: # service will be imported as ratings.bookinfo.svc.red-mesh-imports.local namespace: bookinfo name: ratings
パラメーター | 説明 | 値 |
---|---|---|
metadata: name: | サービスをフェデレーションメッシュにエクスポートした ServiceMeshPeer の名前。 | |
metadata: namespace: | ServiceMeshPeer リソース (メッシュシステム namespace) を含む namespace の名前。 | |
spec: importRules: - type: | サービスのインポートを管理するルールのタイプ。サービスで最初に一致するルールがインポートに使用されます。 |
|
spec: importRules: - type: NameSelector nameSelector: namespace: name: |
| |
spec: importRules: - type: NameSelector importAsLocal: |
リモートエンドポイントをローカルサービスで集約するには、 |
|
spec: importRules: - type: NameSelector nameSelector: namespace: name: alias: namespace: name: |
サービスの |
red-mesh から blue-mesh への "bookinfo/ratings" サービスのインポート
kind: ImportedServiceSet apiVersion: federation.maistra.io/v1 metadata: name: red-mesh namespace: blue-mesh-system spec: importRules: - type: NameSelector importAsLocal: false nameSelector: namespace: bookinfo name: ratings
Red-mesh の west-data-center namespace からすべてのサービスを green-mesh にインポートします。これらのサービスは、<name>.west-data-center.svc.red-mesh-imports.local としてアクセスできます。
kind: ImportedServiceSet apiVersion: federation.maistra.io/v1 metadata: name: red-mesh namespace: green-mesh-system spec: importRules: - type: NameSelector importAsLocal: false nameSelector: namespace: west-data-center name: "*"
1.18.12.1. ImportedServiceSet の作成
ImportedServiceSet
リソースを作成し、メッシュにインポートするサービスを明示的に宣言します。
サービスは、<exported-name>.<exported-namespace>.svc.<ServiceMeshPeer.name>.remote
という名前でインポートされます。これは非表示のサービスで、egress ゲートウェイ namespace にのみ表示され、エクスポートされたサービスのホスト名に関連付けられます。このサービスは、ローカルから <export-name>.<export-namespace>.<domainSuffix>
として利用可能になります。ここでは、importAsLocal
が true
に設定されていない限り、domainSuffix
はデフォルトで svc.<ServiceMeshPeer.name>-imports.local
となっています。True の場合には、domainSuffix
は svc.cluster.local
となります。ImportAsLocal
が false
に設定されている場合には、インポートルールのドメイン接尾辞が適用されます。ローカルインポートは、メッシュ内の他のサービスと同様に扱うことができます。これは egress ゲートウェイを介して自動的にルーティングされ、エクスポートされたサービスのリモート名にリダイレクトされます。
前提条件
-
クラスターおよび
ServiceMeshControlPlane
がメッシュフェデレーション用に設定されている。 -
cluster-admin
ロールを持つアカウントがある。
サービスがまだエクスポートされていない場合でも、インポートするように設定できます。ImportedServiceSet で指定された値に一致するサービスがデプロイされてエクスポートされると、これは自動的にインポートされます。
CLI からの手順
この手順に従って、コマンドラインから ImportedServiceSet
を作成します。
cluster-admin
ロールを持つユーザーとして OpenShift Container Platform CLI にログインします。以下のコマンドを入力します。次に、プロンプトが表示されたら、ユーザー名とパスワードを入力します。$ oc login --username=<NAMEOFUSER> <API token> https://<HOSTNAME>:6443
Service Mesh コントロールプレーンをインストールしたプロジェクト (例:
green-mesh-system
) に切り替えます。$ oc project green-mesh-system
以下の例に基づいて
ImportedServiceSet
ファイルを作成します。ここでは、green-mesh
が、red-mesh
によって以前にエクスポートされたサービスをインポートします。red-mesh から green-mesh への ImportedServiceSet リソースの例
kind: ImportedServiceSet apiVersion: federation.maistra.io/v1 metadata: name: red-mesh namespace: green-mesh-system spec: importRules: - type: NameSelector importAsLocal: false nameSelector: namespace: bookinfo name: red-ratings alias: namespace: bookinfo name: ratings
以下のコマンドを実行して、green-mesh-system namespace に
ImportedServiceSet
リソースをアップロードおよび作成します。$ oc create -n <ControlPlaneNamespace> -f <ImportedServiceSet.yaml>
以下に例を示します。
$ oc create -n green-mesh-system -f import-from-red-mesh.yaml
-
フェデレーションメッシュ内のメッシュピアごとに、必要に応じて追加の
ImportedServiceSet
リソースを作成します。 green-mesh
にインポートしたサービスを検証するには、以下のコマンドを実行します。$ oc get importedserviceset <PeerMeshImportedInto> -o yaml
以下に例を示します。
$ oc get importedserviceset green-mesh -o yaml
以下のコマンドを実行して、メッシュにインポートされたサービスを検証します。
$ oc get importedserviceset <PeerMeshImportedInto> -o yaml
red mesh からエクスポートされたサービスが
'green-mesh-system namespace の importedserviceset/red-mesh' オブジェクト
のステータスセクションを使用して、green メッシュにインポートされていることを検証する例:$ oc -n green-mesh-system get importedserviceset/red-mesh -o yaml
status: importedServices: - exportedName: red-ratings.bookinfo.svc.green-mesh-exports.local localService: hostname: ratings.bookinfo.svc.red-mesh-imports.local name: ratings namespace: bookinfo - exportedName: reviews.red-mesh-bookinfo.svc.green-mesh-exports.local localService: hostname: "" name: "" namespace: ""
上記の例では、
localService
の入力済みフィールドで示されているように、ratings サービスのみがインポートされます。Reviews サービスはインポートできますが、ImportedServiceSet
オブジェクトのimportRules
と一致しないため、現時点ではインポートされません。