GKE上Anthos服务网格与Istio入口网关:多集群服务方案咨询
GKE上Anthos Service Mesh多集群部署方案疑问及配置咨询
背景与理想配置
已在GKE上使用Anthos Service Mesh(ASM)部署多集群应用,测试过两种可用方案,但需要进一步优化。需求是对跨集群服务间流量做额外控制,部分服务仅部署在单个集群(例如靠近主数据库所在区域)。
理想配置(简化):
- Frontend服务部署在两个集群中
- Api服务仅部署在一个集群中
- 外部负载均衡器流量路由至最近集群的Frontend服务
- 两个集群的Frontend均连接至唯一的Api实例
已测试的两种方案及问题
方案1:基于MCS+MCI的简易方案
通过部署MultiClusterService(MCS)和MultiClusterIngress(MCI)暴露两个GKE集群中的服务,实现了全局负载均衡并自动路由至最近集群,但存在以下问题:
- 无法基于来源、HTTP头实现细粒度跨集群服务流量管理
- Api服务必须部署在两个集群,不知道如何管理Frontend到Api的跨集群路由
方案2:基于Istio网关+MCS/MCI的复杂方案
在两个集群中部署istio-ingressgateway,通过VirtualService和DestinationRule等Istio配置暴露服务,再通过全局MCS和MCI暴露网关。该方案可通过DestinationRule实现服务间路由,但存在问题:
- 缺少自动路由至最近集群的负载均衡能力,仅支持轮询、最少连接等选项
- LocalityLBSetting看似可用,但在两个区域6个可用区的环境中配置繁琐,且仍无法实现自动就近路由
- 尝试基于source cluster标签配置时,GKE提示
topology.istio.io/cluster无效,原因未知
核心疑问
- 采用
apiVersion: networking.istio.io/v1alpha3的Istio网关、虚拟服务等配置文件在GKE中是否仍有效?未来是否会被弃用? - 是否存在无需使用基础Istio配置的其他方案,仅通过全局MultiClusterIngress作为外部负载均衡器和全局路由来管理服务间/跨集群通信?
另外,了解到Traffic Director是一种新的服务流量管理方式,但不清楚它如何与Anthos、MCS、MCI及现有配置适配。
附:当前DestinationRule配置
apiVersion: networking.istio.io/v1alpha3 kind: DestinationRule metadata: name: web-front-v2-multi-cluster namespace: staging spec: host: my-front-v2-multi-cluster.staging.cluster.local trafficPolicy: loadBalancer: simple: ROUND_ROBIN localityLbSetting: enabled: true failoverPriority: - "topology.kubernetes.io/region" - "topology.kubernetes.io/zone" - "topology.istio.io/cluster" outlierDetection: consecutive5xxErrors: 5 interval: 15s baseEjectionTime: 30s maxEjectionPercent: 100 subsets: - name: europe labels: location: cluster-1 topology.istio.io/cluster: cn-my-project-europe-west2-cluster-1 - name: america labels: location: cluster-2 topology.istio.io/cluster: cn-my-project-northamerica-northeast1-cluster-2
内容的提问来源于stack exchange,提问作者Paolo N
相关产品推荐
相关产品推荐

