当前位置: 首页 > 知识库问答 >
问题:

如何在集群外部仅公开 kubernetes 集群中的一个微服务,用于现有负载均衡器和其他服务 - 仅在集群内

冯渝
2023-03-14

您好,提前谢谢。

首先,我想提供一些上下文,以便更轻松地回答我的问题。

我们正在使用谷歌云。

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

我们这里有 2 个选项。

>

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

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

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

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

    我如何想象:

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

    • 缓存服务(现在部署在单独的服务器组中的服务,以及什么
    • updates 服务,
    • 用于处理模块服务版本切换,并通过某些 UI 为管理员提供 API 来执行此操作。
    • 模块
    • 服务(每个模块一个)。每个模块公开用于提供预加载页面数据的终结点、提供要注册的页面路由列表的终结点、API 终结点实现以及列出要通过路由器服务调用的公开 API 路由的终结点。
    • 路由器服务,用于处理外部请求并将其分派到其他服务适当时使用缓存的路由映射,在内部服务之一广播页面映射刷新事件的情况下进行更新,例如更新服务。

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

    1) 只有 1 个微服务必须在集群外部公开,即“路由服务”。

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

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

  • 共有1个答案

    苍烨然
    2023-03-14

    在我看来,您应该查看NGINX入口控制器来构建路由方案,更多信息可以在此处和此处找到。

    编辑 此外,您可以尝试其他一些入口控制器,其中 Istio 和 Traefik 绝对值得您关注,作为 NGINX 入口控制器的替代解决方案。

     类似资料:
    • 我安装了一个kubernetes集群。我想为我的一个微服务使用外部数据库(在我的集群之外),但这个外部数据库被设置为集群,没有自己的负载均衡器。 有没有办法创建一个内部负载平衡器服务,让kubernetes始终将微服务定向到正在运行的实例? 我看到您可以设置loadbalancer类型的服务,我如何使用它?我尝试创建它,但我看到loadbalancer服务是用NodePort创建的。它可以在没有节

    • 包含负载均衡集群及节点。 云联壹云 平台提供的本地IDC的负载均衡功能需要管理员先部署负载均衡集群和LBAgent转发节点。 云联壹云 支持负载均衡多集群功能,用户可根据需求配置负载均衡集群以及集群下的转发节点LBAgent,部署集群和转发节点后才可以部署负载均衡实例等。 集群为一组LBAgent转发节点的集合,同一时刻集群中只有一个转发节点处于MASTER,用于监控负载监控实例配置的IP地址和端

    • 我必须手动在MS Azure中创建Kubernetes群集,而不是使用AKS。因此: > 我在一个可用性集中创建了2个VM:一个用于k8s master,第二个用于k8s节点。 我创建了外部负载均衡器并将2个VM添加到后端池。 我使用kubes祈祷创建了k8s集群。 我创建了部署和负载均衡器服务: 但LoadBalancer服务外部IP始终处于挂起状态: 此外,telnet azure\u loa

    • 什么是port和targetport? 是否为每个代理设置LoadBalancer服务? 这些多个代理是否映射到cloud LB的单个公共IP地址? K8S/Cloud之外的服务如何访问单个代理?通过使用?或者使用?。还有,这里用的是哪个端口?还是? 如何在Kafka Broker的属性中指定此配置?对于k8s集群内部和外部的服务,As端口可能不同。 请帮忙。

    • 我使用几个独立服务运行Kubernetes单节点dev集群--Nginx proxy(端口80)和elasticsearch(端口9200)。有没有办法用ingress公开这些服务,用一个LoadBalancer IP拥有入口点?(X.X.X.X:80和X.X.X:9200) 我读过关于入口限制,它只能用80和443端口访问。但是,也许,存在一些变通方法? 请Thx提供任何建议 但如果以后您想公开

    • 我试图更多地了解服务在Kubernetes中是如何工作的。以这个示例yaml文件为例。 另外,如果我必须从k8集群中的另一个吊舱B访问吊舱landoopkafka的端口8081,我如何访问它? 太感谢你了。

    • 作为开发人员,我们在Azure Service Fabric上编写了微服务,我们可以在Azure中以某种PaaS概念为许多客户运行它们。但我们的一些客户不想在云中运行,因为数据库是内部的,不能从外部获得,甚至不能通过DMZ获得。没关系,我们promise支持它,因为Azure Service Fabric可以作为集群安装在现场。 我建议在一台(或多台)独立的机器上使用负载平衡器,如HA-Proxy

    • 我创建了一个部署,它导致跨2个节点存在4个吊舱。 然后,我通过一个服务公开这些pod,该服务将产生以下集群IP和podendpoint: 如果通过集群IP在内部访问服务,请求将在两个节点和所有pod之间平衡,而不仅仅是在单个节点上的pod之间平衡(例如,像通过节点端口访问一样)。 我知道kubernetes使用IP表来平衡单个节点上跨吊舱的请求,但我找不到任何文档来解释kubernetes如何平衡