前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >eBay基于Istio的应用网关的探索和实践

eBay基于Istio的应用网关的探索和实践

作者头像
heidsoft
发布2021-08-26 17:03:35
1.3K0
发布2021-08-26 17:03:35
举报

7月17日,在Cloud Native Days China云原生多云多集群专场,eBay软件工程师陈佑雄发表了《eBay基于Istio的应用网关的探索和实践》主题演讲,分享了eBay在多集群,多环境,大规模的场景下,Istio落地实践的探索和实践。

演讲主要包含四部分的内容:

1)数据中心流量管理现状

2)基于Istio的应用网关实践

  • Istio部署模式
  • 应用高可用接入架构
  • 流量统一管理模型
  • 案例分享

3)Istio社区未解决的问题

4)未来展望

数据中心流量管理现状

我们是有三个数据中心,每个数据中心有多个可用区,每个可用区有多个Kubernetes集群。现在流量接入数据中心主要是通过硬件负载均衡设备,也就是图中Web层的LB和APP层的LB,这些其实都是硬件负载均衡的设备对。目前,三个数据中心大概有2000多对这样的硬件负载均衡设备。我们内部应用相互间的调用主要是以南北向的流量为主,Web层会做流量的分发,将99%的流量转发到本地数据中心,1%的流量转发到远端的数据中心。数据中心的特征因我们是微服务的架构,所以它的VIP数量很多,同时会有公网和内网的VIP,并且在VIP上配置有少量L7规则,也就是应用间互相调用的防护规则。

我们期望实现的目标是可以基于Istio将这2000多对硬件负载均衡设备对全部替换掉。这种两层的架构其实我们已经用了很多年了,它最大的好处是假设某一个服务的应用在某一个数据中心全部宕机,这种情况下流量会自动切换到远端的数据中心,因为这边的健康检查会将这条链路断掉,如此客户端就不会因为缓存了这个VIP地址,造成客户端数据面的影响。因此在应用部署时,在每一个数据中心是有容量冗余的,就是我们可以端掉一个数据中心,其他两个数据中心的容量可足够支撑这个服务。

规模化带来的挑战

1)异构应用

  • 云业务,大数据,搜索服务
  • 多种应用协议
  • 灰度发布

2)日益增长的安全需求:全链路TLS

3)可见性需求

  • 访问日志
  • Tracing

4)数据中心规模:3主数据中心,20边缘数据中心,100+ Kubernetes集群

5)规模化运营Kubernetes集群

  • 总计100,000物理节点
  • 单集群物理机节点规模高达 5,000

6)业务服务全面容器化,单集群

  • Pod实例可达 100,000
  • 发布服务 5,000-10000

7)单集群多环境支持

  • 功能测试、集成测试、压力测试共用单集群
  • 不同环境需要彼此隔离

目前我们采用的是基于IPVS和Istio的网络云原生架构:

基于IPVS的L4 Service控制器:

  • 四层网关调度
  • VIP地址分配
  • 不同应用配置独立网关VIP
  • 配置IPIP Tunnel模式的IPVS规则
  • 基于BGP VIP子网路由宣告
  • 配置IngressGateway Tunnel接口
  • 支持Direct Server Return (DSR)

Istio作为应用网关控制器:

  • 管理应用L7规则
  • 自动化生成eBay证书
  • 管理和注入sidecar
  • 网格内部请求mTLS

基于Istio的应用网关实践

Istio单集群多环境部署

  • 非生产环境:Feature/LnP/Staging/StagingPCI
  • 生产环境:Pre-Prod/Prod/PCI(Payment Card Industry)
  • 单个k8s集群部署多套Istiod,IngressGateway和L4集群
  • Cheery-pick 社区Pilot scoped namespaces PR
  • 不同环境控制面数据面隔离

Istio集群证书管理

网关证书

  • 集成eBay CA,secret保存证书Ref
  • Istiod集成cert agent
  • SDS通过cert agent GRPC获取证书和key推送到IngressGateway

集群证书

  • 利用自签根证书为每个Istio集群签发中间证书
  • 因安全方面的需求,需保证中间证书更新期间新旧证书同时可用

单网关全链路加密模式

单网关全链路加密模式的架构图

1)应用场景

  • Feature/LnP/Staging Secure测试环境
  • 全链路加密(E2E TLS)
  • 可用性要求不高

2)同时支持API Gateway和Mesh

  • 应用配置独立Gateway VIP
  • External访问API Gateway为Simple TLS
  • Mesh内部访问为mTLS
  • 不同环境配置专有L4/L7集群

3)软件防火墙集成(Sentinel)

  • 默认阻止所有访问
  • 保护Ingress/Egress流量
  • 保护进入Pod的流量

4)模拟生产环境

多网关多集群部署

1)Kubernetes集群联邦

  • 集群联邦APIServer作为用户访问kubernetes集群入口
  • 所有Kubernetes集群注册至集群联邦

2)可用区

  • 数据中心中具有独立供电制冷设备的故障域
  • 同一可用区有较小网络延迟
  • 同一可用区部署了多个Kubernetes集群

3)多集群部署

  • 同一可用区设定一个网关集群
  • 网关集群中部署Istio Primary
  • 同一可用区的其他集群中部署Istio Remote
  • 所有集群采用相同RootCA签发的中间证书

4)东西南北流量统一管控

  • 同一可用区的服务调用基于Sidecar
  • 跨可用区的服务调用基于Istio Gateway

Istio Primary-Remote压力测试

Istio控制面主要考虑两个配置推送到mesh的收敛时间(convergence time):

  • Gateway XDS
  • Sidecar EDS

结论:

1)单个Istiod 32 CPU/10G内存可以支持:

  • 32个Ingress Pods
  • 2000个sidecar

2)收敛时间小于5秒能够支持的规模:

  • 2000 k8s service(5个端口)
  • 其中同时有100个Endpoint地址发生变更

3)如果k8s Service数量少于2000,为了实现收敛时间小于5s,Istiod Pod的数量可以通过如下公式计算:

Istio Number = gateway number / 32 + sidecar number / 2000

应用高可用接入方案-多集群1层

这里的一层是指 VIP的数量:

流量管理

  • GTM(智能DNS)配置多个VIP,负责健康检查
  • GTM(智能DNS)配置不同数据中心流量权重
  • L4 IPVS 为流量入口
  • 没有跨数据中心流量
  • 应用数据面为网关Envoy到Sidecar Envoy

故障容灾

  • GTM监控VIP状态,自动mark down故障VIP
  • Istio 网关宕机会影响客户端DNS缓存
  • 单集群应用后端Pod整体宕机会造成数据面影响

应用高可用接入方案-多集群2层

方案一:

流量管理

  • L4 IPVS 为流量入口
  • 本集群流量从Gateway直连后端服务器
  • 跨集群流量经过远端IPVS VIP转发
  • ServiceEntry同时选择Pod和VIP
  • 定义基于Locality的流量转发规则
  • 同一数据中心流量权重99%,跨数据中心1%

故障容灾

  • 单集群应用后端Pod整体宕机不会造成数据面影响
  • Istio网关宕机,智能DNS停止返回该VIP

因此我们又提出了另外一种两层的架构,这种两层的架构是我们现在比较倾向于选择的架构,它虽然也有两层VIP,但实际上它只有一个IP,只是我们开了两个端口。

方案二:

流量管理

  • 两层VIP,适配现有模型
  • ServiceEntry实现跨数据中心流量
  • 利用Weighted HTTPRouteDestination,本数据中心98%,远端各1%
  • 所有流量都经过Istio

故障容灾

  • 单集群应用后端Pod整体宕机不会造成数据面影响
  • Istio 网关宕机会受客户端DNS缓存影响

应用高可用接入方案-数据面

  • 用户请求通过L4(IPVS)转发到IngressGateway
  • TLS PAASTHROUGH将请求路由至weighted cluster
  • Weighted cluster的Endpoints为本地和远端的网关地址
  • 请求转发至本集群:TLS握手发生在client和gateway pod
  • 请求需经过2次TLS
  • IngressGateway将请求响应通过Direct Server Return返回客户端
  • TLS握手发生在local gateway和gateway pod
  • Ingress Gateway Pod需配置eBay Root CA
  • 请求需经过2次TLS
  • 正常接收1%流量,本集群后端服务整体宕机接收100%流量

适配服务间调用(L7转发规则)

  • 99%请求走Mesh东西向流量
  • 1%请求经Gateway跨Mesh
  • VirtualService配置weighted Destination

统一流量模型 - AccessPoint

基于Istio网关的feature测试开发环境

Feature测试环境规模:

  • 单个测试环境包含一个Pod和若干个CNAME
  • Feature测试环境共享一个网关VIP
  • 4000+个Pod/VS/GW/Service以及5k个CNAME
  • 网关配置Wildcard证书

VirtualService指定转发规则

  • Host: foo.example.com
  • Destination:foo-service

Lesson Learn:

  • Istio 1.3,1.7k个Pod, Pilot OOM
  • 集群整体discover,配置过多
  • Listener缺失,CDS推送太慢
  • Gateway merge耗时,3k GW耗时近3k秒

因此这套方案后来我们没有使用,用另外一套方案去替换了。但是也有一个很大的教训,就是说一个merge的scalability不可能无限大,因此我们一是要做基于环境的隔离,二是要对merge的规模进行控制,这样才能保证整个merge的稳定性和可用性。

基于Istio网关的集中日志系统CAL

CAL日志系统集成Mesh

  • 不同网格同时部署应用以及日志服务器
  • 同时注入sidecar到应用端以及日志系统服务端
  • 网格内部mTLS实现日志脱敏
  • 南北流量转成东西流量

全链路加密存储服务-NuObject

NuObject是我们目前做的一个新项目,用来替换Swift, 前期我们也做了很多压力测试,下图为压力测试环境与结果:

压力测试环境

高吞吐压力测试

  • Gateway达到30Gb/s
  • Backend BM达到40Gb/s
  • Jumbo frame,9000 bytes MTU
  • Sidecar内存增加到3GB
  • Envoy worker增加到20

高安全性存储服务

  • 注入Sidecar到后端服务
  • 网关配置Simple TLS
  • 网格内部mTLS
  • 集成软件防火墙

Managed Stack全面集成Mesh

Managed Stack是使用eBay框架的应用,包括Java, Java Web, Batch以及NodeJS应用

  • 生产环境应用数量超过4000
  • 个别应用部署后端服务器超过3000
  • 生产环境Pod总数超180000
  • TLS/限速/授权与框架解耦
  • Fat container全面转向Native以及Mesh

Istio社区未解决的问题

1)端口协议冲突

  • 不支持privilege端口<1024
  • 同一网关端口不能同时支持TCP/HTTPS
  • 解决方案:分配不通gateway service target port

2)单点从外部访问mTLS Mesh机器

  • 解决方案:利用Subset Load Balancing,EnvoyFilter从URL解析Pod IP并转发

3)Envoy readiness probe

  • 无法确保数据面通、证书配置好
  • 解决方案:Readiness gate/Envoy active healthcheck

4)Init Container inbound/outbound被block,社区issue

  • 解决方案:添加anntation traffic.sidecar.istio.io/excludeInboundPorts/用1337运行Init Container

5)控制面性能问题

  • 解决方案:sharding,将mesh切片,限制单个mesh Gateway/Service/Pod数量

未来展望

  • 全面替换硬件负载均衡设备
  • 南北流量接入软件应用网关
  • 构建基于Mesh流量管理
  • 全站应用全面转向Cloud Native/Service Mesh
  • 数据中心内部南北流量转成东西流量
  • 数据平面加速Cilium

推荐阅读

如何利用云原生技术构建现代化应用

浅谈5 种典型的云原生架构反模式

Serverless 时代下大规模微服务应用运维的最佳实践

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-08-10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 云数智圈 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档