You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于AWS EKS与ELB的Spring Boot微服务通用负载均衡配置问询

微服务迁移至AWS EKS的负载均衡配置问题

问题描述

我正基于Spring Boot、Hibernate、Docker及Kubernetes技术栈,将单体应用迁移至微服务架构。后端包含10个项目,共120个微服务端点,每个Spring Boot项目平均含10-12个端点,计划部署于AWS EKS集群并使用ELB负载均衡。

存在以下困惑:

  1. 若需通过loadbalancer-ip/domain/module/end-point访问所有微服务,如何在EKS集群中配置通用负载均衡?
  2. 我尝试通过在部署yml文件中添加ingress实现应用负载均衡,是否需要为10个Spring Boot项目分别配置Ingress,还是可直接在AWS控制台的ELB配置中添加target组?

补充说明:Asset、Communications、Admin为三个独立Spring Boot项目,各含不同端点,期望实现如下访问格式:
Loadbalancer-ip:port1/asset/loadasset
Loadbalancer-ip:port2/communication/loademails
Loadbalancer-ip:port3/admin/loadadmin
即所有项目通过同一负载均衡访问,URL按业务域区分,恳请提供相关配置指导。


问题解答

1. 通用负载均衡配置方案

在EKS中实现统一负载均衡按路径/端口区分微服务,核心是使用AWS Load Balancer Controller(官方适配AWS ELB/NLB的Ingress Controller)配合单个Ingress资源,而非直接手动操作ELB控制台。具体步骤如下:

方案A:按URL路径区分(单端口)

这种方案用同一端口,通过路径前缀区分不同业务域,符合loadbalancer-ip/asset/loadasset格式:

  1. 为每个Spring Boot项目部署Kubernetes Deployment,并暴露为ClusterIP类型的Service(无需单独创建LoadBalancer Service,避免每个服务生成独立ELB)。
  2. 创建统一Ingress资源,通过path规则路由到对应Service:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: unified-microservices-ingress
  annotations:
    alb.ingress.kubernetes.io/scheme: internet-facing
    alb.ingress.kubernetes.io/target-type: ip
    # 若需路径重写(比如服务本身无/asset前缀),添加:
    # alb.ingress.kubernetes.io/rewrite-target: /$2
    # alb.ingress.kubernetes.io/conditions.asset: "path-prefix('/asset')"
spec:
  ingressClassName: alb
  rules:
    - http:
        paths:
          - path: /asset/*
            pathType: Prefix
            backend:
              service:
                name: asset-service
                port:
                  number: 8080
          - path: /communication/*
            pathType: Prefix
            backend:
              service:
                name: communication-service
                port:
                  number: 8080
          - path: /admin/*
            pathType: Prefix
            backend:
              service:
                name: admin-service
                port:
                  number: 8080

注:如果你的Spring Boot服务本身未配置server.servlet.context-path=/asset,需要添加路径重写注解,确保请求能正确转发到服务端点。

方案B:按端口区分(多端口)

对应你补充说明的loadbalancer-ip:port1/asset/loadasset格式,通过ALB多监听端口区分业务域:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: unified-microservices-ingress
  annotations:
    alb.ingress.kubernetes.io/scheme: internet-facing
    alb.ingress.kubernetes.io/target-type: ip
spec:
  ingressClassName: alb
  rules:
    - http:
        port:
          number: 8081
        paths:
          - path: /*
            pathType: Prefix
            backend:
              service:
                name: asset-service
                port:
                  number: 8080
    - http:
        port:
          number: 8082
        paths:
          - path: /*
            pathType: Prefix
            backend:
              service:
                name: communication-service
                port:
                  number: 8080
    - http:
        port:
          number: 8083
        paths:
          - path: /*
            pathType: Prefix
            backend:
              service:
                name: admin-service
                port:
                  number: 8080

此时ALB会自动创建3个监听端口,分别对应三个微服务,访问时直接通过端口区分业务域。

2. Ingress配置方式选择

不需要为10个项目分别配置Ingress,推荐用单个Ingress资源统一管理所有路由规则,原因如下:

  • 符合Kubernetes声明式管理理念,路由规则集中维护,便于修改和排查问题。
  • AWS Load Balancer Controller会自动同步Ingress规则到ALB和对应的target组,无需手动在控制台操作,避免集群扩缩容、服务变更时的配置不一致。

直接在AWS控制台操作ELB target组虽然可行,但脱离了Kubernetes的资源管理体系,后续维护成本极高,不推荐。


关键注意事项

  • 确保AWS Load Balancer Controller已正确部署到EKS集群,且集群节点拥有足够IAM权限创建、管理ALB和target组。
  • 若使用路径重写,需验证路径规则与Spring Boot服务的上下文路径匹配,避免404错误。

内容的提问来源于stack exchange,提问作者Mr.DevEng

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 00:58:24