k8流量在内部如何流动?

时间:2020-03-09 06:22:16

标签: kubernetes google-kubernetes-engine kubernetes-ingress

我在LB上有入口和服务。当来自外部的流量首先到达入口,然后使用入口LB直接到达Pod,还是进入服务并通过选择器获取Pod ip,然后到达Pod?如果是第一种方式,服务的用途是什么?哪种类型的服务或入口在部署中使用readinessProbe?

所有设置都在GCP中

我是K8网络的新手。

2 个答案:

答案 0 :(得分:2)

服务类型LoadBalancer是您的云提供的外部源,不在Kubernetes集群中。他们可以使用节点选择器将请求转发到您的Pod,但是您不能创建路径规则或重定向或重写,因为这是由Ingress提供的。

服务是一种抽象,定义了Pod的逻辑集和访问它们的策略(有时将此模式称为微服务)。服务所针对的Pod集合通常由选择器决定(请参见下文,了解为什么您可能希望服务中没有选择器)。

        Internet
            |
     [ LoadBalancer ]
       --|-----|--
       [ Services ]
       --|      |--
    [ Pod1 ]  [ Pod2 ]

当您使用 Ingress 时,它是一个由入口控制器组成的 component 控制器,该控制器基本上是配置为处理您定义的规则的Pod。 要使用入口,您需要为路径配置服务,然后该服务将通过配置选择器到达容器。您可以基于路径,主机名配置一些规则,它们会针对所需的服务进行重定向。像这样:

        Internet
            |
       [ Ingress ]
       --|-----|--
       [ Services ]
       --|      |--
    [ Pod1 ]  [ Pod2 ]

入口公开从群集外部到群集内服务的HTTP和HTTPS路由。流量路由受Ingress资源上定义的规则控制。

This article在公开服务的所有方式之间都有很好的解释。

在您的广告连播/部署规范中配置了readnessProbe,并且 kubelet 负责评估您的容器的健康状况。

kubelet使用就绪探针来了解何时Container准备开始接受流量。当Pod的所有容器都准备就绪时,即视为准备就绪。该信号的一种用法是控制将哪些Pod用作服务的后端。当Pod尚未就绪时,会将其从服务负载平衡器中删除。

kube-proxy是负责提出豆荚请求的负责人。

例如,如果您在不同的节点中有2个Pod,则kube-proxy将处理防火墙规则(iptables)并在节点之间分配流量。集群中的每个节点都在运行kube-proxy。

kube-proxy可以通过3种方式进行配置:userspace modeiptables modeipvs mode

如果kube-proxy在iptables模式下运行,并且所选的第一个Pod没有响应,则连接失败。这与用户空间模式不同:在这种情况下,kube-proxy会检测到与第一个Pod的连接失败,并会自动使用其他后端Pod重试。

参考:

https://kubernetes.io/docs/concepts/services-networking/service/

https://kubernetes.io/docs/concepts/services-networking/ingress/

答案 1 :(得分:2)

取决于您的LoadBalancer服务是公开Ingress控制器还是应用程序Pod(第一种是正确的方法)。

使用服务和入口的通常方法如下:

LoadBalancer Service -> Ingress -> ClusterIP Service -> Pods

在这种情况下,来自Internet的流量首先到达您的云提供商的负载平衡器(由LoadBalancer Service创建),然后将其转发到Ingress控制器(该控制器是在群集中运行NGINX的一个或多个Pod),进而将其转发到您的应用Pod(通过从ClusterIP服务获取Pods的IP地址)。

我不确定您当前是否有这个星座:

Ingress -> LoadBalancer Service -> Pods

在这种情况下,您不需要那里的LoadBalancer服务。您仅需要在Ingress后面添加ClusterIP服务,然后通常使用LoadBalancer服务公开Ingress。