1.18.12. 将服务导入到联邦网格中


导入服务可让您明确指定从另一个网格导出的服务应在服务网格内访问。

Service Mesh 联邦导入服务图

您可以使用 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

表 1.12. ImportedServiceSet 参数
参数描述
metadata:
  name:

将服务导出到联邦网格的 ServiceMeshPeer 的名称。

 
metadata:
  namespace:

包含 ServiceMeshPeer 资源(网格系统命名空间)的命名空间名称。

 
spec:
  importRules:
  - type:

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

NameSelector

spec:
  importRules:
  - type: NameSelector
    nameSelector:
      namespace:
      name:

要创建 NameSelector 规则,请指定导出的服务的命名空间名称

 
spec:
  importRules:
  - type: NameSelector
    importAsLocal:

设置为 true,以将远程端点与本地服务聚合。为 true 时,服务将导入为 <name>.<namespace>.svc.cluster.local

true/false

spec:
  importRules:
  - type: NameSelector
    nameSelector:
      namespace:
      name:
      alias:
        namespace:
        name:

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

 

将"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> 提供,其中 domainSuffixsvc.<ServiceMeshPeshPeer.name>-imports.local, 除非 importAsLocal 设置为 true,否则 domainSuffixsvc.cluster.local。如果 importAsLocal 设为 false,则会应用导入规则中的域后缀。您可以像网格中的任何其他服务一样对待本地导入。它通过出口网关自动路由,它将重定向到导出服务的远程名称。

先决条件

  • 为网格联邦配置了集群和 ServiceMeshControlPlane
  • 具有 cluster-admin 角色的帐户。
注意

您可以配置用于导入的服务,即使它们尚未导出。当部署并导出与 ImportedServiceSet 中指定的值匹配的服务时,它会被自动导入。

通过 CLI 操作的步骤

按照以下步骤,通过命令行创建 ImportedServiceSet

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

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

    $ oc project green-mesh-system
  3. 根据以下示例创建一个 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

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

    $ oc create -n <ControlPlaneNamespace> -f <ImportedServiceSet.yaml>

    例如:

    $ oc create -n green-mesh-system -f import-from-red-mesh.yaml
  5. 根据需要为联邦网格中的每个网格对等创建额外的 ImportedServiceSet 资源。
  6. 要验证已导入到 green-mesh 中的服务,请运行以下命令:

    $ oc get importedserviceset <PeerMeshImportedInto> -o yaml

    例如:

    $ oc get importedserviceset green-mesh -o yaml
  7. 运行以下命令以验证导入到网格中的服务。

    $ 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 不匹配。

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

© 2024 Red Hat, Inc.