gpt4 book ai didi

kubernetes - 将流量路由到 Kubernetes 集群

转载 作者:行者123 更新时间:2023-12-03 16:26:08 24 4
gpt4 key购买 nike

我有一个与 Kubernetes 网络相关的问题。

我有一个微服务(比如 numcruncherpod)在通过端口 9000 服务请求的 Pod 中运行,并且我创建了一个相应的 NodePort 类型的服务(numcrunchersvc) 和该服务暴露的节点端口是 30900 .

我的集群有 3 个具有以下 IP 的节点:

  • 192.168.201.70,
  • 192.168.201.71
  • 192.168.201.72

  • 我将通过反向代理 (nginx) 将流量路由到我的集群。据我在 nginx 中了解,我需要指定所有这些集群节点的 IP 以将流量路由到集群,我的理解是否正确?

    我担心的是,由于 nginx 不了解集群,因此决定流量应该发送到的集群节点可能不是一个好的判断。那么有没有更好的方法将流量路由到我的 kubernetes 集群?

    PS:我没有在任何云平台上运行集群。

    最佳答案

    这个答案有点晚,有点长,所以我在开始之前请求原谅。 :)

    对于不在云提供商上运行 kubernetes 集群的人,有 4 种不同的选项可以将集群内运行的服务暴露给外部世界。

  • type: NodePort的服务.这是最简单和默认的。 Kubernetes 为您的服务分配一个随机端口。集群中的每个节点都监听到此特定端口的流量,然后将该流量转发到支持该服务的任何一个 Pod。这通常由 kube-proxy 处理,它利用 iptables 和使用循环策略的负载平衡。通常,由于此设置的 UX 不漂亮,人们经常添加外部“代理”服务器,例如 HAProxy、Nginx 或 httpd 来监听单个 IP 上的流量并将其转发到这些后端之一。这是你,OP,描述的设置。
  • 更进一步的是使用 type: ExternalIP 的服务。 .这与 NodePort 相同。服务,除了它还让 kubernetes 在所有 kubernetes 节点上添加一个附加规则,上面写着“到达目标 IP == 的所有流量也必须转发到 pod”。这基本上允许您将任意 IP 指定为服务的“外部 IP”。只要发往该 IP 的流量到达集群中的一个节点,它就会被路由到正确的 Pod。但是,将流量传输到任何节点是您作为集群管理员的责任。这里的好处是,如果您指定您的一个节点(例如您的一个主节点)的物理接口(interface)之一的 IP,您不再需要运行 haproxy/nginx 设置。此外,您将跳数减少了 1 个。
  • type: LoadBalancer的服务.这种服务类型使裸机集群与云提供商平起平坐。一个功能齐全的负载均衡器提供商能够从预定义的池中选择 IP,自动将其分配给您的服务并将其发布到网络,前提是它已正确配置。当涉及到裸机上的 kubernetes 网络时,这是您将拥有的最“无缝”的体验。大多数 LoadBalancer 提供程序实现使用 BGP 与上游 L3 路由器进行通信和通告。 Metallb 和 kube-router 是适合这个利基市场的两个 FOSS 项目。
  • Kubernetes 入口。如果您的要求仅限于 L7 应用程序,例如 REST API、HTTP 微服务等。您可以设置一个 Ingress 提供程序(nginx 就是这样一个提供程序),然后为您的所有微服务配置入口资源,而不是服务资源。您部署入口提供程序并确保它具有外部可用且可路由的 IP(例如,您可以将其固定到主节点,并使用该节点的物理接口(interface) IP)。使用 ingress 而不是服务的优点是 ingress 对象 native 理解 HTTP mircoservices,您可以进行更智能的健康检查、路由和管理。

  • 人们经常将 (1)、(2)、(3) 与 (4) 中的一个结合起来,因为前 3 个是 L4 (TCP/UDP) 而 (4) 是 L7。因此,诸如基于 URL 路径/域的路由、SSL 终止等事情由入口提供商处理,IP 生命周期管理和路由由服务层负责。

    对于您的用例,理想的设置将包括:
  • 您的微服务部署,在您的 pod 上有健康端点
  • 一个入口提供程序,以便您可以调整/自定义您的路由/负载平衡以及用于 SSL 终止、域匹配等。
  • (可选):使用 LoadBalancer provider 位于您的 Ingress 提供商前面,这样您就不必手动配置 Ingress 的网络。
  • 关于kubernetes - 将流量路由到 Kubernetes 集群,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46307289/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com