一、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

更多推荐