DR方式是通过MAC,规模是一个交换网络。而TUN方式,是通过给数据包加上新的IP头部来实现,这个可以跨整个广域网。

LVS集群-IP tun模式_html

异地机房的好处: 容灾
但是是否可以保证 边界 最近访问到对应的real server呢? 不能,这是最大的问题
DNS view功能实现 边界最近访问。 智能DNS
实战:配置LVS-IP TUN集群
精简版实验拓扑图

LVS集群-IP tun模式_html_02

一、k8s01 配置成 Director:

1,配置网络:
ens33 DIP 192.168.10.131
ens33:1 VIP 192.168.10.250
ifconfig ens33:1 192.168.10.250
echo 1 > /proc/sys/net/ipv4/ip_forward
2, 配置 LVS TUN模式
[root@k8s01 ~]# ipvsadm -C
[root@k8s01 ~]# ipvsadm -A -t 192.168.10.250:80 -s rr
[root@k8s01 ~]# ipvsadm -a -t 192.168.10.250:80 -r 192.168.10.132 -i
[root@k8s01 ~]# ipvsadm -a -t 192.168.10.250:80 -r 192.168.10.134 -i
[root@k8s01 ~]# ipvsadm -L -n
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 192.168.10.250:80 rr
-> 192.168.10.132:80 Tunnel 1 0 0
-> 192.168.10.133:80 Tunnel 1 0 0
# -i 隧道模式

二、RealServer:k8s02

1,配置IP:
配置ens33的 RIP为:192.168.10.132
[root@k8s02 ~]# modprobe ipip #在加载好ipip模块后就会有默认的tunl0隧道。
注,如果没有在此处手动加载,那么使用ifconfig tunl0 时,会自动加载ipip隧道模块。
使用 ifconfig查看。没有tun0 ,加参数-a 时,查看可以看到tun0
[root@k8s02 ~]# ifconfig -a #查看。
tunl0: flags=128<NOARP> mtu 1480
tunnel txqueuelen 1000 (IPIP Tunnel)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
[root@k8s02 ~]# lsmod|grep ipip
ipip 13465 0
tunnel4 13252 1 ipip
ip_tunnel 25163 1 ipip
2、配置VIP:
[root@k8s02 ~]# ifconfig tunl0 192.168.10.250 netmask 255.255.255.255 up
[root@k8s02 ~]# service network restart
Restarting network (via systemctl): [ OK ]
[root@k8s02 ~]# ifconfig
tunl0: flags=193<UP,RUNNING,NOARP> mtu 1480
inet 192.168.10.250 netmask 255.255.255.255
tunnel txqueuelen 1000 (IPIP Tunnel)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
3,关闭ARP转发
echo '0' > /proc/sys/net/ipv4/ip_forward
echo '1' > /proc/sys/net/ipv4/conf/tunl0/arp_ignore
echo '2' > /proc/sys/net/ipv4/conf/tunl0/arp_announce
echo '1' > /proc/sys/net/ipv4/conf/all/arp_ignore
echo '2' > /proc/sys/net/ipv4/conf/all/arp_announce
echo '0' > /proc/sys/net/ipv4/conf/tunl0/rp_filter
echo '0' > /proc/sys/net/ipv4/conf/all/rp_filter
# tunl0/rp_filter 默认为1 , 需要改为0,关闭此功能。Linux的rp_filter用于实现反向过滤技术,也即uRPF,它验证反向数据包的流向,
以避免伪装IP攻&击 。 然而,在LVS TUN 模式中,我们的数据包是有问题的,因为从realserver eth0 出去的IP数据包的源IP地址应该为
192.168.1.62,而不是VIP地址。所以必须关闭这一项功能。 DR和TUN在 网络层实际上使用了一个伪装IP数据包的功能。让client收到数据包后,
返回的请求再次转给分发器。
echo '0' > /proc/sys/net/ipv4/conf/all/rp_filter #这个值默认就是0,此功能就是关闭的。所以在LVS DR模式中,不需要修改这一
样内核参数

永久生效:
[root@k8s02 ~]# vim /etc/sysctl.conf #以文件最后添加以下内容
net.ipv4.conf.tunl0.arp_ignore = 1
net.ipv4.conf.tunl0.arp_announce = 2
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.tunl0.rp_filter = 0
net.ipv4.conf.all.rp_filter = 0

[root@k8s02 ~]# sysctl -p

4, 配置web服务器
yum install -y httpd
echo 192.168.10.132 > /var/www/html/index.html
systemctl restart httpd

三、RealServer:k8s04

1,配置IP地址:
配置ens33 RIP 192.168.10.134
modprobe ipip
#在加载好ipip模块后就会有默认的tunl0隧道
配置VIP:
[root@k8s04 ~]# ifconfig tunl0 192.168.10.250 netmask 255.255.255.255
查看:
[root@k8s04 ~]# ifconfig
tunl0: flags=193<UP,RUNNING,NOARP> mtu 1480
inet 192.168.10.250 netmask 255.255.255.255
3,关闭ARP转发
永久生效:
[root@k8s04 ~]# vim /etc/sysctl.conf #以文件最后添加以下内容
net.ipv4.conf.tunl0.arp_ignore = 1
net.ipv4.conf.tunl0.arp_announce = 2
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.tunl0.rp_filter = 0
net.ipv4.conf.all.rp_filter = 0
[root@k8s02 ~]# sysctl -p
4, 配置web服务器
echo 192.168.10.134 > /var/www/html/index.html
systemctl restart httpd

测试:
先测试realserver:
http://192.168.10.132
http://192.168.10.134
#注:不能在分发器上直接测试,需要去其他机器上测试
elinks http://192.168.10.250 --dump

LVS集群-IP tun模式_加载_03

LVS集群-IP tun模式_加载_04