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

Kubernetes中Ingress控制器能否实现内部负载均衡?

Kubernetes Ingress 内部负载均衡的可行性与自建集群部署指南

核心结论

你的思路完全可行:仅依靠Ingress控制器就能实现集群内部的负载均衡,无需对接云厂商的外部负载均衡器。云环境中的“两层负载”是对外暴露服务的场景需求,并非Ingress的必要依赖。

概念澄清

首先纠正两个容易混淆的点:

  • Ingress ≠ 负载均衡器:Ingress只是K8s的API资源,用来定义HTTP/HTTPS路由规则;真正实现负载转发逻辑的是Ingress控制器(比如Nginx、HAProxy的Ingress实现)。
  • 云环境的“两层负载”是对外暴露的方案:云厂商的外部LB负责将公网流量分发到集群节点,Ingress控制器负责将节点流量转发到后端Pod。但内部负载场景下,完全可以跳过外部LB这一层。

自建集群(如Vagrant)实现Ingress内部负载的两种方式

1. ClusterIP模式(仅集群内部可访问)

将Ingress控制器的Service设置为ClusterIP类型,此时只有集群内的Pod或节点能通过ClusterIP访问Ingress控制器,实现纯内部的七层负载均衡:

  • 部署Nginx Ingress控制器时指定Service类型:
    helm install nginx-ingress ingress-nginx/ingress-nginx --set service.type=ClusterIP
    
  • 集群内的Pod可以直接通过Ingress控制器的ClusterIP访问,或者通过Ingress规则中定义的域名(需配置集群内部DNS)访问。

2. NodePort模式(集群节点外部可访问,无需公网LB)

如果需要从Vagrant虚拟机外部(比如你的本地主机)测试Ingress的负载规则,可以将Ingress控制器的Service设置为NodePort类型:

  • 部署命令:
    helm install nginx-ingress ingress-nginx/ingress-nginx --set service.type=NodePort
    
  • 查看分配的NodePort端口:
    kubectl get svc nginx-ingress-ingress-nginx-controller
    
    输出会显示类似30080:80/TCP的端口映射,此时用任意Vagrant节点的IP+30080端口,就能访问Ingress规则对应的后端服务。

解决你遇到的「Ingress无外部IP」问题

在自建集群(如Vagrant)中,LoadBalancer类型的Service默认不会自动分配外部IP——这个功能是云厂商通过自身的LB组件实现的,自建集群没有对应的基础设施支持。所以你需要:

  1. 卸载现有配置错误的Ingress控制器:
    helm uninstall nginx-ingress
    
  2. 重新部署时指定service.type=NodePort或service.type=ClusterIP,就能避免“无外部IP”的问题。

补充:内部负载均衡的完整链路

当你用Ingress控制器做内部负载时,流量链路是:
集群内客户端/节点 → Ingress控制器(七层路由+负载) → 后端Service(四层Pod负载) → 目标Pod
这个链路完全不需要外部负载均衡器,就能实现Pod间的负载分发。

内容的提问来源于stack exchange,提问作者Inês Gomes

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 16:57:31