1. 先看最终效果一句话总结
你最后执行的 curl http://www.testingress.com,背后发生的事是:
外部用户通过一个域名(www.testingress.com),直接访问到了集群内部的 Nginx 服务,而不需要知道任何节点 IP、NodePort 或 Service IP。
这就是 Ingress 最核心的价值:用统一的入口,优雅地对外暴露服务。
2. 没有 Ingress 之前,你是怎么访问的?
在之前的例子里,你要访问 Nginx 服务,只能用:
ClusterIP:80:只能在集群内部访问NodeIP:NodePort:比如192.168.30.131:30091,端口又长又难记,还依赖节点 IPLoadBalancer IP:比如192.168.30.240,但每个服务都要占一个 IP,成本高
痛点:每个服务都有自己的访问方式,管理起来一团乱麻。
3. 有了 Ingress 之后,一切变了
Ingress 给你提供了一个统一的 "大门":
- 统一入口:所有外部 HTTP/HTTPS 请求,都先打到 Ingress 控制器(Nginx)。
- 智能路由 :根据你定义的规则(域名、路径),把流量分发到不同的 Service。
www.testingress.com→ingressservice→ Nginx Pod- 以后再加个
api.testingress.com→apiservice→ API Pod,完全没问题
- 域名访问:用户只需要记住一个好听的域名,不用管复杂的 IP 和端口。
4. 用你的实验数据,把链路串起来看
我们把你实验里的关键信息串起来,效果就非常清晰了:
- 用户输入 :
curl http://www.testingress.com - DNS 解析 :本地
/etc/hosts把www.testingress.com解析到192.168.30.131(Ingress 控制器所在节点的 IP) - 到达 Ingress 控制器 :请求进入节点
192.168.30.131,被 Nginx Ingress 控制器接收 - 匹配规则 :控制器发现请求的 Host 是
www.testingress.com,匹配到你定义的 Ingress 规则 - 转发到 Service :控制器把请求转发到
ingressservice(ClusterIP:10.108.109.255:80) - 到达 Pod:Service 再把请求负载均衡到 3 个 Nginx Pod 中的一个
5. Ingress 真正解决的 3 个核心问题
- 统一入口:所有服务共享一个 IP / 端口,对外只暴露一个入口。
- 域名路由:用域名区分服务,比 IP:Port 友好太多。
- 七层能力:支持 HTTP/HTTPS、路径重写、SSL 终结、限流等,这些是 4 层 Service 做不到的。
6. 一句话记忆
Ingress 就是 Kubernetes 集群的 "智能反向代理",帮你把外部流量,按规则分发到内部服务。