我正在构建一个基于微服务的应用程序,并希望使用 Consul 作为服务注册中心。总而言之,我有三种情况:
现在我遇到了如何使用他们的 IP 地址注册服务的问题,因为我需要找出他们的 IP 地址,以便 Consul 可以访问它(例如,用于健康检查):
127.0.0.1
,即可完成。hostname -i
从 Docker 容器中使用来找出它们的外部 IP 并将其交给 Consul。这有效,但我想知道是否有更好的方法来解决这个问题?(理想情况下,该解决方案也应该在 Kubernetes 上以相同的方式工作。)host.docker.internal
)。但是首先,这在外部不起作用,其次它仅适用于 Mac / Windows 的 Docker,例如不适用于 Kubernetes。我该如何解决这些问题?
PS:我想避免使用registrator
Gliderlabs 之类的容器,因为我怀疑它在 Kubernetes 上的效果如何,而且它对混合 Docker / 主机场景也无济于事。
如果您正在使用 Kubernetes,您可能首先要检查其内置的服务注册表是否满足您的需求。通常没有通过其节点主机的 IP 地址到达 pod 的直接路径,因此您描述的设置不会真正有效。(我可能会考虑将 Consul 用于键/值存储,但我不会将其作为 Kubernetes 领域中的服务注册表。)
在普通的多主机 Docker 领域,这是我发现适合主机网络的少数情况之一。使用--net host
Docker Compose 或其他编排工具中的或等效选项启动 Consul 。然后,Consul 会相信“它的”IP 地址是主机的,如果你有已知端口的自动 TCP 探测,你可以搜索主机上运行的每个服务并发现例如端口 3306 上的 MySQL 服务,无论是否运行在一个容器或本机在主机上。
通过此设置,servicename.service.consul
将解析为某个物理主机 IP 地址。如果您有一个 Docker 容器指向其当前主机以获取 DNS 服务,那么这会将服务路由到某个主机,可能是同一台主机,但这在过去对我来说很可靠。
请注意,相关主机名在不同环境中会有所不同:servicename.service.consul
对于基于 Consul 的设置,servicename.namespacename.svc.cluster.local
在 Kubernetes 中,可能localhost
在开发人员桌面环境中。您需要确保这是可配置的,最直接的是通过环境变量。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句