[apache/dubbo]dubbo mesh开启后,如何跨namespace调用与dubbo多版本调用

2024-06-24 372 views
1

操作步骤如下:

  1. k8s环境下,consumer端开启mesh模式
  2. consumer端需要调用多个provider
  3. provider有应用级注册和接口级注册,并且需要的provider不再同一个namespace下
  4. 原有项目存在dubbo2.6与3.1多版本间的相互调用,在开启消费端mesh(dubbo3.1)后,无法调用到2.6的服务提供者

问题:

  1. 如何实现在一个consumer下,调用多个namespace下的provider,并且provider有应用级注册和接口级注册
  2. dubbo3.1消费端在开启mesh后,如何调用版本是2.6的服务提供者

回答

6

Mesh 模式目前只支持 3.1 版本内互调,由于 istio 的限制无法同步 2.6,2.7 接口级的数据,向前兼容的版本目前正在规划中,后续可以关注 Dubbo Mesh 控制面的最新规划

6

那在3.1的版本中,一个consumer需要调用到多个namespace的服务,这种需求该怎么配置

5

默认读取的数据应该就是支持跨 namespace 的

5

不配置的话,默认是default,按照这样配的话,就只能是限制成 该项目的namespace。我的疑问是:如果消费端需要去调用多个服务提供者,并且这些提供者分布在不同的namespace,这样该如何配置

env:
    - name: POD_NAMESPACE
      valueFrom:
        fieldRef:
          fieldPath: metadata.namespac
8

POD_NAMESPACE 这个属性只是为了构建 xds node id 而已

5

如果不配置 POD_NAMESPACE变量,调用的时候就报错,提示的是No provider available for the xxx from registry istio-demo-dubbo-producer.default.svc.cluster.local:20885

添加这个属性,调用正常 demo-dubbo-producer.istio-demo.svc.cluster.local:20885

1

添加这个变量是为了能够和 istio 通信,用于标记自身所在的环境,参数本身不会限制拉取的服务有多少

6

但是在开启mesh后,在不配置这个参数的情况下,看到的报错信息是istio-demo-dubbo-producer.default.svc.cluster.local:20885, 配置不同的值,域名就显示响应的地址;所以猜测 这个参数参与对服务提供者的域名组装,那不同的namespace下的服务是不是都要配置这个参数

8

@AlbumenJ @ulinkwo @

开启mesh后,如果消费者要调用两个提供者,这两个提供者分别在不同的namespace,按照下面的代码寻址逻辑。是不是无法实现。因为只能配置一个环境变量POD_NAMESPACE;这种情况是不是需要在每个@DubboReference中指定提供者的namespace才行? 能否帮忙解答

ReferenceConfig#meshModeHandleUrl dubbo版本 3.1.0

image

7

这个应该是 thin sdk 的模式,可以提个 pr 看下怎么通过配置完善下 @conghuhu 也一起看下

6

ok,我看下这个问题

6

这个 namespace 指的是 nacos的 namespace还是 k8s的namespace?

6

k8s