我是docker和微服务的新手.我已经开始将我的网络应用程序分解为微服务,目前,我正在进行手动配置.
经过一番研究,我遇到了docker swarm模式,它允许发现服务.此外,我遇到了其他服务发现工具,如Eureka和Consul.
我的主要目标是将curl调用中的IP地址替换为服务名称和同一服务的多个实例之间的负载平衡.
即对于前者卷曲http://192.168.0.11:8080/到卷曲http://my-service
我必须保持我的服务语言独立.
请建议,我是否需要使用Consul与docker swarm进行服务发现,或者我可以在没有Consul的情况下进行此操作?有什么好处?
这仅适用于群组覆盖网络内的节点.如果您的客户端系统是同一个群集的一部分,那么发现应该是开箱即用的,不需要任何外部解决方案.
另一方面,如果您希望能够从群组外的系统中发现服务,您可以选择以下几种方法:
>对于无状态服务,您可以使用docker的routing mesh,这将使服务端口可用于所有群集节点.这样您就可以指向swarm中的任何节点,docker会将您的请求定向到运行该服务的节点(无论您点击的节点是否具有该服务).
>如果您需要控制路由或处理不同的状态,请在群组服务前使用实际的负载均衡器.这可能是另一个使用–mode全局选项启动的docker服务(即haproxy,Nginx),以确保它在所有节点上运行,或者是一个单独的负载均衡器,如Citrix netscaler.您需要让服务容器通过其启动脚本或配置工具(或手动添加)重新配置LB.
>使用像consul这样的东西来进行外部服务发现.可能与registrator一起自动添加服务.在此方案中,您只需将外部客户端配置为使用consul服务器/群集进行DNS解析(或使用API).
当然,您也可以将服务消费者转移到群组中.如果您将客户端与不同物理VLAN(或VPC等)中的服务分开,则需要在单独的覆盖网络中启动客户端容器,以确保不会有效地阻止已经存在的任何物理网络隔离.