当一个 HTTP 请求发往 Kubernetes(K8s)部署的微服务时,整个过程流转时怎样的?

以下是一个简单的示意图来展示这个过程:

1. 请求发起

客户端(可以是浏览器、移动应用或者其他服务)发起一个 HTTP 请求到目标微服务的地址。这个地址可以是服务的域名、IP 地址或者 Kubernetes 服务的 ClusterIP、NodePort 等。

2. 外部流量进入 Kubernetes 集群

若使用 Ingress
  • 功能:Ingress 是 Kubernetes 中用于管理外部对集群内服务访问的 API 对象,它可以根据请求的域名、路径等规则将流量路由到不同的服务。
  • 传递过程:客户端的请求首先到达 Ingress Controller(如 Nginx Ingress Controller),它是运行在集群内的一个负载均衡器,负责监听 Ingress 资源的变化并根据规则进行流量转发。Ingress Controller 会根据请求的主机名和路径匹配 Ingress 规则,找到对应的后端服务。
若使用 NodePort
  • 功能:NodePort 是 Kubernetes Service 的一种类型,它会在每个节点上开放一个端口,外部流量可以通过任意节点的该端口访问到服务。
  • 传递过程:客户端直接将请求发送到集群中某个节点的 NodePort 端口,节点上的 kube - proxy 会根据 Service 的规则将流量转发到后端的 Pod。

3. 服务发现与负载均衡

服务发现
  • 功能:Kubernetes 通过 Service 对象实现服务发现。Service 是一种抽象概念,它定义了一组 Pod 的逻辑集合以及访问这些 Pod 的策略。
  • 传递过程:无论是 Ingress Controller 还是 kube - proxy,都会根据 Service 的定义找到对应的后端 Pod。Service 会关联一个或多个具有相同标签选择器的 Pod。
负载均衡
  • 功能:将请求均匀地分发到后端的多个 Pod 上,以提高服务的可用性和性能。
  • 传递过程:当有多个 Pod 与 Service 关联时,Ingress Controller 或 kube - proxy 会根据负载均衡算法(如轮询、随机等)选择一个后端 Pod 来处理请求。

4. 流量到达目标 Pod

  • 功能:Pod 是 Kubernetes 中最小的可部署单元,它包含一个或多个紧密关联的容器。
  • 传递过程:请求被转发到目标 Pod 所在的节点后,节点上的容器运行时(如 Docker)会将请求发送到 Pod 内的相应容器中。容器内运行着微服务的应用程序,它会接收并处理这个 HTTP 请求。

5. 微服务处理请求

  • 功能:微服务应用程序接收到 HTTP 请求后,会根据请求的内容执行相应的业务逻辑,如查询数据库、调用其他服务等。
  • 传递过程:应用程序处理完请求后,会生成一个 HTTP 响应,并将其返回给请求的来源。

6. 响应返回

  • 功能:将处理结果返回给客户端。
  • 传递过程:响应沿着与请求相反的路径返回。从 Pod 内的容器出发,经过节点上的网络组件(如 kube - proxy)、Ingress Controller(如果使用了 Ingress),最终回到客户端。
相关推荐
DianSan_ERP7 分钟前
架构师视角:电商大促高并发下的订单API限流与防漏单架构演进
java·运维·网络·安全·微服务·架构·自动化
code monkey.14 分钟前
【Linux之旅】HTTP 协议解析:从请求格式到构建 Web 服务器
linux·服务器·网络·http
openFuyao1 小时前
openFuyao使能灵衢超节点::让容器业务丝滑释放节点能力
容器·kubernetes·ai原生·openfuyao·多样化算力·超节点·集群软件
布朗克1681 小时前
40 Redis与微服务入门
java·数据库·redis·微服务
无聊的老谢1 小时前
Spring Cloud Alibaba 应用的容器化部署与 K8s 编排
云原生·容器·kubernetes
liux35281 小时前
Namespace 多租户隔离:K8s 资源管理的基石
docker·容器·kubernetes
没有退路那我就不要散步14 小时前
kube-proxy优化
docker·容器·kubernetes
丑过三八线17 小时前
Kubernetes 常用命令速查手册
云原生·容器·kubernetes
light_in_hand19 小时前
HTTP 协议的基本格式和 fiddler 的用法
网络协议·http·fiddler