请求访问一个k8s域名业务所经过的所有解析过程

前言:学习笔记,当用户从外部请求访问一个k8s域名业务所经过的所有解析过程

整体的请求解析流程

用户发起请求

用户通过浏览器或其他客户端工具发起 HTTP 请求,目标是集群中的某个服务。

DNS 解析

外部 DNS 解析:用户请求中的域名(如 example.com)需要通过外部 DNS 服务器解析成 IP 地址。外部 DNS 服务器会返回外部负载均衡器的 IP 地址。

示例:用户访问 http://example.com/app-a,外部 DNS 服务器将 example.com 解析为外部负载均衡器的 IP 地址。

外部负载均衡器(可选)

如果集群运行在云平台上(如 AWS、GCP、Azure),外部负载均衡器(如 AWS ELB、GCP Load Balancer)会首先接收用户的请求。这个负载均衡器会将流量分发到集群中的多个节点。

示例:外部负载均衡器将请求分发到集群中的某个节点。

NodePort 或 LoadBalancer Service

如果集群没有外部负载均衡器,用户请求可能会直接通过 NodePort 或 LoadBalancer 类型的 Service 访问集群。

这两种类型的 Service 会在每个节点上开放一个端口,或者在云平台上创建一个外部负载均衡器。

示例:用户请求通过 NodePort 访问集群,请求到达节点上的指定端口。

Ingress 控制器

Ingress 控制器:是一个特殊的 Pod,通常运行在集群中的某个节点上。它负责监听 Ingress 资源的变化,并根据这些变化更新路由规则。

常见的 Ingress 控制器包括 Nginx Ingress Controller、Traefik、HAProxy 等。

接收请求:Ingress 控制器接收来自外部负载均衡器或 NodePort 的请求。

解析 Ingress 规则:Ingress 控制器根据 Ingress 资源中定义的路由规则解析请求。

路由请求:根据解析结果,将请求路由到相应的 Service。

示例:Ingress 控制器根据路径 /app-a 将请求路由到 service-a。

Service

Service:是 Kubernetes 中的一个抽象,用于定义一组 Pod 的逻辑集合和访问这些 Pod 的策略。Service 提供了一个稳定的网络端点,即使背后的 Pod 发生变化,这个端点也不会改变。

接收请求:Service 接收来自 Ingress 控制器的请求。

内部 DNS 解析:Service 使用 CoreDNS 解析后端 Pod 的 IP 地址。CoreDNS 会根据服务名称和命名空间解析出对应的 Pod IP 地址。

负载均衡:Service 根据定义的负载均衡策略(如轮询、会话亲和性等)将请求分发到后端的 Pod。

转发请求:将请求转发到选定的 Pod。

示例:Service service-a 接收请求,使用 CoreDNS 解析后端 Pod 的 IP 地址,并将请求转发到其中一个 Pod。

CoreDNS

CoreDNS 是 Kubernetes 的默认 DNS 服务器,负责集群内部的服务发现和 DNS 解析。

请求Service方面的DNS解析:当 Service 需要解析后端 Pod 的 IP 地址时,请求会被发送到 CoreDNS。

请求Pod方面的DNS解析:CoreDNS 根据服务名称和命名空间查找对应的 Pod,并返回 Pod 的 IP 地址。

请求外部域名DNS解析:如果请求涉及外部 DNS 查询,CoreDNS 会将查询转发到上游 DNS 服务器。

示例:Service service-a 通过 CoreDNS 解析后端 Pod 的 IP 地址,CoreDNS 返回 Pod 的 IP 地址。

Pod

Pod:是 Kubernetes 中最小的可部署单元,它封装了一个或多个容器。Pod 负责处理具体的业务逻辑。

接收请求:Pod 接收来自 Service 的请求。

处理请求:Pod 中的容器处理请求,执行业务逻辑。

返回响应:处理完成后,Pod 返回响应给 Service。

示例:Pod响应依次返回给 Service、Ingress 控制器、外部负载均衡器(如果有),最终返回给用户。

总结

用户访问 Kubernetes 集群中的业务时,请求经过的组件和步骤如下:

  1. 用户发起请求:用户通过客户端工具发起请求。
  2. DNS 解析:外部 DNS 服务器解析域名,返回外部负载均衡器的 IP 地址。
  3. 外部负载均衡器(可选):接收请求并分发到集群节点。
  4. NodePort 或 LoadBalancer Service:接收请求并通过节点端口或外部负载均衡器。
  5. Ingress 控制器:接收请求,解析 Ingress 规则,路由请求到相应的 Service。
  6. Service:接收请求,使用 CoreDNS 解析后端 Pod 的 IP 地址,负载均衡到后端的 Pod。
  7. CoreDNS:提供内部 DNS 解析服务,解析服务和 Pod 的 IP 地址。
  8. Pod:接收请求,处理业务逻辑,返回响应。

返回响应:响应依次返回给 Service、Ingress 控制器、外部负载均衡器(如果有),最终返回给用户。

posted @   zpchcbd  阅读(27)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
点击右上角即可分享
微信分享提示