当一个 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),最终回到客户端。
相关推荐
gadiaola8 小时前
【计算机网络面试篇】HTTP
java·后端·网络协议·计算机网络·http·面试
TracyCoder12310 小时前
微服务概念理解学习笔记
学习·微服务·架构
TracyCoder12311 小时前
微服务框架选型学习笔记
笔记·学习·微服务
Tadas-Gao11 小时前
Spring Boot 4.0架构革新:构建更精简、更安全、更高效的Java应用
java·spring boot·分布式·微服务·云原生·架构·系统架构
草原印象11 小时前
Spring Cloud、Spring Cloud Alibaba微服务实战
spring·spring cloud·微服务
whltaoin12 小时前
【 Java微服务 】Spring Cloud Alibaba :Nacos 注册中心与配置中心全攻略(含服务发现、负载均衡与动态配置)
java·微服务·nacos·springcloud·注册中心·配置中心
TracyCoder12312 小时前
微服务注册中心基础(二):CP架构原理
微服务·云原生·架构·注册中心
0***1418 小时前
PHP在微服务中的架构设计
微服务·云原生·架构
pengzhuofan1 天前
Sentinel 服务保护
java·微服务·sentinel