1.18.12. 将服务导入到联邦网格中
导入服务可让您明确指定从另一个网格导出的服务应在服务网格内访问。
您可以使用 ImportedServiceSet
资源来选择导入的服务。网格只可使用由网格 peer 导出并明确导入的服务。您没有显式导入的服务不会在网格中提供。
- 您可以根据命名空间或名称选择服务。
- 您可以使用通配符来选择服务,例如,将导出的所有服务导入到命名空间。
- 您可以使用标签选择器(可以是全局到网格)或作用于特定成员命名空间来选择用于导出的服务。
-
您可以使用别名导入服务。例如,您可以将
custom-ns/bar
服务导入为other-mesh/bar
。 -
您可以指定一个自定义域后缀,该后缀将附加到所导入服务的
name.namespace
的完全限定域名中;例如bar.other-mesh.imported.local
。
以下示例是 green-mesh 导入
通过 red-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 资源(网格系统命名空间)的命名空间名称。 | |
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: |
要在为服务创建使用别名的 |
将"bookinfo/ratings"服务从红色导入到 blue-mesh
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 命名空间中的所有服务导入到 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
导入,它是一个"hidden"服务,仅在出口网关命名空间中可见,并与导出的服务主机名相关联。默认情况下,该服务将本地作为 <export-name>.<export-namespace>.<domainSuffix>
提供,其中 domainSuffix
是 svc.<ServiceMeshPeshPeer.name>-imports.local
, 除非 importAsLocal
设置为 true
,否则 domainSuffix
为 svc.cluster.local
。如果 importAsLocal
设为 false
,则会应用导入规则中的域后缀。您可以像网格中的任何其他服务一样对待本地导入。它通过出口网关自动路由,它将重定向到导出服务的远程名称。
先决条件
-
为网格联邦配置了集群和
ServiceMeshControlPlane
。 -
具有
cluster-admin
角色的帐户。
您可以配置用于导入的服务,即使它们尚未导出。当部署并导出与 ImportedServiceSet 中指定的值匹配的服务时,它会被自动导入。
通过 CLI 操作的步骤
按照以下步骤,通过命令行创建 ImportedServiceSet
。
以具有
cluster-admin
角色的用户身份登录 OpenShift Container Platform CLI。输入以下命令。然后在提示时输入您的用户名和密码。$ oc login --username=<NAMEOFUSER> <API token> https://<HOSTNAME>:6443
切换到安装 Service Mesh control plane 的项目,如
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 命名空间中上传并创建
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
使用
importedserviceset/red-mesh' object in the 'green-mesh-system
命名空间中的 status 部分验证从红色网格导出的服务是否已导入到绿色网格中 :$ 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: ""
在上例中,仅导入 ratings 服务,如
localService
下的填充字段所示。reviews 服务可用于导入,但目前并不导入,因为它与ImportedServiceSet
对象中的任何importRules
不匹配。