首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Kube:使用IPVS和External IP对K8S集群进行外部负载均衡

Kube:使用IPVS和External IP对K8S集群进行外部负载均衡

为什么IPVS DR和External IP可以结合在一起使用

IPVS DR方式转发的原理如下:

数据包在LB转发过程中,源/目的IP端口都不会变化,LB只是将数据包的MAC地址改写为RS的MAC地址,然后转发给相应的RS,所以每台RS上都必须在环回网卡上绑定LB的虚拟服务IP。

因为LB转发时并不会改写数据包的目的IP,所以RS收到的数据包的目的IP仍是LB的虚拟服务IP。为了保证RS能够正确处理该数据包,而不是丢弃,必须在RS的环回网卡上绑定LB的虚拟服务IP。这样RS会认为这个虚拟服务IP是自己的IP,自己是能够处理这个数据包的。否则RS会直接丢弃该数据包!

RS上的业务进程必须监听在环回网卡的虚拟服务IP上,且端口必须和LB上的虚拟服务端口一致。因为LB不会改写数据包的目的端口,所以RS服务的监听端口必须和虚拟服务端口一致,否则RS会直接拒绝该数据包。

RS处理完请求后,响应直接回给客户端,不再经过LB,因为RS收到的请求数据包的源IP是客户端的IP,所以理所当然RS的响应会直接回给客户端,而不会再经过LB。这时候要求RS和客户端之间的网络是可达的。

LB和RS须位于同一个子网,因为LB在转发过程中需要改写数据包的MAC为RS的MAC地址,所以要能够查询到RS的MAC。而要获取到RS的MAC,则需要保证二者位于一个子网,否则LB只能获取到RS网关的MAC地址。

在为k8s service配置external ip,并将external ip设置为ipvs vip后,会在k8s主机的iptables中增加该ip相关的nat条目,在k8s主机接收到目的ip为external ip的数据包后,会直接交由iptables处理,从而满足了ipvs dr相关的转发规则,使数据包得到正确的处理。

使用IPVS DR对K8S Service进行负载均衡

配置lb为192.168.0.63:80。

配置rs为k8s主机ip加80端口,即192.168.0.74:80,192.168.0.75:80,192.168.0.76:80。

配置转发类型为direct routing。

配置service的type为ClusterIP。

配置service的externalIPs为192.168.0.63,与lb地址相同。

配置service的端口为80。

检查service状态。

service的cluster ip为10.233.149.97。

在service中使用external ip后,会生成相应的iptables条目。

将目的地址为192.168.0.63的数据包转发给相应的pod,包括:10.234.0.4,10.234.2.4和10.234.5.5。

测试访问。

request uri为http://192.168.0.63:8080/。

pod地址为10.234.0.4。

在请求从192.168.0.172到达192.168.0.63后,由主机akw-ebd253b1-c515-57c3-b19a-111b1b4dd7a1将请求转发给10.234.0.4。

回复由192.168.0.63直接转发给192.168.0.172,不再经过ipvs。

使用IPVS DR对K8S Ingress Controller进行负载均衡

配置lb为192.168.0.64:80。

配置rs为k8s主机ip加80端口,即192.168.0.74:80,192.168.0.75:80,192.168.0.76:80。

配置转发类型为direct routing。

配置ingress controller的service type为ClusterIP。

配置ingress controller的service externalIPs为192.168.0.64,与lb地址相同。

配置service的端口为80。

检查ingress controller的service状态。

ingress controller的service cluster ip为10.233.148.68。

在ingress中配置到echoheaders服务80端口的路径为/echoheaders。

检查生成的ingress信息。

在ingress controller的service中使用external ip后,会生成相应的iptables条目。

将目的地址为192.168.0.64的数据包转发给相应的pod,包括:110.234.0.3,10.234.2.3和10.234.5.4。

测试访问。

request uri为http://192.168.0.64:8080/。

pod地址为10.234.0.4。

在请求从192.168.0.172到达192.168.0.64后,由主机akw-ebd253b1-c515-57c3-b19a-111b1b4dd7a1将请求转发给ingress controller 10.234.5.4。

ingress controller将请求转发给10.234.0.4。

回复由192.168.0.64直接转发给192.168.0.172,不再经过ipvs。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180815G135X700?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券