【问题标题】:How to expose just one microservice from kubernetes cluster outside for existing load balancer and other services - only within cluster如何从外部的 kubernetes 集群中为现有的负载均衡器和其他服务公开一个微服务 - 仅在集群内
【发布时间】:2020-04-16 01:56:58
【问题描述】:

您好,提前致谢。

首先,我想提供一些背景信息,以便更轻松地回答我的问题。

我们正在使用谷歌云。

我们遇到了这样一种情况,即我们需要能够轻松地为应用程序的各个部分部署更新,这遇到了我们单体架构的限制。 我们的应用程序不是很大,但它已经有 2 个物理服务 - 后端(范围正在更新)和缓存服务器,它缓存数据并以类似 mongo 的方式对来自 Google Datastore 的数据进行搜索。

这里有 2 个选项。

  • “插件” - 就像在同一进程中运行的纳米服务一样,这些纳米服务的开发方式是这些纳米服务不知道它们在同一进程上,它们所知道的只是在激活时注入的一组“插件外壳 API”纳米服务代码。这个 shell 让 nanoservice 可以访问数据库、日志记录、配置、路由注册、控制事件(如刷新页面地图)以及一些元数据(如网站根 URL 和静态内容的根),这些元数据被部署为服务版本的供应物。赞https://static.server.com/deployments/foo/v2

  • kubernetes 上的标准微服务,其中提到的相同 API 通过部署为容器映像的一部分的“shell 客户端”包向每个服务公开。

简而言之,这是一个常见的“基础设施与库”的困境,在我阅读的有关微服务的文章中经常提到。

对于库方法,我已经对如何在不停止服务器的情况下实现包括热模块替换在内的所有内容有了一些看法,但是我对 kubernetes 的了解越多,我就越觉得我正在发明 kubernetes(或类似的)轮子。

我是怎么想的:

1) 有一个路由器服务,它是集群外部暴露的单一服务。当请求页面时,此服务附加到我们已经作为后端的负载均衡器。 它将处理外部请求的身份验证/授权,并选择要呈现的页面或要调用的 API 端点。当请求页面时,加载相关模板,并通过调用模块服务公开的相关端点来选择用于预渲染的数据。选择公共 API 端点时,将调用匹配的服务端点。 服务很少,包括:

  • 缓存服务(该服务现在部署在单独的服务器组中,以及什么
  • 更新服务,该服务处理模块服务版本切换,并通过一些 UI 为管理员提供 API。
  • 模块服务(每个模块一个)。每个模块都公开了用于提供预加载页面数据的端点、用于提供要注册的页面路由列表的端点、API 端点实现以及用于列出要通过路由器服务调用的公开 API 路由的端点。
  • 路由器服务,它处理外部请求并在适当时使用缓存的路由映射将它们分派给其他服务,如果内部服务之一广播页面映射刷新事件,则更新,例如。 G。更新服务。

阻止我立即开始使用 Kubernetes 的原因是缺乏关于如何实现以下场景的知识:

1) 只有 1 个微服务必须暴露在集群之外,即“路由服务”。

2) 重用内置服务发现等与集群内的服务(如缓存服务器)进行通信。

3) 集群的路由器服务将附加到我们已经作为后端的云负载均衡器。

【问题讨论】:

    标签: google-cloud-platform microservices google-kubernetes-engine


    【解决方案1】:

    在我看来,你应该看看 NGINX Ingress Controller 来构建你的路由方案,更多信息你可以找到here和here。

    编辑 此外,您可以尝试一些other ingress controllers,其中Istio 和Traefik 作为NGINX Ingress Controller 的替代解决方案绝对值得您关注。

    【讨论】:

      猜你喜欢
      • 2020-10-23
      • 2016-12-30
      • 1970-01-01
      • 1970-01-01
      • 2017-12-15
      • 2021-12-21
      • 2020-04-25
      • 2019-01-05
      • 2018-10-27
      相关资源
      最近更新 更多