首页 > 解决方案 > k8 内部的流量如何流动?

问题描述

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

所有设置都在 GCP 中

我是 K8 网络的新手。

标签: kubernetesgoogle-kubernetes-enginekubernetes-ingress

解决方案


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

服务是一种抽象,它定义了一组逻辑 Pod 和访问它们的策略(有时这种模式称为微服务)。Service 所针对的 Pod 集通常由选择器确定(请参阅下文,了解为什么您可能需要不带选择器的 Service)。

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

当您使用Ingress时,它是由一个入口控制器组成的组件控制器,它基本上是一个配置为处理您定义的规则的 pod。要使用 ingress,您需要为您的路径配置一个服务,然后该服务将通过配置选择器到达 pod。您可以根据路径、主机名配置一些规则,并将它们重定向到您想要的服务。像这样:

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

Ingress将来自集群外部的 HTTP 和 HTTPS 路由暴露给集群内的服务。流量路由由 Ingress 资源上定义的规则控制。

本文对公开服务的所有方式都有很好的解释。

readnessProbe在你的 pod/deployment 规范中配置,kubelet负责评估你的容器是否健康。

kubelet 使用就绪探测来了解容器何时准备好开始接受流量。当 Pod 的所有 Container 都准备好时,就认为 Pod 准备好了。此信号的一种用途是控制哪些 Pod 用作服务的后端。当 Pod 未准备好时,它会从服务负载均衡器中移除。

kube-proxy负责转发对 Pod 的请求。

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

kube-proxy 可以通过 3 种方式进行配置:用户空间模式iptables 模式ipvs 模式

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

参考:

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

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


推荐阅读