Kubernetes Service与Ingress流量管理
一、Pod变化需要稳定入口
Kubernetes 中 Pod 会因为扩缩容、滚动发布、节点故障而不断变化,直接访问 Pod IP 不可靠。Service 提供稳定的虚拟入口,并通过标签选择后端 Pod。Ingress 则在集群入口层按域名和路径管理 HTTP/HTTPS 流量。两者配合,才能把内部服务发现和外部访问解耦。
| 对象 | 作用 | 典型范围 |
|---|---|---|
| ClusterIP | 集群内访问 | 内部服务 |
| NodePort | 节点端口暴露 | 测试或特殊场景 |
| LoadBalancer | 云负载均衡 | 公网入口 |
| Ingress | 七层路由 | 域名、路径、TLS |
二、Service如何选择后端
Service 通过 selector 匹配 Pod 标签。只要标签一致,EndpointSlice 会自动维护后端地址。下面的 Service 把流量转给带有 app: order-api 的 Pod。
apiVersion: v1
kind: Service
metadata:
name: order-api
spec:
type: ClusterIP
selector:
app: order-api
ports:
- name: http
port: 80
targetPort: 8080
这里 port 是 Service 暴露端口,targetPort 是容器端口。排障时要检查三件事:Service selector 是否匹配 Pod 标签,Pod readiness 是否通过,EndpointSlice 是否生成。如果 Service 没有 endpoints,Ingress 再正确也无法访问后端。
三、Ingress负责七层路由
Ingress 只是规则对象,真正执行流量转发的是 Ingress Controller,例如 Nginx Ingress、Traefik 或云厂商控制器。下面示例把 api.example.com/orders 转发到 order-api。
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: api-ingress
spec:
ingressClassName: nginx
rules:
- host: api.example.com
http:
paths:
- path: /orders
pathType: Prefix
backend:
service:
name: order-api
port:
number: 80
生产环境还要配置 TLS、请求体大小、超时、限流和访问日志。不同 Controller 的注解不同,团队应收敛成模板,避免每个服务随意复制配置。
四、流量治理与发布
Service 和 Ingress 也参与发布策略。滚动发布依赖 readinessProbe 控制新 Pod 何时接流量;灰度发布可通过多个 Service、Ingress 权重或服务网格实现。基础检查命令如下:
kubectl get svc,endpointslice,ingress -n prod
kubectl describe ingress api-ingress -n prod
kubectl get pod -l app=order-api -n prod
当出现 502 或 504 时,要沿着链路看:DNS 是否到入口负载均衡,Ingress Controller 是否收到请求,Service 是否有 endpoint,Pod 是否 ready,应用是否超时。Kubernetes 流量管理不是只写 YAML,而是让入口、服务发现、健康检查和发布节奏形成闭环。
命名空间和网络策略也会影响流量。多团队集群中,Service 名称应清晰表达领域和用途,避免跨命名空间随意访问。若启用了 NetworkPolicy,要确认 Ingress Controller 到业务 Pod、业务 Pod 到依赖服务的方向都被允许。TLS 证书可以交给 cert-manager 自动签发和续期,但续期失败需要告警。对外入口还应限制请求体大小、连接时间和来源 IP,防止单个入口规则拖垮整个控制面。
在生产落地时,建议为每个服务准备固定的排障清单:域名解析、Ingress 规则、Controller 日志、Service endpoints、Pod readiness、应用日志和后端依赖。这样一线同学遇到故障时能按链路定位,而不是在大量 YAML 中盲目搜索。Service 与 Ingress 的价值,正是把动态 Pod 背后的访问关系变成稳定、可审计的声明。
容量规划也不能忽略。Ingress Controller 本身需要副本、资源限制和水平扩缩容,入口负载均衡也要能承接峰值连接。对于核心业务,建议把入口层指标接入告警,包括请求量、错误率、延迟、连接数和重载失败次数。只有入口组件自身稳定,后端服务的弹性才有意义。
📌 本文是《云原生工程实战》系列,持续更新,关注不迷路。
👉 下一篇:《云原生CI/CD流水线设计与GitOps实践》,讲流量入口配置如何纳入可审计、可回滚的发布流程。
💬 你在实际项目里遇到过 Service 可用但 Ingress 路由不通的问题吗?评论区聊聊。
(觉得有用点个赞+收藏,方便回头查阅)
🔧 相关可运行源码/资料已整理成资源包,可在我主页的资源里自取。
☁️ 本文示例需要一台云服务器,新用户可通过此链接领取优惠自用:https://cloud.tencent.com/act/cps/redirect?redirect=2446&cps_key=49a769c067bd9c9f53fcb1bdf9feaf23&from=console&cps_promotion_id=102832
更多推荐
所有评论(0)