文档首页> 微服务引擎 CSE> 最佳实践> ServiceComb引擎应用治理> SpringCloud应用对接ASM进行服务发现
更新时间:2023-11-14 GMT+08:00
分享

SpringCloud应用对接ASM进行服务发现

功能介绍

随着istio服务网格的发展,越来越多的应用都会接入服务网格,Sermant Agent提供了一种能让SpringCloud应用也能访问服务网格中的应用的解决方案。

SpringCloud应用访问istio应用的部署图如下:

istio应用需要注册到istio中,不限制语言,SpringCloud应用不必注册到istio中,SpringCloud应用部署的环境可以是ECS/CCE/ASM。SpringCloud应用会通过Sermant Agent进行istio中的服务发现,然后SpringCloud应用便可以像调用其它SpringCloud应用一样,通过服务名调用istio中的服务。

  • 此功能目前处于公测阶段,当前仅在华东-上海一支持。
  • 当ServiceComb引擎为2.x版本且未开启安全认证时,支持此功能。
  • Sermant Injector版本要求1.0.11及以上,Sermant Agent镜像版本要求1.0.9及以上。

版本支持

Spring Cloud Edgware.SR2 - 2021.0.0

前提条件

操作步骤

  1. 挂载Sermant Agent并启动SpringCloud应用,请参考SpringCloud应用通过Sermant Agent接入ServiceComb引擎
  2. 开启Sermant Agent istio服务发现功能,相关配置如下所示,可在启动SpringCloud应用时通过环境变量或者-D参数的形式进行配置。

    配置项

    配置说明

    默认值

    备注

    XDS_PLUGIN_ENABLED

    是否开启istio服务发现

    false

    开启istio服务发现需要设置成true

    XDS_PLUGIN_SECURE

    访问istio时,是否开启tls

    true

    当前ASM只支持tls访问

    XDS_PLUGIN_ADDRESS

    istio地址

    istiod.istio-system.svc:15012

    -

    XDS_PLUGIN_NAMESPACE

    istio系统所在的命名空间

    istio-system

    -

    XDS_PLUGIN_TOKEN

    istio token,开启tls时必填

    <空>

    istio token为istio-system命名空间的default-token-xxxxx(xxxx为随机字符串)中的token值,可在CCE管理控制台,在左侧导航栏选择“配置项与密钥 ”,在“密钥”页签下选择istio-system命名空间后查看。

    当CCE集群版本大于等于1.25时,需要手动创建 istio token,操作如下:

    1. 通过kubectl连接istio应用所在的集群或者通过CloudShell连接istio应用所在的集群
    2. 执行以下命令创建token:
      kubectl apply -f - <<EOF
      apiVersion: v1
      kind: Secret
      metadata:
        name: default-token
        namespace: istio-system
        annotations:
          kubernetes.io/service-account.name: default
      type: kubernetes.io/service-account-token
      EOF
    3. 执行成功后,便可在CCE管理控制台,单击istio应用所在的CCE集群,在左侧导航栏选择“配置项与密钥 ”在“密钥”页签下选择istio-system命名空间后查看到default-token,单击default-token,便可查看到token值。

  3. 完成SpringCloud应用与istio应用部署之后,SpringCloud应用便可以通过服务名调用istio应用。例如,通过spring-cloud-starter-openfeign调用istio应用(假设服务名为istio-provider),请求路径为"/hello",请求方法为get的接口的示例如下:

    @FeignClient(name = "istio-provider")
    public interface IstioClient {
        @RequestMapping(value = "/hello", method = RequestMethod.GET)
        String hello();
    }

    您也可以选用RestTemplate等其它支持SpringCloud服务发现机制的客户端,在此不做限制。

    SpringCloud应用调用istio应用的服务名需要与istio中的注册的服务名保持一致。

更新token(可选)

按需更新token,由于istio token与ASM相关,如果重装了ASM或者由于其它原因导致了token发生变化,则会导致istio服务发现失效,此时可以使用配置管理,在不重启服务的情况下,动态更新token。在更新token前需要SpringCloud应用已接入ServiceComb引擎。

更新token,即创建token配置,具体操作请参考配置管理

token配置示例:

token: "xxxx"
  • 配置项:sermant.xds.discovery。
  • 配置范围:按需选择。
  • 应用:按应用和环境实际情况填写,默认为:default <空>。
  • 配置格式: yaml。
  • 更新token时,请把xxxx替换为实际的token,token值来源请参考配置说明

验证ASM服务发现功能

本文以spring-cloud-router-consumer调用spring-cloud-router-provider服务为例,在CCE场景验证ASM服务发现(CCE场景部署请参考基于CCE场景),部署图如下所示:

其中spring-cloud-router-consumer通过Sermant Agent注册到ServiceComb中并对ASM进行服务发现,spring-cloud-router-provider不会挂载Sermant Agent,不会注册到ServiceComb中,只会部署到ASM中。

为了方便验证,spring-cloud-router-consumer与spring-cloud-router-provider部署到了一个CCE集群中,在实际环境中,不局限于这一点,只要保证SpringCloud应用能够访问istio,并且保证SpringCloud应用能够通过istio应用的pod ip进行访问即可。

  1. 下载demo应用并打包,在镜像文件夹获取制作镜像的文件,制作docker镜像请参考使用容器引擎客户端上传镜像
  2. 创建ASM并部署spring-cloud-router-provider,部署时的istio服务名需要为spring-cloud-router-provider。
  3. 部署spring-cloud-router-consumer,部署时需要在“spec > template > metadata > labels”层级下加入:sermant-injection: enabled以挂载Sermant Agent,在“spec > template > metadata > annotations”层级下加入:sidecar.istio.io/inject: 'false'以屏蔽ASM服务发现。
  4. 进入ASM管理控制台,选择您的ASM集群,在服务管理页面中,命名空间选择default,如果您的部署正确,则可以看到spring-cloud-rouer-provider状态为正常,spring-cloud-router-consumer的状态为异常(不会注入sidecar)。
  5. 查看spring-cloud-router-consumer是否已接入ServiceComb引擎。

    参考查看微服务列表查看spring-cloud-router-consumer是否已接入ServiceComb引擎。

  6. 验证是否对spring-cloud-rouer-provider进行了服务发现。

    使用以下命令访问spring-cloud-router-consumer:

    curl http://127.0.0.1:31002/hello/feign

    执行命令时,需要把ip替换成实际宿主机的ip。

  7. 如果返回结果如下所示,则说明验证成功。

    Hello world! My port is 8162, my version is 1.0.0.

    如果您把spring-cloud-router-consumer与spring-cloud-router-provider接入了APM,也可以在应用拓扑中查看到如下调用关系:

分享:

    相关文档

    相关产品