k8s的ingress和service
在 Kubernetes(K8s)的网络体系中,Service 和 Ingress 是管理和暴露应用流量的两个核心概念,它们分工明确又紧密协作。
简单来说,Service 是集群内部的“稳定代理人”,为动态变化的应用 Pod 提供固定的访问入口和负载均衡;而 Ingress 则是集群对外的“七层网关”,它负责将外部流量根据域名、路径等规则路由到不同的 Service。
下面我们分别深入理解它们。
⚙️ Service:集群内部的稳定访问入口
由于 Pod 是临时且动态的,IP 地址会频繁变化,直接访问 Pod 并不可靠。Service 的出现正是为了解决这个问题。
- 核心功能:它为一组具有相同功能的 Pod(通过标签选择器
selector定义)提供一个稳定的虚拟IP(ClusterIP)和DNS名称。作为四层(TCP/UDP)负载均衡器,它将请求转发给后端的 Pod。 - 主要类型:Service 有多种类型,以适应不同的访问场景。
|
类型 |
访问范围 |
主要用途 |
|
ClusterIP (默认) |
仅集群内部 |
用于集群内微服务间的互相调用。 |
|
NodePort |
集群外部,通过 |
开发测试,或作为 Ingress 的底层暴露方式。 |
|
LoadBalancer |
集群外部,通过云厂商的负载均衡器公网IP访问 |
直接对外暴露服务,通常与云环境集成。 |
|
ExternalName |
集群内部 |
将集群内的服务访问映射到外部域名,便于迁移。 |
🚪 Ingress:集群对外的七层智能网关
Ingress 是一种更高级、更智能的七层(HTTP/HTTPS)流量管理方式。
- 核心功能:它通过定义路由规则,将外部 HTTP/HTTPS 请求路由到集群内的不同 Service。它能识别和理解域名、URL路径、请求头等信息,从而实现基于内容的精细化路由。
- 工作机制:Ingress 的工作需要两个组件配合:
- Ingress 资源:你定义的规则清单(YAML文件),描述了“哪个域名/路径的请求,发往哪个Service”。
- Ingress Controller:真正干活的人。它是一个运行在集群中的Pod(如
ingress-nginx),会实时监听 Ingress 资源的变化,并将其转化为 Nginx、Envoy 等负载均衡器的实际配置。
🔗 协同工作:从外部请求到内部 Pod
一个典型的外部请求流程如下:
- 客户端发起请求:用户访问
http://myapp.com/api。 - 流量到达 Ingress Controller:外部流量通过
NodePort或LoadBalancer类型的 Service 到达 Ingress Controller Pod。 - Ingress 进行路由决策:Ingress Controller 根据 Ingress 资源规则,识别出域名
myapp.com和路径/api。 - 转发至目标 Service:Controller 将请求转发给匹配的 Service(如
api-service)。 - Service 负载均衡至 Pod:Service 再将请求负载均衡地转发给后端的某个健康的 Pod。
📊 核心差异速览
|
特性 |
Service |
Ingress |
|
工作层级 |
四层(TCP/UDP) |
七层(HTTP/HTTPS) |
|
核心职责 |
集群内部服务发现与四层负载均衡 |
集群外部七层流量的路由与管理 |
|
路由能力 |
简单,基于IP和端口转发 |
强大,支持域名、路径、请求头等 |
|
是否必须 |
是。服务间通信的基础 |
否。按需使用,用于对外暴露HTTP服务 |
|
TLS支持 |
不内置 |
原生支持 TLS 终结 |
💎 总结与最佳实践
- 分工明确:Service负责集群内“通不通”,提供稳定的内部访问;Ingress负责集群外“怎么通”,提供智能的外部路由。
- 协同作战:生产环境的标准做法是,内部服务用
ClusterIP类型的 Service,然后创建一个 Ingress 作为统一的流量入口,将外部请求路由到这些 Service。 - 场景选择:
- 集群内部通信:使用
ClusterIPService。 - 暴露TCP/UDP服务:使用
NodePort或LoadBalancerService。 - 暴露HTTP/HTTPS服务:优先使用 Ingress,它能提供基于域名的虚拟主机、URL路径路由、SSL终结等强大功能。
- 简单的开发测试:可使用
NodePortService 快速暴露。
总而言之,Service 和 Ingress 共同构成了 Kubernetes 强大的流量管理能力。理解它们各自的定位和协作方式,是构建生产级应用的关键一步。值得注意的是,Kubernetes 社区正力推功能更强大的 Gateway API 作为 Ingress 的未来演进方向,但 Ingress 目前仍是广泛使用且稳定的方案。
- 点赞
- 收藏
- 关注作者
评论(0)