alibaba / nacos

an easy-to-use dynamic service discovery, configuration and service management platform for building cloud native applications.
https://nacos.io
Apache License 2.0
30.35k stars 12.86k forks source link

一直没有理解nacos跟DNS服务的关系 #6868

Open MajorHe1 opened 3 years ago

MajorHe1 commented 3 years ago

nacos 的github主页一直有写

Dynamic DNS Service

Nacos supports weighted routing, making it easier for you to implement mid-tier load balancing, flexible routing policies, flow control, and simple DNS resolution services in the production environment within your data center. It helps you to implement DNS-based service discovery easily and prevent applications from coupling to vendor-specific service discovery APIs.

根据我个人的理解,nacos-server其实并不能直接作为DNS的服务来用。 要么就要依靠在0.5版本提供的 DNS-F客户端来实现DNS能力,而DNS-F客户端又是基于coreDNS的,也就是说提供DNS-F客户端看起来仅仅是为了打通 K8S 服务发现体系,而且DNS-F看起来也很久没有更新了。

所以我的问题在于,nacos是否会考虑作为一个DNS服务而存在这个方向?如果是的话,又将采取何种技术方案?

DaveWang-CN commented 3 years ago

以我的理解,nacos服务端是不会支持DNS功能的。nacos相当于一个数据库,存储了服务与实例的关系数据。 基于DNS的服务发现,需要一个DNS,如CoreDNS。coredns是支持独立部署并非k8s独有的dns,可作为内网dns使用的。所以内网的服务注册发现会多一种dns发现模式,主要为了解决异构语言的服务发现场景。

zhangalex commented 2 years ago

nacos 看上去提供的功能,k8s大部分都提供了,请问区别在哪里呢?

GaleHuang commented 2 years ago

如果是基于DNS的服务发现,看上去传统的服务发现的API就都不需要了调用了,比如注册实例/获取实例。业务调用方直接把调用地址改成domain name就可以。遗憾的是官网没有找到nacos 这方面的相关文档,也就是它是如何和coredns集成的,k8s的官网上倒是有比较详细的集成coredns的文档。https://kubernetes.io/docs/tasks/administer-cluster/coredns/

xuanweiace commented 1 year ago

如果是基于DNS的服务发现,看上去传统的服务发现的API就都不需要了调用了,比如注册实例/获取实例。业务调用方直接把调用地址改成domain name就可以。遗憾的是官网没有找到nacos 这方面的相关文档,也就是它是如何和coredns集成的,k8s的官网上倒是有比较详细的集成coredns的文档。https://kubernetes.io/docs/tasks/administer-cluster/coredns/

意思是Nacos server也当做一个DNS解析服务器,业务方通过域名直接解析出对应服务对应的某个ip,然后发起http请求是不,那这样服务发现的API为啥不需要用了?比如注册实例,不还是需要服务启动的时候向Nacos server注册自己吗?(应该是,注册实例还是需要调用传统api,但是发现实例不需要调用传统api了?)

GaleHuang commented 1 year ago

如果是基于DNS的服务发现,看上去传统的服务发现的API就都不需要了调用了,比如注册实例/获取实例。业务调用方直接把调用地址改成domain name就可以。遗憾的是官网没有找到nacos 这方面的相关文档,也就是它是如何和coredns集成的,k8s的官网上倒是有比较详细的集成coredns的文档。https://kubernetes.io/docs/tasks/administer-cluster/coredns/

意思是Nacos server也当做一个DNS解析服务器,业务方通过域名直接解析出对应服务对应的某个ip,然后发起http请求是不,那这样服务发现的API为啥不需要用了?比如注册实例,不还是需要服务启动的时候向Nacos server注册自己吗?(应该是,注册实例还是需要调用传统api,但是发现实例不需要调用传统api了?)

是的,注册实例还是需要调用传统api,但是发现实例不需要调用传统api了。应该是这样理解的,我的表述有误

image

应该是基于coredns的plugin实现 https://coredns.io/manual/plugins/ 相当于: 注册: nacos client --- nacos server 查询:dns lookup --- coredns -- plugin(nacos client) --- nacos server

GaleHuang commented 1 year ago
image image image
pacoxu commented 2 months ago

https://nacos.io/en/blog/nacos0.5/ https://github.com/nacos-group/nacos-coredns-plugin

Only doc about the DNS-F.