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
| 参数 | 描述 | 值 |
|---|---|---|
| 将服务导出到联邦网格的 ServiceMeshPeer 的名称。 | |
| 包含 ServiceMeshPeer 资源(网格系统命名空间)的命名空间名称。 | |
| 监管该服务导入的规则类型。为服务找到的第一个匹配规则将用于导入。 |
|
|
要创建 | |
|
设置为 |
|
|
要在为服务创建使用别名的 |
将"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 yamlstatus: 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不匹配。