kubernetes - k8 内部的流量如何流动?
问题描述
我有 LB 的入口和服务。当来自外部的流量首先到达入口,然后使用入口 LB 直接进入 Pod,或者它进入服务并通过选择器获取 Pod ip,然后进入 Pod?如果是第一种方式,服务有什么用?以及哪种服务或入口在部署中使用了 readinessProbe?
所有设置都在 GCP 中
我是 K8 网络的新手。
解决方案
服务类型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/
推荐阅读
- c# - .NET 中是否有对话框/菜单编辑器控件?
- php - WordPress页面内容随机插入短代码内
- windows-10 - 启用了 OneDrive Files On-Demand 的兼容防病毒软件
- php - 当用户未填写必填字段时,Laravel 向会话输入数据
- android - Flutter Blue 设置通知
- sql - 在特定位置添加空格的更新 | SQL 服务器
- amazon-web-services - 同一子网内的 AWS VPC EC2 连接
- r - 广义线性模型上 stepAIC 上下文中的逻辑下标太长
- javascript - 多个带有 html 内容的tippy.js 工具提示
- java - 将来自 JTextField 的输入存储在变量中