当前位置: 首页 > news >正文

MetalLB才是给Ingress这个老登做负重前行的那个男人

前文ingress这个老6, 记录了我对于ingress-nginx的默认部署方式的认知:

在集群内产生nginx服务,与集群内服务互访,利用nginx 走7层转发;
产生的nginx服务对外以nodeport形式暴露。

但是读者也发现了这种默认的ingress-nginx并没有解决:

  • 节点负载均衡
  • 端口受限,且不够优雅的问题

所以文章说ingress前面还得有一个负载均衡器。

这个鸡生蛋,蛋生鸡的问题还是得从k8s原教旨找答案。

1. nodeport vs loadbalancer

k8s 提供多种服务对外暴露的能力选项:

  • nodeport:某个节点上的端口被用于路由请求到某一个后端服务,端口范围是30000-32767,所以你不能通过NodePort像80或443端口这样常见的端口。

  • loadbalancer:是一项服务,通常由云服务提供商作为外部服务实现(需额外付费);但是,loadbalancer也可采用MetalLB这样的软件负载均衡方案来安装到自建k8s集群, 这也是本文我要强化的技术漏洞。
    loadbalancer 提供了单一ip(跨多节点的)来访问upstream 服务的能力。

那我们为什么还要ingress?

ingress本身是一个nginx svc,提供了统一的入站请求规则入口,收敛了访问k8s内部服务的能力。规则可以是uri、path、host name、https。

2.ingress nginx controller

ingress nginx controller 是一个流行的ingress。

既然ingress也是一个k8s服务(收敛了upstream服务的访问能力), 那么上面k8s对外暴露服务的两种方式 也可以作用在 ingress上,打通整个南北链路。

2.1 以nodeport形式安装ingress

这是最简单的安装形式, 通过安装我们能看到产生的的svc(nodeport形式)和deploy(nginx pod)。

kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.1.3/deploy/static/provider/baremetal/deploy.yaml

image

使用nodeport给出的端口访问这个ingress-nginx。

curl <worker_external_ip>:<node_port>

访问上游服务,可通过curl <worker-external-ip>:<node-port> -H 'Host: web.example.com'

这种也是上文着重聊的ingress基础原理,但是很明显,nodeport形式暴露的服务达不到生产级别。

2.2 使用loadbalancer形式安装ingress

我的误区是认为:只有云上k8s才能以loadbalancer形式暴露服务。

实际上在自建k8s集群,MetalLB这种软件负载均衡器也是同样的作用。

image

在自建k8s集群,第一步是使用MetalLB提供loadbalancer能力。

  1. 我们先来验证k8s集群是否有 loadbalancer能力。

kubectl apply -f example-lb.yaml

apiVersion: v1
kind: Service
metadata:name: example-load-balancer
spec:selector:app: webports:- protocol: TCPport: 80targetPort: 80type: LoadBalancer

执行下列命令,kubectl get service example-load-balancer, 你会看到一个external ip

如果云上/自建k8s集群没有loadbalancer能力, 你将看不到 externalip, 将会显示pending

验证有效,那么咱们就可以把ingress-nginx svc改成这个形式对外暴露。

  1. 修改ingres-nginx svc为loadbalancer形式

kubectl edit svc ingress-nginx-controller -n ingress-nginx

---> 关注spec.type

  1. 使用 external-ip 访问服务
  • curl

  • curl -H 'Host: web.example.com'


3. 聚焦MetalLB

Why:

k8s并没有为裸金属k8s集群 提供网络负载均衡器 (svc type = loadbalancer),k8s源码中的loadbalancer是为云服务商提供的胶水代码。

如果你不是在受支持的IaaS云平台(GCP、AWS、Azure 等)上运行k8s,创建的负载均衡器将保持“pending”状态。

裸金属k8s集群的操作员只有使用“NodePort”和“externalIPs服务”将用户流量引入他们的集群,
这两种选项在生产环境中都有显著的缺点,这使得裸金属集群在 Kubernetes 生态系统中成为二等公民。

MetalLB 旨在通过提供一种可与标准网络设备集成的网络负载均衡器实现方案来纠正这种失衡,使裸金属k8s集群上也能“开箱即用”地使用loadbalancer服务能力。

MetalLB做了两个事情:

  1. 地址分配(controller): 当创建loadbalancer类型的服务时,MetalLb为其分配ip,这个ip是从预先分配的ip地址池中获取的。
    当服务删除时, 已分配的ip也会被回收。

  2. 对外广播(speaker): 给服务分配ip地址后,要让集群外的网络知道这个地址的存在,MetalLB使用了标准路由协议:ARP、NDP、BGP。

有两种模式:L2、BGP, 区别在于IP通告的方式不一样。

Layer2 模式是一种基础、通用的实现,能用易用,但是有局限(单点瓶颈和故障转移慢);

BGP模式 有依赖有门槛,尽量用,用不了用L2模式。


注意MetalLB在安装时要先修改 kube-proxy配置

总结

  • k8s 对外暴露服务的方式:只有nodeport 和loadbalancer

  • loadbalancer 可以是云上提供,也可以是以软件负载均衡器MetalLB来自建,

    -- MetalLB行为: 从地址池分配IP给服务;对外公告IP

  • ingress 本身不是一个对外暴露服务的最佳生产实践,它的重点是一个规则入口收敛了众多upstream的服务访问, 它本身是一个 nginx svc,故做成loadbalancer形式就做到了统一对外暴露upstream服务。

http://www.jsqmd.com/news/501411/

相关文章:

  • 避坑指南:在CentOS 7上搞定Synopsys DC 2019.03安装与License配置(附常见错误修复)
  • MCP协议对接VS Code插件实战:从零部署到生产级调试,7步搞定CI/CD无缝集成
  • 超实用攻略!GEO源码搭建从0搭建完整项目,GEO源码搭建经验技巧
  • MusePublic生成质量实测:面部结构准确率与光影一致性分析
  • 双平板热压机性价比排名:好用不贵的品牌怎么挑 - 品牌推荐大师1
  • PCIE接口全解析:从X1到X16,硬件工程师必备的引脚定义指南
  • 黄仁勋:龙虾就是新操作系统!英伟达7种芯片拼出算力怪兽,放话2027营收万亿美元
  • 终极指南:如何用League Director轻松制作英雄联盟专业级游戏视频
  • Windows下OpenUtau音乐制作全攻略:从安装到调校一首完整歌曲
  • FLUX.1文生图实战应用:为自媒体、电商快速生成高质量视觉内容
  • MCP 2026新规落地倒计时:医疗机构数据加密、审计日志、跨境传输这3道关卡,你过了几道?
  • 告别重复造轮子:用快马ai高效生成可复用的python爬虫模板
  • 微信立减金别浪费!60% 人中招,这样盘活秒变现金 - 可可收
  • 【实战解析】GD32 KEIL中SWD识别失败与Jlink下载难题的全面排查
  • AcousticSense AI完整指南:端口检查、进程监控、异常日志定位全流程
  • Zotero插件市场:在Zotero内一站式管理所有扩展的终极解决方案
  • 新手零基础入门:用快马一键生成SpringBoot+Vue前后端分离实战项目
  • Flutter开发环境极速配置:用VS Code 5分钟搞定跨平台调试(含iOS模拟器冷启动技巧)
  • 华为HCIA-AI V3.5考试通关秘籍:这些高频错题你踩坑了吗?
  • 开箱即用:DeepSeek-R1体验最佳的Llama3对话镜像使用教程
  • Gradio API深度解析:解锁Gemma-3-12B-IT的编程调用能力
  • 新手福音:告别复杂激活,在快马用自然语言描述即可生成你的第一个代码项目
  • Phi-3-mini-128k-instruct技术面试模拟实战:应对Java八股文与系统设计
  • EagleEye实战体验:DAMO-YOLO TinyNAS毫秒级检测效果实测
  • Qwen3-0.6B-FP8效果展示:中英混合输入(如‘用Python写冒泡排序,注释用中文’)
  • Zotero插件市场:一键安装管理所有扩展,提升科研效率300%
  • SEER‘S EYE预言家之眼模拟商业谈判场景:AI在博弈论中的策略分析应用
  • 软萌拆拆屋效果展示:国潮风(水墨+书法+印章)文化元素拆解
  • 罗技鼠标宏精准射击全攻略:从入门到专家的系统指南
  • Qwen3-VL-8B多模态工具5分钟快速部署:零基础搭建本地视觉问答助手