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

Kubernetes Ingress 完全解析:从原理到实战的外部流量接入方案

Kubernetes Ingress 完全解析:从原理到实战的外部流量接入方案

一、开篇:为什么需要 Ingress?

Kubernetes 中 Pod 和 Service 仅能在集群内部访问,外部流量接入面临三大痛点:

  • 多服务暴露需多个 LoadBalancer,成本高且难管理;

  • 缺乏 HTTP/HTTPS 层路由(如域名、路径转发);

  • 无统一的 SSL 终结、虚拟主机配置能力。

Ingress 应运而生—— 它是 Kubernetes 中管理外部访问集群服务的 API 对象,本质是「七层负载均衡规则集合」,通过 Ingress Controller 实现流量路由,解决上述痛点:

HTTP/HTTPS 流量

路由规则

互联网

Ingress Controller

Ingress 配置

Service A

Service B

Service C

Pod 集群

Pod 集群

Pod 集群

二、核心概念:Ingress 关键组件与原理

2.1 两大核心组件
  1. Ingress 资源:定义路由规则(域名、路径、后端服务映射),是「声明式配置」;

  2. Ingress Controller:实现路由规则的核心组件(如 Nginx、Traefik),需单独部署,无 Controller 则 Ingress 配置无效。

关键区别:Ingress 是「规则」,Controller 是「执行器」—— 类比:Ingress 是交通信号灯,Controller 是交警,二者缺一不可。

2.2 核心功能清单
  • 基于域名的虚拟主机路由(多个域名共享一个 IP);

  • 基于路径的流量转发(同一域名下不同路径映射不同服务);

  • SSL/TLS 终结(统一管理证书,无需每个服务单独配置);

  • 负载均衡(内置 L7 层负载均衡策略);

  • 默认后端(处理无匹配规则的流量,如 404 页面)。

2.3 与其他暴露方案的对比(选型关键)
方案层级核心优势缺点适用场景
Ingress(推荐)L7(应用层)单 IP 暴露多服务、支持域名 / 路径路由、SSL 终结需部署 Controller,配置稍复杂生产环境、多服务暴露、HTTPS 需求
NodePortL4(传输层)配置简单、无额外组件依赖端口范围限制(30000-32767)、节点 IP 动态变化测试环境、临时暴露服务
LoadBalancerL4(传输层)云厂商托管、高可用单服务一个 LB、成本高、无 L7 路由能力单服务暴露、对成本不敏感
Port ProxyL4(传输层)直接代理 Pod,无需 Service无负载均衡、稳定性差调试场景、临时访问

三、实战步骤:Ingress 核心配置与操作

3.1 先决条件
  1. 集群版本 ≥ Kubernetes 1.1(Ingress 最低支持版本);

  2. 部署 Ingress Controller(如 Nginx、Traefik),云厂商集群(GKE/EKS/AKS)通常默认内置。

3.2 四种核心 Ingress 配置实战
3.2.1 基础配置:单路径路由

http://<Ingress-IP>/testpath转发到test:80服务:

apiVersion: extensions/v1beta1 kind: Ingress metadata: name: test-ingress spec: rules: - http: paths: - path: /testpath # 匹配路径 backend: serviceName: test # 目标服务名 servicePort: 80 # 目标服务端口

创建并验证:

kubectl apply -f ingress.yaml kubectl get ing test-ingress # 输出:NAME RULE BACKEND ADDRESS # test-ingress - test:80 10.xx.xx.xx
3.2.2 多路径路由:同一域名下多服务转发

http://foo.bar.com/foo转发到s1:80http://foo.bar.com/bar转发到s2:80

apiVersion: extensions/v1beta1 kind: Ingress metadata: name: multi-path-ingress spec: rules: - host: foo.bar.com # 绑定域名(需解析到 Ingress IP) http: paths: - path: /foo backend: serviceName: s1 servicePort: 80 - path: /bar backend: serviceName: s2 servicePort: 80
3.2.3 基于名称的虚拟主机:多域名共享 IP

同一 Ingress IP 绑定两个域名,分别转发到不同服务:

apiVersion: extensions/v1beta1 kind: Ingress metadata: name: virtual-host-ingress spec: rules: - host: foo.bar.com # 域名1 http: paths: - backend: serviceName: s1 servicePort: 80 - host: bar.foo.com # 域名2 http: paths: - backend: serviceName: s2 servicePort: 80

核心原理:通过 HTTP 请求头中的

Host

字段匹配路由。

3.2.4 TLS 加密:HTTPS 终结配置
  1. 先创建 TLS 证书 Secret:
apiVersion: v1 kind: Secret metadata: name: tls-secret type: Opaque data: tls.crt: 基础64编码的证书内容 # echo -n "证书内容" | base64 tls.key: 基础64编码的私钥内容
  1. Ingress 引用 Secret 启用 HTTPS:
apiVersion: extensions/v1beta1 kind: Ingress metadata: name: tls-ingress spec: tls: - secretName: tls-secret # 引用 TLS Secret rules: - host: foo.bar.com http: paths: - backend: serviceName: s1 servicePort: 80

关键特性:支持 SNI 扩展,同一端口可绑定多个 HTTPS 域名。

3.3 常用运维操作
3.3.1 更新 Ingress 规则
# 编辑现有 Ingress 配置 kubectl edit ing test-ingress # 或替换配置文件 kubectl replace -f updated-ingress.yaml
3.3.2 查看 Ingress 状态与规则
# 查看基本信息 kubectl get ing # 查看详细路由规则 kubectl describe ing test-ingress
3.3.3 删除 Ingress
kubectl delete ing test-ingress # 注意:仅删除规则,不影响后端 Service 和 Pod

四、高级特性:Ingress 进阶用法

4.1 分区路由(金丝雀发布)

通过annotations配置(以 Nginx Ingress 为例):

metadata: name: canary-ingress annotations: nginx.ingress.kubernetes.io/canary: "true" nginx.ingress.kubernetes.io/canary-weight: "10" # 10% 流量转发到金丝雀服务 spec: rules: - host: foo.bar.com http: paths: - backend: serviceName: s1-canary servicePort: 80
4.2 默认后端配置

处理无匹配规则的流量(如返回 404):

spec: backend: serviceName: default-backend # 自定义 404 服务 servicePort: 80 rules: - host: foo.bar.com http: paths: - backend: serviceName: s1 servicePort: 80

五、生产环境最佳实践

  1. Controller 选型
  • 云厂商环境:优先使用内置 Controller(如 GKE 的 GLBC);

  • 自建集群:推荐 Nginx Ingress(功能全、生态成熟)或 Traefik(动态配置、易用性高)。

  1. 高可用配置:Ingress Controller 部署多个副本,结合 NodePort + 外部负载均衡器(如阿里云 SLB、AWS ALB)。

  2. 证书管理:使用 Cert-Manager 自动签发和续期 Let’s Encrypt 证书,避免手动维护。

  3. 安全加固

  • 禁用 HTTP,强制跳转 HTTPS;

  • 配置 CORS 策略,限制跨域访问;

  • 启用速率限制,防止 DDoS 攻击。

  1. 监控告警:监控 Ingress Controller 日志、请求成功率、延迟,配置告警阈值(如 5xx 错误率 > 1% 告警)。

六、核心结论

  1. Ingress 核心价值:以声明式方式统一管理外部流量,实现「单 IP 多服务、L7 层路由、SSL 终结」,是生产环境暴露服务的首选方案;

  2. 选型原则

  • 测试环境:用 NodePort 快速暴露;

  • 单服务生产环境:用 LoadBalancer 简单高效;

  • 多服务生产环境:用 Ingress 降低成本、简化管理;

  1. 关键注意事项
  • 必须部署 Ingress Controller,否则 Ingress 配置无效;

  • 域名需解析到 Ingress Controller 的外部 IP;

  • 不同 Controller 支持的 annotations 不同,需参考对应文档。

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

相关文章:

  • 《C# 12和.NET 8入门与跨平台开发》 Visual Studio 2026社区版界面语言设置
  • C++ MCP网关上线即崩?(生产环境全链路故障复盘:从epoll惊群到Rust替代方案评估)
  • 告别臃肿OS:构建轻量级MCU任务轮询框架的实践指南
  • 云原生可观测性策略
  • 高压直流输电系统在线监测控制系统功能说明
  • 为什么92%的量子新手在VSCode里卡在调试阶段?揭秘量子断点失效的底层机制与3行修复代码
  • DeepSeek-V4-平民指南
  • 告别Navicat报错:SpringBoot + MyBatis-Plus 连接 PostgreSQL 的三种姿势与避坑指南
  • 10人SolidWorks团队如何通过云主机实现“设计-仿真-制造”一体化
  • LFM2.5-1.2B-Instruct对比传统方法:在PID控制器参数整定建议上的效果
  • RDKit实战:用MolToSmiles标准化SMILES时,别忘了这个参数,否则手性全丢了
  • 别再混淆了!一文搞懂AD9361的CMOS、LVDS和SPI接口到底该怎么选?
  • 2026年近期河北PVC排水管采购指南:实力厂家雄县宇通深度解析 - 2026年企业推荐榜
  • C#怎么操作数据库存储过程 C#如何调用SQL Server存储过程传参并获取返回结果【数据库】
  • CUDA Graph + Dynamic Parallelism双模优化实战(LLaMA-3 8B自定义算子端到端加速手册,限内部团队泄露版)
  • PlayCover深度解析:如何在Apple Silicon Mac上完美运行iOS应用的3个关键技术
  • CSP-J2020直播获奖题解:用‘桶排序’思想5分钟搞定实时分数线计算
  • 3分钟搞定!Windows电脑免费安装安卓APK的终极指南
  • Vivado工程移植踩坑记:解决IP核路径错误导致编译失败的完整流程
  • 2026年4月南昌高端灯具采购指南:聚焦西湖区喜盈门金鹏王朝灯饰商场 - 2026年企业推荐榜
  • SQL嵌套查询与物化视图_提升读性能的组合策略
  • NPU原生视觉-语言模型协同设计与优化实践
  • 避坑指南:Praat提取共振峰时,这些参数设置错了数据就不准了
  • 2026年当前,连云港装修设计公司的核心竞争力与选型指南 - 2026年企业推荐榜
  • I2C协议工程实践详细介绍
  • 机器学习中的数据泄露:识别与预防策略
  • 2026年4月石家庄冬虫夏草回收平台深度**与诚信推荐 - 2026年企业推荐榜
  • 用ESP32和LVGL8.1画个酷炫仪表盘:手把手教你玩转直线样式(Style Line)
  • 2026年4月重庆水平水磨钻机厂家实力盘点与选购指南 - 2026年企业推荐榜
  • b2b供应链系统品牌选型指南:wms仓储物流管理软件,wms管理系统,wms软件,一体化供应链系统,优选指南! - 优质品牌商家