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. 登录请求流程

当客户端发起登录请求时,会依次经过以下组件:

  1. 客户端:用户在浏览器或其他客户端应用中输入登录请求的 URL(如 https://yourdomain.com/login),并提交登录信息(用户名、密码等)。
  2. Ingress Controller:请求首先到达 Ingress Controller,它会根据 Ingress 资源中定义的路由规则,将请求转发到对应的 Service。在这个例子中,Ingress Controller 会将 /login 路径的请求转发到 user-module-service
  3. Service(ClusterIP)user-module-service 接收到请求后,会根据其负载均衡策略(如轮询、随机等)选择一个后端的 Pod 实例,并将请求转发给该 Pod。
  4. Pod:被选中的 Pod 中的 user 模块应用(Spring Boot 应用)接收到登录请求,处理登录逻辑,如验证用户名和密码、生成令牌等。
  5. 返回响应:处理完登录请求后,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(比如说用户,支付,购物车模块)