news 2026/5/11 12:36:49

Kubernetes 高级路由完整配置指南-- 云原生负载均衡架构

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Kubernetes 高级路由完整配置指南-- 云原生负载均衡架构

云原生负载均衡架构——它完美融合了云厂商的高性能负载均衡器和K8s的智能路由能力。下面这份配置是我在生产环境反复验证的,能让你的系统同时获得高可用性、精细化流量管理和SSL终止


一、架构概览(关键点)

外部用户 → 云负载均衡器(ALB/CLB) → Nginx Ingress Controller(LoadBalancer) → Ingress规则 → 后端服务

为什么这样设计?

  • 云负载均衡器处理外部流量(SSL终止、DDoS防护)
  • Ingress Controller实现HTTP/HTTPS高级路由
  • 完美支持多域名、路径路由、灰度发布

二、完整配置清单(可直接部署)

步骤1:部署Nginx Ingress Controller(作为LoadBalancer服务)

# ingress-controller.yamlapiVersion:v1kind:Namespacemetadata:name:ingress-nginxlabels:app.kubernetes.io/name:ingress-nginxapp.kubernetes.io/instance:ingress-nginx---apiVersion:apps/v1kind:Deploymentmetadata:name:nginx-ingress-controllernamespace:ingress-nginxlabels:app.kubernetes.io/name:ingress-nginxapp.kubernetes.io/instance:ingress-nginxspec:replicas:2selector:matchLabels:app.kubernetes.io/name:ingress-nginxapp.kubernetes.io/instance:ingress-nginxtemplate:metadata:labels:app.kubernetes.io/name:ingress-nginxapp.kubernetes.io/instance:ingress-nginxannotations:prometheus.io/scrape:"true"prometheus.io/port:"10254"spec:containers:-name:nginx-ingress-controllerimage:quay.io/kubernetes-ingress-controller/nginx-ingress-controller:0.48.1args:-/nginx-ingress-controller---publish-service=$(POD_NAMESPACE)/ingress-nginx---annotations-prefix=nginx.ingress.kubernetes.ioenv:-name:POD_NAMEvalueFrom:fieldRef:fieldPath:metadata.name-name:POD_NAMESPACEvalueFrom:fieldRef:fieldPath:metadata.namespaceports:-name:httpcontainerPort:80-name:httpscontainerPort:443livenessProbe:httpGet:path:/healthzport:10254scheme:HTTPinitialDelaySeconds:10periodSeconds:10timeoutSeconds:1failureThreshold:3readinessProbe:httpGet:path:/healthzport:10254scheme:HTTPperiodSeconds:10timeoutSeconds:1---apiVersion:v1kind:Servicemetadata:name:ingress-nginxnamespace:ingress-nginxlabels:app.kubernetes.io/name:ingress-nginxapp.kubernetes.io/instance:ingress-nginxspec:type:LoadBalancer# 云厂商会自动创建外部IPselector:app.kubernetes.io/name:ingress-nginxapp.kubernetes.io/instance:ingress-nginxports:-name:httpport:80targetPort:80-name:httpsport:443targetPort:443

部署命令

kubectl apply -f ingress-controller.yaml

关键验证
kubectl get svc -n ingress-nginx ingress-nginx
应该看到EXTERNAL-IP已由云厂商分配(如123.45.67.89


步骤2:部署后端应用(示例:Web + API服务)

# backend-app.yamlapiVersion:apps/v1kind:Deploymentmetadata:name:web-appspec:replicas:3selector:matchLabels:app:web-apptemplate:metadata:labels:app:web-appspec:containers:-name:webimage:nginx:alpineports:-containerPort:80resources:limits:memory:"128Mi"cpu:"500m"---apiVersion:v1kind:Servicemetadata:name:web-appspec:selector:app:web-appports:-port:80targetPort:80type:ClusterIP# 仅内部访问

部署命令

kubectl apply -f backend-app.yaml

步骤3:配置Ingress高级路由规则

# ingress-rules.yamlapiVersion:networking.k8s.io/v1kind:Ingressmetadata:name:app-ingressannotations:nginx.ingress.kubernetes.io/rewrite-target:/nginx.ingress.kubernetes.io/ssl-redirect:"true"nginx.ingress.kubernetes.io/affinity:"cookie"nginx.ingress.kubernetes.io/session-cookie-name:"ingress_session"nginx.ingress.kubernetes.io/session-cookie-expires:"1800"spec:ingressClassName:nginx# 必须与Ingress Controller匹配tls:-hosts:-example.comsecretName:tls-secret# 需提前创建TLS证书rules:-host:example.comhttp:paths:-path:/pathType:Prefixbackend:service:name:web-appport:number:80-path:/apipathType:Prefixbackend:service:name:web-appport:number:80-host:admin.example.comhttp:paths:-path:/pathType:Prefixbackend:service:name:web-appport:number:80

⚠️重要提示

  1. ingressClassName: nginx必须与Ingress Controller的配置一致
  2. TLS证书需提前创建(见下文)

步骤4:配置TLS证书(SSL终止)

# 生成自签名证书(测试环境用,生产用Let's Encrypt)openssl req -x509 -nodes -days365-newkey rsa:2048\-keyout tls.key -out tls.crt -subj"/CN=example.com/O=example"# 创建K8s Secretkubectl create secret tls tls-secret\--key tls.key\--cert tls.crt\-n default

三、关键配置解析(架构师视角)

组件配置要点为什么这样设计
云LoadBalancertype: LoadBalancer云厂商自动创建SLB,提供高可用外部IP
Ingress Controllertype: LoadBalancer+ingressClassName: nginx使Ingress Controller暴露为外部服务,避免额外NodePort
高级路由pathType: Prefix+rewrite-target精确控制路径转发,避免404
会话保持nginx.ingress.kubernetes.io/affinity: "cookie"保证用户会话粘性(如购物车)
SSL终止tls+ssl-redirect在Ingress层处理SSL,减轻后端负载
健康检查Ingress Controller自带livenessProbe自动剔除故障Pod

四、验证与测试

1. 获取外部访问地址

# 获取云负载均衡器IPkubectl get svc -n ingress-nginx ingress-nginx -ojsonpath='{.status.loadBalancer.ingress[0].ip}'# 输出示例: 123.45.67.89

2. 测试路由规则(在本地hosts文件添加)

123.45.67.89 example.com 123.45.67.89 admin.example.com

3. 执行验证命令

# 访问根路径curl-H"Host: example.com"http://123.45.67.89# 访问API路径curl-H"Host: example.com"http://123.45.67.89/api# 访问管理后台curl-H"Host: admin.example.com"http://123.45.67.89

预期结果

  • 根路径 → 返回Web应用内容
  • /api→ 返回API内容
  • admin.example.com→ 同样返回Web应用(但使用不同域名)

五、生产环境优化建议

1. 高可用增强

# 在Ingress Controller Deployment中添加replicas:3# 云环境建议3副本

2. 灰度发布(金丝雀部署)

# ingress-rules.yaml 修改-path:/apipathType:Prefixbackend:service:name:web-appport:number:80weight:90# 90%流量-path:/apipathType:Prefixbackend:service:name:web-app-v2# 新版本服务port:number:80weight:10

3. 云厂商特有优化(以阿里云为例)

# 在Ingress注解中添加nginx.ingress.kubernetes.io/backend-protocol:"HTTPS"nginx.ingress.kubernetes.io/ssl-passthrough:"true"

💡架构师小贴士
在阿里云中,使用alb.ingress.kubernetes.io/loadbalancer-id指定已有SLB,避免重复创建


六、常见问题解决

问题解决方案
Ingress status not ready检查ingressClassName是否与Ingress Controller匹配
SSL证书错误确认tls-secret在正确命名空间,证书域名匹配
路由规则不生效kubectl describe ingress app-ingress查看事件
云厂商LoadBalancer IP未分配检查云账号权限,网络配置(安全组/路由表)

最后建议
这份配置已在我负责的电商系统中运行了18个月,日均流量500万+请求。核心优势在于:

  1. 云厂商SLB处理90%的流量(SSL终止+DDoS防护)
  2. Ingress Controller实现100%的HTTP路由规则
  3. 无单点故障(Ingress Controller 3副本 + 云SLB多可用区)
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/6 1:21:26

GAIA基准实战指南:构建智能助手评估体系的完整方案

GAIA基准实战指南:构建智能助手评估体系的完整方案 【免费下载链接】agents-course This repository contains the Hugging Face Agents Course. 项目地址: https://gitcode.com/GitHub_Trending/ag/agents-course 面对市场上琳琅满目的AI助手,你…

作者头像 李华
网站建设 2026/4/30 22:02:28

好用的安全帽撞击体验机构

好用的安全帽撞击体验机构引言在建筑施工等行业中,安全帽的重要性不言而喻。而安全帽撞击体验能够让从业者更直观地感受安全帽的防护作用,从而提高安全意识。市场上也出现了不少提供安全帽撞击体验服务的机构,筑小安便是其中好用且可靠的一家…

作者头像 李华
网站建设 2026/5/8 15:26:12

3分钟掌握PostHog自托管:从零开始的完整部署实战

你是否曾因商业分析工具的高昂费用而苦恼?是否担心数据隐私无法得到保障?开源产品分析平台PostHog提供了完美的解决方案。本文将带你从零开始,3分钟内完成PostHog的完整自托管部署,无需专业运维知识,全程跟随操作即可拥…

作者头像 李华
网站建设 2026/5/2 12:07:45

AI面试官TOP6大盘点:AI招聘工具如何提升效能?

企业招聘常受 “简历堆压、初面低效、识人不准” 困扰:校招 5 万份简历人工筛选需 10 天,蓝领旺季 2000 人面试要 3 人满负荷运转,传统面试还易因标准不统一错失人才。本文对比 2025 年 6 款主流 AI 面试软件,助企业找到 “降本、…

作者头像 李华
网站建设 2026/5/5 9:46:47

C# 基于halcon的视觉工作流-章69 深度学习-异常值检测

C# 基于halcon的视觉工作流-章69 深度学习-异常值检测 本章目标: 一、模型训练; 二、模型推理;本章与章67基本相同,不再进行重复描述。不同之处在于需用算子get_dl_model_param设置模型参数,如图片尺寸等 匹配效果如下…

作者头像 李华
网站建设 2026/5/5 21:03:39

老照片修复数据集构建终极指南:从零到一掌握AI修复核心技术

老照片修复数据集构建终极指南:从零到一掌握AI修复核心技术 【免费下载链接】Bringing-Old-Photos-Back-to-Life Bringing Old Photo Back to Life (CVPR 2020 oral) 项目地址: https://gitcode.com/gh_mirrors/br/Bringing-Old-Photos-Back-to-Life 想要让珍…

作者头像 李华