《Apache Dubbo微服务开发从入门到精通》——服务治理与生态——四、服务网格(5) https://developer.aliyun.com/article/1223941
2) 常见问题
• 配置独立的Istio集群clusterId
通常在Kubernetes体系下Istio的clusterId是Kubernetes,如果你使用的是自建的istio生产集群或者云厂商提供的集群则可能需要配置clusterId。
配置方式:指定ISTIO_META_CLUSTER_ID环境变量为所需的clusterId。
参考配置:
clusterId获取方式:
kubectl describe pod -n istio-system istiod-58b4f65df9-fq2ks读取环境变量中 CLUSTER_ID的值。
• Istio认证失败
由于当前Dubbo版本还不支持istio的third-party-jwt认证,所以需要配置jwtPolicy为first-party-jwt。
• providedBy
由于当前Dubbo版本受限于istio的通信模型无法获取接口所对应的应用名,因此需要配置providedBy参数来标记此服务来自哪个应用。
未来我们将基于Dubbo Mesh的控制面实现自动的服务映射关系获取,届时将不需要独立配置参数即可将Dubbo运行在Mesh体系下,敬请期待。
• protocol name
Proxyless模式下应用级服务发现通过Kubernetes Native Service来进行应用服务发现,而由于istio的限制,目前只支持http协议和grpc协议的流量拦截转发,所以Kubernetes Service在配置的时候需要指定spec.ports.name属性为http或者grpc开头。
因此我们建议使用triple协议(完全兼容grpc协议)。此处即使name配置为grpc开头,但是实际上是dubbo协议也可以正常服务发现,但是影响流量路由的功能。
参考配置:
• metadataServicePort
由于Dubbo 3应用级服务发现的元数据无法从istio中获取,需要走服务自省模式。这要求了Dubbo MetadataService的端口在全集群的是统一的。
参考配置:
未来我们将基于Dubbo Mesh的控制面实现自动的服务元数据获取,届时将不需要独立配置参数即可将Dubbo运行在Mesh体系下,敬请期待。
• qosAcceptForeignIp
由于Kubernetes probe探活机制的工作原理限制,探活请求的发起方不是localhost,所以需要配置qosAcceptForeignIp参数开启允许全局访问。
注:
qos端口存在危险命令,请先评估网络的安全性。即使qos不开放也仅影响Kubernetes无法获取Dubbo的生命周期状态。
• 不需要开启注入
Proxyless模式下pod不需要再开启envoy注入,请确认namespace中没有istio-injection=enabled的标签。