Ingress vs NodePort 的区别
🔍 核心区别
NodePort 方式
用户 → 节点 IP:31999 → Service → Pod- 每个服务占用一个独立端口
- 端口范围限制:30000-32767
- 只能基于端口区分服务
Ingress 方式
用户 → 节点 IP:32425 → Ingress Controller → Service → Pod- 多个服务共用同一个端口(80/443)
- 基于域名或路径区分服务
- 需要 Ingress Controller 作为”反向代理”
📊 对比表
根据您的要求,这里是一个基于您提供的信息生成的表格:
这个表格简洁地对比了NodePort与Ingress两种Kubernetes网络解决方案的主要特性。希望这能满足您的需求!如果还有其他方面需要帮助,请随时告诉我。
| 特性 | NodePort | Ingress |
|---|---|---|
| 端口占用 | 每个服务一个端口 | 多个服务共享 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
- ✅ 需要认证、限流等高级功能
- ✅ 生产环境