type
status
date
slug
summary
tags
category
icon
password
本文以 架构师视角,通俗讲解 Kubernetes 中的 Service 与 Ingress,结合 使用场景、示例和 Java 开发实践。
🔹 为什么需要 Service 和 Ingress?
在 Kubernetes 中:
- Pod 是最小运行单元,但 Pod 的 IP 是动态的,会因为重启或扩缩容而改变。
- 直接访问 Pod IP 不可靠。
👉 所以 K8s 提供:
- Service:集群内稳定访问入口。
- Ingress:统一对外 HTTP/HTTPS 网关。
🔹 Service:集群内部的访问入口
使用场景
user-service
部署了 3 个副本,Pod IP 各不相同。
order-service
想调用user-service
。 👉 使用 Service 统一入口,避免依赖 Pod IP。
Service 类型
- ClusterIP(默认):仅集群内访问。
- NodePort:通过
NodeIP:Port
对外暴露(适合测试环境)。
- LoadBalancer:云厂商负载均衡器(生产常用)。
示例:user-service 的 Service
📌 集群内调用:
🔹 Ingress:对外网关
使用场景
- 系统有多个微服务:
user-service
,order-service
,product-service
。
- 不可能每个都开一个 NodePort。 👉 使用 Ingress 统一管理外部访问。
功能
- 基于域名/路径路由:
http://myapp.com/user
→ user-servicehttp://myapp.com/order
→ order-service
- 支持 TLS(HTTPS)
- Ingress Controller:Nginx Ingress、Traefik、Istio Gateway
示例:Ingress 网关
📌 外部访问:
🔹 Java 开发人员视角
在 Spring Boot 项目中,微服务之间的调用不依赖 Pod IP,而是通过 Service 名称:
👉 核心点:在 K8s 中,Service 名即 DNS 域名,天然支持服务发现。
🔹 总结
- Service:解决 Pod 动态 IP 问题,保证集群内调用稳定。
- Ingress:统一对外暴露 HTTP/HTTPS,管理网关入口。
📌 类比:
- Service = 内部通讯录(固定电话簿)
- Ingress = 前台总机(对外统一入口)
架构图
