给 k8s nginx-ingress 添加 lvs DR 负载

背景

物理机上部署的 k8s 没有负载均衡器, 其 nginx-ingress 部署 master 节点上, 并且在 hostnetwork 上监听 80443 端口, 如果 k8s 前面没有 lvs 等负载, 那么请求只会到其中一台 nginx-ingress 上, nginx-ingress 相当于是主备模式, 单个 nginx-ingress 会成为性能瓶颈, 所以需要在 k8s 前面部署 lvs, 并且使用 DR 模式, 如图
在这里插入图片描述

术语

CIP: 客户的 ip

DIP: lvs 上用于与后端服务器进行数据交互的 ip, lvs 修改完 MAC 地址后, 将包从该 ip 发到 lan

RIP: 后端服务器的 ip, 需要跟 DIP 在同一网段

VIP: 对外提供服务, 由 keepalived 生成的虚 ip, 一般是外网

lvs: lvs 服务器, 部署了 lvs 服务, 用于负载流量到后端真实服务器

RealServer: 后端真实服务器

DR 模式优缺点

优点

  1. 由于请求经过 lvsRealServer, 但是相应直接从 RealServer 到客户端, 不再走 lvs, 所以性能和效率都很高

缺点

  1. 不支持端口映射, 也就是 RealServervip 提供的端口必须一致, 因为 DR 模式, lvs 只修改包的 MAC 地址, 不涉及三层的修改
  2. RealServerLVS 不能在同一台机器上, 详见: http://linbo.github.io/2017/08/20/lvs-dr

备注

  1. 可以直接使用 ipvsadm 来创建 lvs 规则,但没有 vip 保证 ip 高可用,而 keepalived 本身就是 lvs 实现的,所以可以直接通过 keepalived 来实现 lvs 规则,并且有 vip
  2. NAT 模式 lvs 需要开启路由转发(echo "1" > /proc/sys/net/ipv4/ip_forward),DR 模式不需要
  3. DR 模式的每台 lvs 服务器以及 RealServer 服务器的 lo 口上都绑定有 vip, 而这么多服务器有同一个外网 vip, 如何保证客户端访问到 lvsvip, 就需要 RealServer 设置 ARP 抑制
  4. 如果 lvs 只有一个外网口, DIPRIP需要在同一网段,也就是 DIPVIPRIP 要在同一网段,也就是都要使用外网 ip,如果有两台 lvs,两台 RealServer,那么总共需要 5 个外网ip,同时因为 RealServer 有公网 ip,那么 RealServer 其实可以直接对外提供服务,但将 RealServer 暴露在外网不太安全
  5. 上面的方式太消耗外网ip,并且不安全,所以实际使用中可以只使用一个外网ip实现 DR模式,也就是 VIP 与 (DIPRIP) 使用不同网段,其中 VIP 使用外网段,DIPRIP 使用内网段,其中 lvs 要有两个网口,其中一个网口用于绑定 vip,另一个网口用于绑定内外ip,与 RealServer 的内网 ip 相通,并且设置 RealServer 的默认路由为自己的内网路由器网关,不能是 DIP,详见:(如果 RealServer 默认网关想使用 DIP,需要打补丁,太麻烦)
  6. vip 要配置在RealServerlo 口, 并且子网掩码必须是 32 位, 如果不是 32 位, 例如 24 位, lo 会相应整个 24 段的所有 ip 的请求

部署

最终环境

操作系统均为 ubuntu18.04

角色 内网ip 外网ip vip
  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值