K8S部署一个 用户模块(登录),涉及的组件和数据流转:
在 Kubernetes(K8s)中部署一个 Spring Boot 编写的 user
模块,并发起登录请求,整个流程会涉及多个 K8s 组件,下面为你详细介绍这个过程:
1. 前期准备:资源部署
在发起登录请求前,需要先在 K8s 中部署相关资源,这些资源包括:
- Deployment:它定义了
user
模块应用的副本数量、镜像信息等,负责管理 Pod 的生命周期。K8s 会根据 Deployment 的配置创建和维护相应数量的 Pod 实例。例如,以下是一个简单的 Deployment YAML 示例:
apiVersion: apps/v1
kind: Deployment
metadata:
name: user-module-deployment
spec:
replicas: 3
selector:
matchLabels:
app: user-module
template:
metadata:
labels:
app: user-module
spec:
containers:
- name: user-module-container
image: your-dockerhub-image:tag
ports:
- containerPort: 8080
- Service:它为一组具有相同功能的 Pod 提供统一的访问入口,可实现负载均衡。这里假设使用
ClusterIP
类型的 Service,它会在集群内部创建一个虚拟 IP 地址,供其他组件访问。示例 YAML 如下:
apiVersion: v1
kind: Service
metadata:
name: user-module-service
spec:
selector:
app: user-module
ports:
- protocol: TCP
port: 80
targetPort: 8080
type: ClusterIP
- Ingress Controller:它是 K8s 集群的入口控制器,负责将外部的 HTTP/HTTPS 请求路由到集群内部的 Service。需要先部署 Ingress Controller 组件,再创建 Ingress 资源来定义路由规则。示例 Ingress YAML 如下:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: user-module-ingress
spec:
rules:
- host: yourdomain.com
http:
paths:
- path: /login
pathType: Prefix
backend:
service:
name: user-module-service
port:
number: 80
2. 登录请求流程
当客户端发起登录请求时,会依次经过以下组件:
- 客户端:用户在浏览器或其他客户端应用中输入登录请求的 URL(如
https://yourdomain.com/login
),并提交登录信息(用户名、密码等)。 - Ingress Controller:请求首先到达 Ingress Controller,它会根据 Ingress 资源中定义的路由规则,将请求转发到对应的 Service。在这个例子中,Ingress Controller 会将
/login
路径的请求转发到user-module-service
。 - Service(ClusterIP):
user-module-service
接收到请求后,会根据其负载均衡策略(如轮询、随机等)选择一个后端的 Pod 实例,并将请求转发给该 Pod。 - Pod:被选中的 Pod 中的
user
模块应用(Spring Boot 应用)接收到登录请求,处理登录逻辑,如验证用户名和密码、生成令牌等。 - 返回响应:处理完登录请求后,
user
模块应用将响应结果返回给客户端。响应会沿着请求的相反路径返回,即从 Pod 到 Service,再经过 Ingress Controller,最终返回给客户端。
综上所述,在 K8s 中部署 user
模块并发起登录请求,主要涉及 Ingress Controller、Service(ClusterIP)、Deployment 和 Pod 等组件,它们协同工作,实现了请求的路由、负载均衡和应用的管理。
为了避免过度依赖,可以这样:
http请求->ingress-> Service(绑定到 spring-gateway 的Deployment)->Deployment(spring-gateway,是 spring boot)->内网的Deployment,或者说pod(比如说用户,支付,购物车模块)