在Kubernetes集群中,若无法使用外部负载均衡器,可通过以下方式实现服务暴露和流量管理:
-
NodePort Service:
- 将Service类型设为NodePort,Kubernetes会在所有节点上分配固定端口(默认30000-32767),外部流量通过任意节点IP:Port访问服务。
- 需配合节点层面的负载均衡策略(如DNS轮询、客户端重试)或手动维护节点IP列表。
-
Ingress Controller:
- 部署Nginx、Traefik等Ingress Controller,通过NodePort或hostNetwork模式暴露。
- 结合DNS解析(如A记录指向所有节点IP),由Ingress实现HTTP/HTTPS层路由及负载均衡。
-
MetalLB(裸机场景):
- 在物理机/私有云中,MetalLB通过ARP或BGP协议为LoadBalancer类型Service分配本地IP,模拟云环境LB行为。
-
ClusterIP + 内部DNS:
- 默认ClusterIP服务通过kube-proxy实现集群内负载均衡,结合CoreDNS实现服务间内部通信。
-
Keepalived/HAProxy组合:
- 在外部节点部署HAProxy作为软负载均衡器,配合Keepalived实现VIP漂移,提供高可用入口。
注意事项:NodePort需开放防火墙端口;Ingress需维护路由规则;MetalLB依赖L2/BGP网络配置;自建LB方案需考虑运维复杂度。核心在于通过Kubernetes原生功能或轻量级工具替代外部LB的流量分发能力。