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
Copy to Clipboard Toggle word wrap

Expand
表 1.11. ExportedServiceSet 参数
参数描述
metadata:
  name:
Copy to Clipboard Toggle word wrap

将此服务公开给的 ServiceMeshPeshPeer 的名称。

必须与 ServiceMeshPeer 资源中的网格 name 值匹配。

metadata:
  namespace:
Copy to Clipboard Toggle word wrap

包含此资源的项目/命名空间的名称(应该是网格的系统命名空间)。

 
spec:
  exportRules:
  - type:
Copy to Clipboard Toggle word wrap

监管此服务的导出的规则类型。为服务找到的第一个匹配规则将用于导出。

NameSelector,LabelSelector

spec:
  exportRules:
  - type: NameSelector
    nameSelector:
      namespace:
      name:
Copy to Clipboard Toggle word wrap

要创建 NameSelector 规则,请指定服务 命名空间 以及 Service 资源中定义的服务 名称

 
spec:
  exportRules:
  - type: NameSelector
    nameSelector:
      alias:
        namespace:
        name:
Copy to Clipboard Toggle word wrap

要在为服务创建使用别名的 NameSelector 规则,在为服务指定 命名空间名称 后,请指定 命名空间 的别名以及用于服务名称的别名。

 
spec:
  exportRules:
  - type: LabelSelector
    labelSelector:
      namespace: <exportingMesh>
      selector:
        matchLabels:
          <labelKey>: <labelValue>
Copy to Clipboard Toggle word wrap

要创建 LabelSelector 规则,请指定服务的命名空间并指定 Service 资源中定义的 label。在上例中,标签是 export-service

 
spec:
  exportRules:
  - type: LabelSelector
    labelSelector:
      namespace: <exportingMesh>
      selector:
        matchLabels:
          <labelKey>: <labelValue>
      aliases:
      - namespace:
        name:
        alias:
          namespace:
          name:
Copy to Clipboard Toggle word wrap

要为服务创建使用别名的 LabelSelector 规则,在指定 选择器 后,请指定用于服务名称命名空间的别名。在上例中,所有匹配服务的命名空间别名都是 bookinfo

 

使用名称"勘误"的服务从红色的所有命名空间导出到 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
Copy to Clipboard Toggle word wrap

将 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: "*"
Copy to Clipboard Toggle word wrap

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

  1. 以具有 cluster-admin 角色的用户身份登录 OpenShift Container Platform CLI。输入以下命令。然后在提示时输入您的用户名和密码。

    $ oc login --username=<NAMEOFUSER> <API token> https://<HOSTNAME>:6443
    Copy to Clipboard Toggle word wrap
  2. 切换到安装 Service Mesh control plane 的项目,如 red-mesh-system

    $ oc project red-mesh-system
    Copy to Clipboard Toggle word wrap
  3. 根据以下示例创建 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
    Copy to Clipboard Toggle word wrap

  4. 运行以下命令,在 red-mesh-system 命名空间中上传并创建 ExportedServiceSet 资源。

    $ oc create -n <ControlPlaneNamespace> -f <ExportedServiceSet.yaml>
    Copy to Clipboard Toggle word wrap

    例如:

    $ oc create -n red-mesh-system -f export-to-green-mesh.yaml
    Copy to Clipboard Toggle word wrap
  5. 根据需要为联合网格中的每个网格对等创建额外的 ExportedServiceSets
  6. 要验证您从 red-mesh 导出的服务以使用 green-mesh 共享的服务,请运行以下命令:

    $ oc get exportedserviceset <PeerMeshExportedTo> -o yaml
    Copy to Clipboard Toggle word wrap

    例如:

    $ oc get exportedserviceset green-mesh -o yaml
    Copy to Clipboard Toggle word wrap
  7. 运行以下命令来验证红色导出与 green-mesh 共享的服务:

    $ oc get exportedserviceset <PeerMeshExportedTo> -o yaml
    Copy to Clipboard Toggle word wrap

    例如:

    $ oc -n red-mesh-system get exportedserviceset green-mesh -o yaml
    Copy to Clipboard Toggle word wrap

    从红色网格导出的服务验证与绿色网格共享的示例。

      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-bookinfo
    Copy to Clipboard Toggle word wrap

    status.exportedServices 数组列出了当前导出的服务(这些服务与 ExportedServiceSet 对象中的导出规则匹配)。数组中的每个条目都指明导出的服务的名称,以及所导出的本地服务的详细信息。

    如果缺少您要导出的服务,请确认 Service 对象存在,其名称或标签与 ExportedServiceSet 对象中定义的 exportRules 匹配,并且 Service 对象的命名空间被配置为使用 ServiceMeshMemberRollServiceMeshMember 对象作为服务网格的成员。

返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2025 Red Hat