Home

Ingress vs NodePort 的区别

🔍 核心区别

NodePort 方式

  用户 → 节点 IP:31999 → Service → Pod
  • 每个服务占用一个独立端口
  • 端口范围限制:30000-32767
  • 只能基于端口区分服务

Ingress 方式

  用户 → 节点 IP:32425 → Ingress Controller → Service → Pod
  • 多个服务共用同一个端口(80/443)
  • 基于域名或路径区分服务
  • 需要 Ingress Controller 作为”反向代理”

📊 对比表

根据您的要求,这里是一个基于您提供的信息生成的表格:

这个表格简洁地对比了NodePort与Ingress两种Kubernetes网络解决方案的主要特性。希望这能满足您的需求!如果还有其他方面需要帮助,请随时告诉我。

特性NodePortIngress
端口占用每个服务一个端口多个服务共享 80/443
访问方式IP
域名 或 IP/路径
支持服务数量有限(端口范围限制)理论上无限
七层路由❌ 不支持✅ 支持(基于 URL/域名)
SSL/TLS❌ 每个服务单独配置✅ 统一配置
认证/限流❌ 不支持✅ 支持
复杂度简单中等

🎯 实际场景对比

场景 1:只有 k8m 一个服务

  # NodePort 方式
  http://10.0.5.1:31999

  # Ingress 方式
  http://10.0.5.1:32425  (Host: k8m.local)

结论:没太大区别,NodePort 更简单!

场景 2:有 10 个服务要对外发布

NodePort 方式 😰

  k8m        → 10.0.5.1:31999
  prometheus → 10.0.5.1:31998
  grafana    → 10.0.5.1:31997
  jenkins    → 10.0.5.1:31996
  nexus      → 10.0.5.1:31995
  ...

问题:

  • 端口难记
  • 端口可能冲突
  • 超过 30000-32767 范围就无法分配

Ingress 方式 😊

  k8m.local:32425        → k8m 服务
  prom.local:32425       → prometheus 服务
  grafana.local:32425    → grafana 服务
  jenkins.local:32425    → jenkins 服务

或者用路径:

  10.0.5.1:32425/k8m     → k8m 服务
  10.0.5.1:32425/prom    → prometheus 服务
  10.0.5.1:32425/grafana → grafana 服务

优势:

  • 好记
  • 统一端口
  • 可以加 SSL、认证等高级功能

🏗️ 架构图解

  ┌─────────────────────────────── ──────────────────────────┐
  │                    NodePort 方式                         │
  ├─────────────────────────────── ──────────────────────────┤
  │                                                         │
  │  用户 → [31999] → k8m Service → k8m Pod                │
  │  用户 → [31998] → prom Service → prom Pod              │
  │  用户 → [31997] → grafana Service → grafana Pod        │
  │                                                         │
  └─────────────────────────────── ──────────────────────────┘

  ┌─────────────────────────────── ──────────────────────────┐
  │                    Ingress 方式                          │
  ├─────────────────────────────── ──────────────────────────┤
  │                                                         │
  │                    ┌→ k8m Service → k8m Pod            │
  │  用户 → [32425] → Ingress Controller ─┼→ prom Service  │
  │                    └→ grafana Service → grafana Pod    │
  │                    (基于域名/路径路由)                  │
  │                                                         │
  └─────────────────────────────── ──────────────────────────┘

💡 我的建议

用 NodePort 的情况:

  • ✅ 只有 1-2 个服务
  • ✅ 内部测试环境
  • ✅ 不想折腾 Ingress Controller

用 Ingress 的情况:

  • ✅ 有多个服务要对外发布
  • ✅ 需要域名访问
  • ✅ 需要 HTTPS/SSL
  • ✅ 需要认证、限流等高级功能
  • ✅ 生产环境
Kubernetes 网络 AI