k8s面试题-ingress

发布于:2025-05-22 ⋅ 阅读:(19) ⋅ 点赞:(0)

场景:我通过deployment更新pod,ingress是怎么把新的请求流量发送到我新的pod的?是怎么监控到我更新的pod的?

在 Kubernetes 中,Ingress 是一种 API 对象,用于管理外部访问到集群内服务的 HTTP 和 HTTPS 路由。当你通过 Deployment 更新一个 Pod 时,Ingress 并不会直接监控 Pod 的更新,而是通过一系列的机制来感知服务的变化并更新路由规则。以下是整个过程的详细解释:

1.Deployment 更新 Pod 的过程
当你更新 Deployment 的配置(例如修改镜像版本)时,Kubernetes 的控制器会根据新的配置逐步替换旧的 Pod,创建新的 Pod 并删除旧的 Pod。这个过程称为滚动更新(Rolling Update)。
2.Service 的作用
在 Kubernetes 中,Pod 是动态的,可能会因为更新、故障等原因被销毁和重建。为了确保外部流量能够稳定地访问到服务,通常会使用 Service 来抽象 Pod 的访问方式。Service 通过一个稳定的虚拟 IP(ClusterIP)和端口,将流量转发到后端的 Pod。
当 Deployment 更新 Pod 时,Service 会自动感知后端 Pod 的变化。这是因为 Kubernetes 的 Endpoint Controller 会监控 Pod 的状态变化,并更新 Service 的 Endpoint 列表。Endpoint 列表记录了所有健康且可用的 Pod 的 IP 地址和端口。

3.Ingress 的工作原理
Ingress 本身并不直接管理 Pod,而是通过 Ingress Controller 来实现 HTTP/HTTPS 流量的路由。Ingress Controller 是一个独立的组件,它会监控 Kubernetes 集群中的 Ingress 资源,并根据 Ingress 的配置动态生成和更新路由规则。

4.Ingress 如何感知 Pod 的更新
当 Deployment 更新 Pod 时,Ingress 通过以下机制感知并更新路由规则:
4.1 监控 Service 的 Endpoint
Ingress Controller 会监控 Service 的 Endpoint 列表。当 Deployment 更新 Pod 时,Endpoint Controller 会更新 Service 的 Endpoint 列表,移除旧 Pod 的 IP 地址并添加新 Pod 的 IP 地址。
Ingress Controller 会定期轮询或通过 Kubernetes 的事件机制(Watch API)感知 Endpoint 列表的变化。

4.2 更新路由规则
当 Ingress Controller 检测到 Endpoint 列表的变化时,它会重新生成路由规则。这些路由规则通常会根据 Ingress 资源的配置和 Service 的 Endpoint 列表动态生成。
例如,如果 Ingress 配置了一个 HTTP 路由规则,将流量转发到某个 Service,Ingress Controller 会根据 Service 的 Endpoint 列表更新负载均衡器的后端目标。如果 Endpoint 列表中有新的 Pod IP 地址,Ingress Controller 会将流量转发到新的 Pod。

4.3 负载均衡
Ingress Controller 通常会使用负载均衡算法(如轮询、最少连接等)将流量分配到后端的 Pod。当 Pod 更新后,Ingress Controller 会根据新的 Endpoint 列表重新分配流量,确保流量能够到达新的 Pod。

示例:
假设你有一个 Deployment 和一个 Service,以及一个 Ingress 资源,以下是整个流程的简化示例:
1.更新 Deployment
你更新了 Deployment 的镜像版本。
Kubernetes 控制器开始滚动更新 Pod,创建新的 Pod 并删除旧的 Pod。
2.Endpoint 更新
Endpoint Controller 检测到 Pod 的变化,更新 Service 的 Endpoint 列表。
Endpoint 列表中移除了旧 Pod 的 IP 地址,添加了新 Pod 的 IP 地址。
3.Ingress Controller 感知变化
Ingress Controller 通过 Watch API 检测到 Endpoint 列表的变化。
Ingress Controller 重新生成路由规则,更新负载均衡器的后端目标。
4.流量转发
Ingress Controller 根据新的路由规则将流量转发到新的 Pod。
用户访问 Ingress 的域名时,流量会通过 Ingress Controller 转发到新的 Pod。


网站公告

今日签到

点亮在社区的每一天
去签到