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

如何通过Ingress在集群中为多节点上的多主机部署复用单个LoadBalancer

用Ingress实现多服务共享单个LoadBalancer的方案

问题1:如何通过Ingress让多节点服务共用一个负载均衡器?

Ingress是Kubernetes中专门统一管理外部访问路由的核心资源,核心逻辑是通过单个Ingress Controller的LoadBalancer Service作为唯一入口,将不同域名/路径的请求转发到集群内对应的后端服务。具体操作步骤:

  1. 部署Ingress Controller
    选择主流Ingress Controller(比如Nginx Ingress),部署完成后它会自动创建一个LoadBalancer类型的Service,该Service会获取集群提供商分配的公网IP,这就是所有服务的统一访问入口。

  2. 为每个服务配置Ingress规则
    针对每个需要暴露的服务,创建独立的Ingress资源,通过spec.rules.host字段指定唯一域名,指向对应后端的ClusterIP Service。所有Ingress规则都会被Ingress Controller识别,流量统一通过同一个LoadBalancer转发。

  3. 配置域名解析
    将所有需要暴露的域名,统一解析到Ingress Controller对应的LoadBalancer公网IP上。


问题2:解决Helm多Release重复创建LoadBalancer的问题

你的问题根源是当前Helm Chart中,每个Release都会创建独立的LoadBalancer Service。要实现共享单个LB,需调整Chart的资源定义:

  1. 修改Service类型为ClusterIP
    移除Chart中LoadBalancer类型的Service定义,替换为ClusterIP类型——这样每个Release的服务仅在集群内部可见,不会单独申请新的LB资源。

  2. 在Chart中添加Ingress模板
    在Chart的templates目录下新增Ingress模板文件,根据values配置生成对应域名的路由规则。示例模板:

    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      name: {{ .Release.Name }}-ingress
      annotations:
        nginx.ingress.kubernetes.io/rewrite-target: /
    spec:
      rules:
      - host: {{ .Values.ingress.host }}
        http:
          paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: {{ .Release.Name }}-service
                port:
                  number: {{ .Values.service.port }}
    
  3. 在values文件中配置Ingress参数
    分别在host1-value.yaml和host2-value.yaml中指定各自的域名:

    # host1-value.yaml
    service:
      port: 80
    ingress:
      host: host1.example.com
    
    # host2-value.yaml
    service:
      port: 80
    ingress:
      host: host2.example.com
    
  4. 统一部署Ingress Controller
    单独部署一套Ingress Controller(不要包含在业务Chart中),确保它的LoadBalancer是集群内唯一的流量入口。

调整后,每个Helm Release只会创建ClusterIP Service和对应的Ingress规则,所有流量都通过同一个Ingress Controller的LoadBalancer进入,不会重复生成LB资源。

额外注意事项

  • 确保Ingress Controller拥有足够的RBAC权限,能读取集群内所有Ingress和Service资源。
  • 如果需要HTTPS访问,可以在Ingress资源中配置TLS证书,统一由LoadBalancer处理SSL终止。
  • 用{{ .Release.Name }}作为Service和Ingress名称的前缀,避免多Release之间的资源命名冲突。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 03:30:46