k8s的ingress和service

举报
yd_234424112 发表于 2026/07/18 21:10:27 2026/07/18
【摘要】 在 Kubernetes(K8s)的网络体系中,Service 和 Ingress 是管理和暴露应用流量的两个核心概念,它们分工明确又紧密协作。简单来说,Service 是集群内部的“稳定代理人”,为动态变化的应用 Pod 提供固定的访问入口和负载均衡;而 Ingress 则是集群对外的“七层网关”,它负责将外部流量根据域名、路径等规则路由到不同的 Service。下面我们分别深入理解它们。...

在 Kubernetes(K8s)的网络体系中,ServiceIngress 是管理和暴露应用流量的两个核心概念,它们分工明确又紧密协作。

简单来说,Service 是集群内部的“稳定代理人”,为动态变化的应用 Pod 提供固定的访问入口和负载均衡;而 Ingress 则是集群对外的“七层网关”,它负责将外部流量根据域名、路径等规则路由到不同的 Service。

下面我们分别深入理解它们。

⚙️ Service:集群内部的稳定访问入口

由于 Pod 是临时且动态的,IP 地址会频繁变化,直接访问 Pod 并不可靠。Service 的出现正是为了解决这个问题。

  • 核心功能:它为一组具有相同功能的 Pod(通过标签选择器 selector 定义)提供一个稳定的虚拟IP(ClusterIP)和DNS名称。作为四层(TCP/UDP)负载均衡器,它将请求转发给后端的 Pod。
  • 主要类型:Service 有多种类型,以适应不同的访问场景。

类型

访问范围

主要用途

ClusterIP (默认)

仅集群内部

用于集群内微服务间的互相调用。

NodePort

集群外部,通过 <NodeIP>:<NodePort> 访问

开发测试,或作为 Ingress 的底层暴露方式。

LoadBalancer

集群外部,通过云厂商的负载均衡器公网IP访问

直接对外暴露服务,通常与云环境集成。

ExternalName

集群内部

将集群内的服务访问映射到外部域名,便于迁移。

🚪 Ingress:集群对外的七层智能网关

Ingress 是一种更高级、更智能的七层(HTTP/HTTPS)流量管理方式。

  • 核心功能:它通过定义路由规则,将外部 HTTP/HTTPS 请求路由到集群内的不同 Service。它能识别和理解域名、URL路径、请求头等信息,从而实现基于内容的精细化路由。
  • 工作机制:Ingress 的工作需要两个组件配合:
    1. Ingress 资源:你定义的规则清单(YAML文件),描述了“哪个域名/路径的请求,发往哪个Service”。
    2. Ingress Controller:真正干活的人。它是一个运行在集群中的Pod(如 ingress-nginx),会实时监听 Ingress 资源的变化,并将其转化为 Nginx、Envoy 等负载均衡器的实际配置。

🔗 协同工作:从外部请求到内部 Pod

一个典型的外部请求流程如下:

  1. 客户端发起请求:用户访问 http://myapp.com/api
  2. 流量到达 Ingress Controller:外部流量通过 NodePortLoadBalancer 类型的 Service 到达 Ingress Controller Pod。
  3. Ingress 进行路由决策:Ingress Controller 根据 Ingress 资源规则,识别出域名 myapp.com 和路径 /api
  4. 转发至目标 Service:Controller 将请求转发给匹配的 Service(如 api-service)。
  5. Service 负载均衡至 Pod:Service 再将请求负载均衡地转发给后端的某个健康的 Pod。

📊 核心差异速览

特性

Service

Ingress

工作层级

四层(TCP/UDP)

七层(HTTP/HTTPS)

核心职责

集群内部服务发现与四层负载均衡

集群外部七层流量的路由与管理

路由能力

简单,基于IP和端口转发

强大,支持域名、路径、请求头等

是否必须

是。服务间通信的基础

否。按需使用,用于对外暴露HTTP服务

TLS支持

不内置

原生支持 TLS 终结

💎 总结与最佳实践

  1. 分工明确Service负责集群内“通不通”,提供稳定的内部访问;Ingress负责集群外“怎么通”,提供智能的外部路由。
  2. 协同作战:生产环境的标准做法是,内部服务用 ClusterIP 类型的 Service,然后创建一个 Ingress 作为统一的流量入口,将外部请求路由到这些 Service。
  3. 场景选择
    • 集群内部通信:使用 ClusterIP Service。
    • 暴露TCP/UDP服务:使用 NodePortLoadBalancer Service。
    • 暴露HTTP/HTTPS服务:优先使用 Ingress,它能提供基于域名的虚拟主机、URL路径路由、SSL终结等强大功能。
    • 简单的开发测试:可使用 NodePort Service 快速暴露。

总而言之,Service 和 Ingress 共同构成了 Kubernetes 强大的流量管理能力。理解它们各自的定位和协作方式,是构建生产级应用的关键一步。值得注意的是,Kubernetes 社区正力推功能更强大的 Gateway API 作为 Ingress 的未来演进方向,但 Ingress 目前仍是广泛使用且稳定的方案。

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。