在Kubernetes(k8s)集群的网络架构中,东西流量 (East-West Traffic)与南北流量 (North-South Traffic)是描述流量方向的核心概念,二者的定义、通信场景、实现方式及治理重点均有显著差异。以下是详细解析:
一、核心定义
1. 南北流量(North-South Traffic)
南北流量是指集群外部客户端与集群内部服务之间的流量,即"外部→集群"或"集群→外部"的通信。例如:
-
用户通过浏览器访问集群内的Web服务(如电商平台的商品详情页);
-
集群内的服务调用外部的第三方API(如支付接口、短信服务)。
其名称源于传统网络拓扑中"南北"方向的流量走向(客户端位于网络边缘,集群位于核心)。
2. 东西流量(East-West Traffic)
东西流量是指集群内部服务之间的流量,即"服务A→服务B"的水平通信。例如:
-
订单服务调用用户服务获取用户信息;
-
推荐服务调用商品服务获取商品列表。
其名称源于集群内部服务节点的"东西"分布(服务节点在同一集群内横向扩展)。
二、通信场景与实现方式
1. 南北流量的实现与服务暴露
南北流量的核心是将集群内的服务暴露给外部客户端,常用的实现方式包括:
- NodePort :在每个节点上开放一个静态端口,外部客户端通过该节点的IP+端口访问服务(如
http://<node-ip>:30080); - LoadBalancer:通过云厂商提供的负载均衡器(如AWS ELB、阿里云SLB)暴露服务,自动分配公网IP,适合生产环境;
- Ingress :基于HTTP/HTTPS协议的流量入口,通过域名、路径等规则将请求转发至后端服务(如
https://app.example.com/api→ 订单服务); - Gateway API:Kubernetes官方推出的新一代流量治理规范(GA于2023年),替代传统Ingress,提供更丰富的路由规则(如按Header、Method匹配)、多协议支持(TCP/UDP/HTTP)及角色分离(运维管理Gateway,开发管理Route)。
2. 东西流量的实现与服务发现
东西流量的核心是集群内部服务的互联互通,常用的实现方式包括:
- ClusterIP :Kubernetes Service的默认类型,为服务分配一个集群内的虚拟IP(ClusterIP),内部服务通过该IP访问目标服务(如
http://order-service.default.svc.cluster.local); - Service Mesh:如Istio、Linkerd,通过Sidecar代理(如Envoy)拦截服务间的流量,实现细粒度的流量治理(如熔断、重试、灰度发布);
- DNS解析 :Kubernetes内置的CoreDNS服务为每个Service分配一个域名(如
order-service),内部服务通过域名即可访问目标服务。
三、治理重点的差异
1. 南北流量的治理重点
南北流量来自外部,需重点关注安全、高可用与流量分发:
- 安全防护:通过Ingress或Gateway API配置TLS加密(HTTPS)、身份认证(如JWT)、IP白名单等,防止非法访问;
- 高可用:使用LoadBalancer或NodePort的多副本部署,避免单点故障;
- 流量分发 :通过Ingress的路径规则(如
/api→服务A,/web→服务B)或Gateway API的路由规则,将请求转发至不同的后端服务。
2. 东西流量的治理重点
东西流量发生在集群内部,需重点关注性能、可靠性与可观测性:
- 性能优化:通过Service Mesh的Sidecar代理(如Envoy)实现链路追踪(Jaeger)、 metrics收集(Prometheus),识别性能瓶颈;
- 可靠性保障:通过熔断(Hystrix)、重试(Retry)、超时(Timeout)等机制,防止服务雪崩;
- 灰度发布:通过Service Mesh的流量镜像(Mirroring)或金丝雀发布(Canary),逐步将流量切换至新版本服务。
四、总结
| 维度 | 南北流量 | 东西流量 |
|---|---|---|
| 定义 | 外部客户端与集群内服务的通信 | 集群内服务之间的通信 |
| 通信方向 | 外部→集群 / 集群→外部 | 服务A→服务B(水平) |
| 实现方式 | NodePort、LoadBalancer、Ingress、Gateway API | ClusterIP、Service Mesh(Istio) |
| 治理重点 | 安全、高可用、流量分发 | 性能、可靠性、可观测性 |