1.18.11. 从联邦网格导出服务
导出服务允许网格与联邦网格的另一个成员共享一个或多个服务。
您可以使用 ExportedServiceSet 资源,在一个网格中声明您要提供给联邦网格中的另一个对等点的服务。您必须明确声明每个服务要与同级服务器共享。
- 您可以根据命名空间或名称选择服务。
- 您可以使用通配符来选择服务;例如,导出命名空间中的所有服务。
-
您可以使用别名导出服务。例如,您可以将
foo/bar服务导出为custom-ns/bar。 -
您只能导出对网格系统命名空间可见的服务。例如:在另一个命名空间中,将
networking.istio.io/exportTo标签设置为 '.' 的服务不会是导出的候选者。 - 对于导出的服务,它们的目标服务将只看到来自入口网关的流量,而不是原始请求者(即,它们不会看到来自其他网格的出口网关的客户端 ID 或源自请求的工作负载)
以下示例是 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
| 参数 | 描述 | 值 |
|---|---|---|
| 将此服务公开给的 ServiceMeshPeshPeer 的名称。 |
必须与 |
| 包含此资源的项目/命名空间的名称(应该是网格的系统命名空间)。 | |
| 监管此服务的导出的规则类型。为服务找到的第一个匹配规则将用于导出。 |
|
|
要创建 | |
|
要在为服务创建使用别名的 | |
|
要创建 | |
|
要为服务创建使用别名的 |
使用名称"勘误"的服务从红色的所有命名空间导出到 blue-mesh。
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 命名空间中的所有服务导出到 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,它将自动路由到目标服务。这是导出的服务在导出网格中已知的名称。当入口网关收到用于此名称的请求时,它将被路由到要导出的实际服务。例如,如果名为 ratings.red-mesh-bookinfo 的服务导出至 green-mesh 作为 ratings.bookinfo,则服务将导出为 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 control plane 的项目,如
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 命名空间中上传并创建
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运行以下命令来验证红色导出与 green-mesh 共享的服务:
$ oc get exportedserviceset <PeerMeshExportedTo> -o yaml例如:
$ oc -n red-mesh-system get exportedserviceset green-mesh -o yaml从红色网格导出的服务验证与绿色网格共享的示例。
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 对象中的导出规则匹配)。数组中的每个条目都指明导出的服务的名称,以及所导出的本地服务的详细信息。如果缺少您要导出的服务,请确认 Service 对象存在,其名称或标签与
ExportedServiceSet对象中定义的exportRules匹配,并且 Service 对象的命名空间被配置为使用ServiceMeshMemberRoll或ServiceMeshMember对象作为服务网格的成员。