Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将流量路由到kubernetes群集_Kubernetes - Fatal编程技术网

将流量路由到kubernetes群集

将流量路由到kubernetes群集,kubernetes,Kubernetes,我有一个关于库伯内特斯网络的问题 我有一个微服务(比如numcruncherpod)运行在一个pod中,它通过端口9000为请求提供服务,并且我创建了一个类型为NodePort(numcrunchersvc)的对应服务,该服务公开的节点端口是30900 我的群集有3个具有以下IP的节点: 192.168.201.70 192.168.201.71 192.168.201.72 我将通过反向代理(nginx)将流量路由到集群。正如我在nginx中所理解的,我需要指定所有这些集群节点的ip来将流量路

我有一个关于库伯内特斯网络的问题

我有一个微服务(比如numcruncherpod)运行在一个pod中,它通过端口
9000
为请求提供服务,并且我创建了一个类型为
NodePort
(numcrunchersvc)的对应服务,该服务公开的节点端口是
30900

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

  • 192.168.201.70
  • 192.168.201.71
  • 192.168.201.72
  • 我将通过反向代理(nginx)将流量路由到集群。正如我在nginx中所理解的,我需要指定所有这些集群节点的ip来将流量路由到集群,我的理解正确吗

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


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

    正确。您可以将交通路由到任何或所有K8仆从。如有必要,K8网络层将转发给相应的仆从

    例如,如果您只运行一个pod,nginx很可能会对请求进行循环。当请求击中一个没有吊舱运行的仆从时,请求将被转发给有吊舱运行的仆从

    如果您运行3个pod,每个minion上一个,那么请求将由从nginx获得请求的任何minion处理


    如果您在每个仆从上运行多个pod,请求将循环到每个仆从,然后循环到该仆从上的每个pod

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

    对于未在云提供商上运行kubernetes群集的用户,有4种不同的选项可用于将群集内运行的服务公开给外部世界

  • 类型的服务:NodePort
    。这是最简单的默认设置。Kubernetes为您的服务分配一个随机端口。群集中的每个节点都侦听到此特定端口的流量,然后将该流量转发到支持该服务的任何一个POD。这通常由kube proxy处理,它使用循环策略利用iptables和负载平衡。通常,由于这种设置的用户体验并不完美,人们通常会添加一个外部“代理”服务器,如HAProxy、Nginx或httpd,以侦听单个IP上的流量并将其转发到这些后端之一。这是您,OP,描述的设置

  • 在此基础上的一个改进是使用
    类型的服务:ExternalIP
    。这与
    节点端口
    服务相同,只是它还让kubernetes在所有kubernetes节点上添加一条附加规则,即“到达目的地IP==的所有流量也必须转发到pods”。这基本上允许您将任意IP指定为服务的“外部IP”。只要发往该IP的流量到达集群中的一个节点,它就会被路由到正确的pod。但是,作为集群管理员,您有责任将该流量传输到任何节点。这里的优点是,如果指定一个节点(例如一个主节点)的一个物理接口的IP,则不再需要运行haproxy/nginx设置。此外,您还将跳数减少了一个

  • 类型的服务:负载平衡器
    。这种服务类型带来了与云提供商对等的裸机集群。一个功能齐全的loadbalancer提供程序能够从预定义的池中选择IP,自动将其分配给您的服务,并将其公布到网络,前提是配置正确。这是kubernetes在裸机上联网时最“无缝”的体验。大多数负载平衡器提供程序实现都使用BGP与上游L3路由器进行通信和播发。Metallb和kube router是两个适合这一细分市场的自由和开放源码软件项目

  • 库伯内特斯·安格斯。如果您的需求仅限于L7应用程序,如REST API、HTTP微服务等,则可以设置一个入口提供程序(nginx就是这样一个提供程序),然后为所有微服务配置入口资源,而不是服务资源。您可以部署入口提供程序,并确保其具有外部可用且可路由的IP(例如,您可以将其固定到主节点,并使用该节点的物理接口IP)。使用ingress优于服务的优点是ingress对象本机理解HTTP mircoservices,并且您可以进行更智能的健康检查、路由和管理

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

    对于您的用例,理想的设置包括:

  • 微服务的部署,pod上有健康端点
  • 入口提供程序,以便您可以调整/自定义路由/负载平衡,以及用于SSL终止、域匹配等
  • (可选):使用
    LoadBalancer
    提供程序与入口提供程序交互,这样您就不必手动配置入口网络

  • 从你的问题中,我了解到你想让nginx知道,给定一个pod,它在哪个节点是正确的?@JavierSalmeron不完全正确。即使来自nginx的流量到达任何节点,它也将被路由到相应的pod(即使pod没有在该节点上运行),但这将是一个额外的跃点。所以我猜LB本身是集群的一部分(比如使用服务类型入口)可能更好。