Istio多集群East-West流量如何配置?跨集群服务通信实战指南

来源:草根站长作者:深圳网站建设头衔:草根站长
导读:本期聚焦于深圳网站建设创作的《Istio多集群East-West流量如何配置?跨集群服务通信实战指南》,敬请观看详情。当业务规模扩大到多个Kubernetes集群时,服务之间的互相调用就成了绕不开的问题。Istio提供的East-West流量治理能力,可以让集群A里的服务直接以统一域名访问集群B里的服务,请求像在同一个集群内一样透明转发。本文围绕多集群Service Mesh展开,先讲清楚东西向流量的工作机制和几种常见的多集群部署模型,再手把手演示如何配置共享根证书、搭建东西向网关、配置ServiceEntry与Endpoint发现,最后分析单网络多集群与多网络多集群两种方案的差异与适用场景,并给出生产环境落地时的注意事项,帮助你少踩坑、快速实现跨集群流量治理。

Istio的多集群能力是Service Mesh落地过程中最容易被低估的功能之一。当企业业务从单一Kubernetes集群扩展到多个集群时,最朴素的需求其实很简单:集群A里的订单服务,能不能像调用本地服务一样调用集群B里的库存服务?这就是所谓的East-West流量(东西向流量),也就是服务与服务之间的横向调用流量,与之相对的North-South流量(南北向流量)则指外部进入集群的入口流量。Istio通过统一的控制面配置和数据面证书体系,可以让跨集群的服务调用做到服务发现互通、mTLS加密、负载均衡覆盖多集群端点,体验上几乎与单集群无异。

Istio多集群East-West流量如何配置?跨集群服务通信实战指南

一、East-West流量的工作机制:Istio是怎么找到另一个集群里的Pod的

要理解多集群配置,关键是搞清楚Envoy代理的端点发现逻辑。在单集群模式下,istiod通过监听Kubernetes API Server,把Service对应的Pod IP整理成Endpoint列表下发给Envoy。而在多集群模式下,istiod会同时监听多个集群的API Server(需要通过remote secret授权),把所有集群中同名Namespace、同名Service的端点合并成一个逻辑端点集合。

举个例子,集群cluster-a和cluster-b里都有namespace为prod、名为inventory的Service,那么两个集群里该服务的Pod IP会被合并。当集群A里的frontend服务访问inventory.prod.svc.cluster.local时,Envoy拿到的端点列表里既有集群A的Pod IP,也有集群B的Pod IP,负载均衡会在所有端点之间进行。这就是East-West流量打通后的直接效果:同一个服务在多个集群的副本对外表现为一个整体。

这里有个非常关键的前提:跨集群访问的流量必须能直接路由到目标Pod IP,或者通过东西向网关中转。前者要求集群之间的Pod网络在三层可达(比如扁平网络或VPC打通),后者则适用于网络不通的场景,需要依赖东西向网关做流量入口。这两种模式对应的配置差异很大,后面会分别说明。

二、配置前的准备工作:统一信任根是跨集群mTLS的基础

多集群环境下,所有集群的Istio必须共享同一个根证书(Root CA),否则集群A的Envoy发起mTLS握手时,集群B的Envoy无法验证对方证书。这是最容易遗漏的一步,很多按照官方文档操作到一半发现流量不通,九成是因为证书体系没有统一。

首先用istioctl自带的证书生成工具创建根证书,注意中间证书的有效期配置建议不要设得太长,生产环境通常一年轮换一次:

# 在中间节点执行,生成根证书并分发到两个集群
mkdir -p certs && pushd certs
make -f ../tools/certs/Makefile.selfsigned.mk root-ca
# 为cluster-a生成中间证书
make -f ../tools/certs/Makefile.selfsigned.mk cluster-a-cacerts
make -f ../tools/certs/Makefile.selfsigned.mk cluster-b-cacerts
popd

生成之后,把对应的证书目录通过Kubernetes Secret写入各集群的istio-system命名空间:

kubectl create namespace istio-system --context cluster-a
kubectl create secret generic cacerts -n istio-system \
  --from-file=cluster-a/ca-cert.pem \
  --from-file=cluster-a/ca-key.pem \
  --from-file=cluster-a/root-cert.pem \
  --from-file=cluster-a/cert-chain.pem \
  --context cluster-a

除了证书,还要在每个集群创建用于远程发现的Secret,让本地istiod可以读取其他集群的API Server。这个Secret的名字有严格要求,格式为istio-remote-secret-{集群名}:

# 在cluster-a中创建访问cluster-b的凭证
istioctl x create-remote-secret \
  --context=cluster-b \
  --name=cluster-b | \
  kubectl apply -f - --context=cluster-a

执行成功后,集群A的istiod就能以只读方式列出集群B的Service和Endpoint了。可以用kubectl get endpoint在集群B里验证目标服务确实有端点,再检查集群A的istiod日志确认远程连接建立成功。

三、单网络多集群配置:网络打通时的推荐方案

如果两个集群的Pod网络是扁平的(例如同一VPC内不同子网,Pod IP之间可以直接路由),那么配置相对简单,只需要让双方istiod互相发现即可。这种模式下跨集群流量直接走Pod到Pod,延迟最低,也不需要额外的网关开销。

两个集群的IstioOperator配置中,网络标签要设置为同一个值,表示处于同一个网络平面:

apiVersion: install.istio.io/v1alpha1
kind: IstioOperator
spec:
  values:
    global:
      meshID: mesh-demo
      multiCluster:
        clusterName: cluster-a
      network: network-1

集群B做相同配置,把clusterName改成cluster-b即可。安装完成后做一个连通性验证:在集群A里起一个sleep Pod,带上ServiceAccount令牌去请求集群B里的httpbin服务。如果返回200,并且通过istioctl proxy-config endpoint查看端点,能看到两个集群的IP,说明East-West流量已经打通。

需要提醒的是,单网络模式虽然省事,但对网络基础设施有硬性要求。跨VPC或者跨云厂商的场景下,Pod IP路由不可达,此时强行使用该模式会导致流量黑洞,Envoy把请求发往一个不可达的IP后只能等待超时,排查起来非常痛苦。

四、多网络多集群配置:借助东西向网关中转流量

网络不互通是更常见的实际情况,比如一个集群在阿里云、一个在自建机房。这时需要用到东西向网关(East-West Gateway),它在每个集群暴露一个入口,专门接收来自其他网格内服务的mTLS流量,再转发给本集群的Pod。

多网络模式下,先安装东西向网关并暴露服务。关键点在于gateway标签必须是istio-east-westgateway,并且hosts要开启匹配模式,因为跨集群访问的Host是内部域名而不是公网域名:

apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
  name: cross-network-gateway
  namespace: istio-system
spec:
  selector:
    istio: eastwestgateway
  servers:
    - port:
        number: 15443
        name: tls
        protocol: TLS
      tls:
        mode: ISTIO_MUTUAL
      hosts:
        - "*.local"

同时每个集群的IstioOperator中network字段要设置为不同的值(例如network-1和network-2),这样istiod在计算端点时,会发现目标端点不在本地网络,自动把流量路由到对方集群的东西向网关地址。这个发现过程依赖Kubernetes中名为istio-mc-endpoint的特殊Endpoint,Envoy通过它知道远端网关的可达地址。

还有一个容易踩的坑:东西向网关的地址必须是各集群互相可达的公网或专线地址,且15443端口的防火墙规则一定要放开。很多团队配置完发现跨集群请求失败,抓包才发现是安全组拦截了15443端口。另外建议在东西向网关的Service上开启externalTrafficPolicy: Local之外的默认策略即可,跨集群场景不需要保留源IP,保留反而可能导致回程路由异常。

五、方案对比与生产落地建议

两种模式各有取舍,简单对比一下:

对比项单网络多集群多网络多集群
网络要求Pod IP三层互通仅要求网关地址互通
链路延迟低,Pod直连较高,多一跳网关
配置复杂度高,需维护网关和证书
跨云跨机房不适用适用

生产环境落地时,建议优先做好这几件事。第一,把根证书纳入统一的密钥管理系统,不要用自签名证书直接上生产,可以考虑对接Vault做证书签发。第二,规划好集群名和Namespace约定,多集群依赖同名Namespace加同名Service来合并端点,命名混乱会导致服务意外聚合。第三,配置好控制面的监控指标,重点观察istiod的远程集群连接数和推送延迟,一旦某个集群的API Server不可达,本地istiod日志会出现远程连接错误,需要及时告警。第四,灰度阶段可以先只让测试Namespace打通跨集群流量,通过Sidecar资源的egress配置限制访问范围,避免误把生产服务暴露给其他集群。

整体来说,Istio的多集群East-West流量配置核心就三件事:统一信任根、打通端点发现、解决网络可达性。把这三点理清,无论选择哪种部署模型,配置过程都会有章可循。建议在测试环境先用两个kind集群完整演练一遍证书分发和网关暴露流程,再迁移到生产,能省去大量现场排障时间。

Istio多集群East-West流量跨集群服务通信修改时间:2026-09-05 12:32:43

免责声明:已尽一切努力确保本网站所含信息的准确性。网站作品多为原创整理与精心创作,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们进行处理Email:chomcom@qq.com。
引用或转载本作品时,请注明当前出处:https://www.ipipp.com/html/20260905/50908.html,基于非商业用途的前提下,欢迎转载或二创本作品。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。