负载均衡设备科普篇:F5 BIG-IP链接Istio 如何增强入口服务能力?

在Istio体系下,为了保证策略协调与体验的统一性,用户会考虑使用Istio自身的Ingressgateway作为南北流量的入口, ingressgateway一般是通过deployment方式部署多个pods,分散在集群的多个node上,取决于具体的暴露type,特别是在on-prem部署下,仍然需要在k8s集群外部部署相关负载均衡设备来对这些ingressgateway进行负载均衡。与将普通业务svc暴露到外部BIG-IP不同,ingressgateway本身就是一个各种业务端口的集结点,它本身可能监听着很多端口,因此并不能简单的将ingressgateway作为单一一个普通的svc。F5 BIG-IP链接Istio 如何增强入口服务能力?

网络结构上可能采取的方法有:

外部负载均衡设备—访问到–> ingressgateway的nodeport端口

外部负载均衡设备—访问到–> ingressgateway的直接endpoints端口(直达pod)

从效能上来说自然是上述第二种直达pod方式性能更好,取决于k8s集群的网络模型,如果外部与pod可直接路由或二层直连自然最简单,如果不能直接路由,那就需要基于vxlan等隧道来实现pod直达。F5 BIGIP支持二层直达、动态路由或vxlan隧道模式。下文我们假定F5 BIGIP已经与k8s集群实现vxlan,可直达pod。数据最终路径如下:
  client–>F5BIGIP–>Istio ingressgateway pod–>endpoints

Istio Ingressgateway的底层实现是envoy,当我们通过Gateway+VirtualService资源将一个服务发布到Ingressgateway上后,Ingressgateway便会监听Gateway里指定的端口。因此一旦发布新的业务就有可能会有新的监听端口。然而我们在部署ingressgateway pod的时候并不会提前配置好所有的端口对外的映射,也就是说pod里容器监听的端口并没有在pod的deployment里做配置,不必担心,此时是可以直接访问到pod上的此监听端口的,尽管deployment里并没有预先指定该监听端口。

那么如何通过负载均衡设备BIG-IP为Ingressgateway进行负载均衡并动态发现这些新监听的服务呢,答案自然是本文所述的方案,F5 BIGIP提供了一个控制器,运行在k8s内部,将这些发生的变化自动推送到BIGIP上。由于同一个k8s svc包含有多一个端口,因此在将这个k8s svc发布到F5上时 需要注意servicePort参数的填写。具体发布过程参考以下步骤操作:

1.部署Istio Gateway+VirtualService 资源

2.编辑已有的Ingressgateway对应的k8s svc,增加新的port与target port配置

3.配置新的F5 configmap资源,指定对应的servicePort 对新的业务进行发布

DEMO

1.首先查看已有的Ingressgateway pod端口如下, 容器端口里没有暴露32400端口

2. 部署Istio Gateway与VirtualService

3. 部署完毕后,查看envoy,确认监听已下发

4.修改现有的Ingressgateway的svc,增加32400端口的对外暴露

5. 将32400 servicePort发布到F5上,此时需要新增一个F5 configmap,注意其中的中文注释。

F5上将自动产生如下红框中的配置:
 负载均衡设备科普篇:F5 BIG-IP链接Istio 如何增强入口服务能力?_第1张图片

从外部模拟访问业务,可以看到可以正常访问

至此,Istio Ingressgateway上新发布的业务监听被成功的自动发布到BIG-IP上,用户只需通过访问BIG-IP的VS即可实现对k8s内(Istio Ingressgateway上)的服务访问。

对于后续其它新端口业务的发布,重复上述步骤即可。

你可能感兴趣的:(负载均衡设备科普篇:F5 BIG-IP链接Istio 如何增强入口服务能力?)