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

如何使用Kubernetes Ingress访问多服务并复用单个LoadBalancer

问题解答

可行性结论

完全可以通过Ingress实现该需求,这也是多租户K8s集群统一暴露服务的标准实践,仅需1个LoadBalancer即可承载所有客户的访问流量,可大幅降低资源消耗和运维成本。

核心实现原理

你只需要在集群中部署一套Ingress Controller(常用的如Nginx Ingress Controller),为该Ingress Controller分配唯一的LoadBalancer,所有外部访问流量都会先经过这个LB进入Ingress Controller,再由Controller根据预设的路由规则转发到对应客户Namespace下的前端/后端服务。

你可以根据业务需求选择两种路由规则配置方案:

  • 基于子域名的路由:为每个客户分配独立的子域名,例如tenant1.example.com、tenant2.example.com,Ingress规则匹配到对应子域名后,直接转发到对应Namespace下的front-end Service;如果需要暴露后端接口,可额外配置路径规则,将*/api/*前缀的请求转发到同Namespace下的back-end Service。
  • 基于路径前缀的路由:如果不想申请大量子域名,可通过路径前缀区分客户,例如/tenant1/*的请求转发到租户1的前端服务,/tenant1/api/*的请求转发到租户1的后端服务,配合Ingress的重写注解去掉前缀后再转发到后端服务即可。

关键注意事项

  • 规则管理:你可以选择在每个客户的Namespace下单独创建该租户的Ingress规则,Ingress Controller会默认自动识别全集群所有Namespace下的Ingress资源,无需额外配置。
  • 租户隔离:如果需要避免租户间的配置冲突,可以开启Ingress Controller的租户隔离参数,限制每个Namespace下的Ingress规则仅能引用本Namespace内的Service资源。
  • 容量扩展:后续客户量级增长后,可直接对Ingress Controller做水平扩容,前端的单个LoadBalancer会自动将流量负载到多个Ingress Controller实例上,不需要新增LB资源。

配置示例(Nginx Ingress Controller)

以下是租户Namespace tenant-a 下的Ingress配置样例,基于子域名路由,同时适配前端和后端服务的转发:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: tenant-a-ingress
  namespace: tenant-a
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /$1
spec:
  rules:
  - host: tenant-a.yourdomain.com
    http:
      paths:
      - path: /(.*)
        pathType: Prefix
        backend:
          service:
            name: front-end-svc
            port:
              number: 80
      - path: /api/(.*)
        pathType: Prefix
        backend:
          service:
            name: back-end-svc
            port:
              number: 8080

所有租户都按上述格式在自己的Namespace下创建Ingress资源即可,全程共用1个LoadBalancer资源。


内容的提问来源于stack exchange,提问作者Dusty

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 21:27:03