HAproxy配置IPv6和IPv4的互相代理实验

HAproxy配置IPv6和IPv4的互相代理实验,第1张

这里我们使用简单的 httpd 服务进行测试。

实验环境

测试IPv6访问

在机器 3 上安装 httpd,配置监听 IPv4 和 IPv6 的 80 端口。

文件:/etc/httpd/conf/httpd.conf

Listen10.144.85.73:80

Listen[fd88:5110:a240::886:f252]:80

在 1 上通过 curl 访问 :

curl10.144.85.73:80

IPv4 可以正常访问 ,返回数据较长,这里不再展示。

#curl-g[fd88:5110:a240::886:f252]:80

curl: (7)Failedconnecttofd88:5110:a240::886:f252:80Connectionrefused

IPv6 地址无法访问到 httpd 服务。 IPv6 访问不稳定 ,源穗纳有时可以正常返回数据。

机器 1 上抓包来看,数据包发送出去了:

23:42:52.924028IP6epic1.52564>fd88:5110:a240::886:f252.http:Flags[S],seq480439591,win28800,options[mss 1440,sackOK,TS val 17786404 ecr 0,nop,wscale 7],length0

23:42:52.924033ethertypeIPv6,IP6epic1.52564>fd88:5110:a240::886:f252.http:Flags[S],seq480439591,win28800,options[mss 1440,sackOK,TS val 17786404 ecr 0,nop,wscale 7],length0

23:42:52.924035ethertypeIPv6,IP6epic1.52564>fd88:5110:a240::886:f252.http:Flags[S],seq480439591,win28800,options[mss 1440,sackOK,TS val 17786404 ecr 0,nop,wscale 7],length0

23:42:52.937267ethertypeIPv6,IP6fd88:5110:a240::886:f252.http>epic1.52564:Flags[R.],seq0,ack480439592,win0,length0

23:42:52.937270ethertypeIPv6,IP6fd88:5110:a240::886:f252.http>epic1.52564:Flags[R.],seq0,ack1,win0,length0

23:42:52.937271IP6fd88:5110:a240::886:f252.http>epic1.52564:Flags[R.],seq0,ack1,win0,length0

此时机器 3 上抓不到包。

HAproxy 代理测试

在机器 1 上安装 HAproxy。

IPv6 代理 IPv4

我们配置 机器 1 的 IPv6 地址来代理 机器 3 的 IPv4 地址,配置如下:

另外,配置了 HAproxy 的管理页面,这里不再赘述。

理论上,可以在浏览器中输入http://[fd88:5110:a240::886:f250]:8080/,来测试。

由于公司环境,VPN 没有代理 IPv6 地址,所以只能通过 curl 的方式测试。

在机器 3 上访问:

curl -g [fd88:5110:a240::886:f250]:8080

数据可以正常返回,返回用时不稳定,大部分情况下 返回结果用时很长 ,用时近 15s。也有访问无返回的情况。

通过 机器 2 访问时,一切正常!雹没返回速度也很快!

IPv4 代理 IPv6

现在机器 3 的 httpd 服务无法通过 IPv6 正常访问,我们只能采用 迂回的方式 来做这个测试了。

既然,在机器 2 上可以通过 IPv6 访问 HAproxy 代理的服务族姿,那我们在机器 2 上再做一层 HAproxy。

机器 2 的 HAproxy 配置:

这里的后端 http1 的地址使用的是机器 2 上的 HAproxy 的对外地址。

这里,可以通过浏览器访问http://10.144.91.125:18080/:

正常访问

结论

1、通过 HAproxy 可以实现 IPv4 代理 IPv6,IPv6 代理 IPv4 ;

2、地址转换时感觉还是有些问题,不确定是否是 httpd 服务的问题还是机器;

3、下一步需要 部署真实服务再进行验证 ;

链接:https://www.jianshu.com/p/09e62aa8caff

一、Haproxy概述;

概述:Haproxy是一个开源的高性能的反向代理或者说是负载均衡服务软件之一,由C语言编写而成,支持会话保持、七层处理、健康检查、故障修复后自动加载、动静分离。HAProxy运行在当前的硬件上,完全可以支持数以万计的并发连接;

Haproxy软件引入了frontend,backend的功能,frontend(acl规则匹配)可以运维管理人员根据任意HTTP请求头做规则匹配,然后把请求定向到相关的backend(server pools等待前端把请求转过来的服务器组)。

二、Haproxy原理实现;

代理模式:

1.四层tcp代理:例如:可用于邮件服务内部协议通信服务器、Mysql服务等;

2.七层应用代理:例如:HTTP代理或https代理。在4层tcp代理模式下,Haproxy仅在客户端和服务器之间双向转发流量。但是在7层模式下Haproxy会分旁棚迟析应用层协议,并且能通过运行、拒绝、交换、增加、修改或者删除请求(request)或者回应(reponse)里指定内容来控制协议。

四层代理:

ISO参考模型中的第四层传输层。四层负载均衡也称为四层交换机,它主要是通过分析IP层及TCP/UDP层的流量实现的基于IP加端口的负载均衡。常见的基于四层的负载均衡器有LVS、F5等。以常见的TCP应用为例,负载均衡器在接收到第一个来自客户端的SYN请求时,会通过设定的负载均衡算法选择一个最佳的后端服务器,同时将报文中目标IP地址修改为后端服务器IP,然后直接转发给该后端服务器,这样一个负载均衡请求就完成了。从这个过程来看,一个TCP连接是客户端和服务器直接建立的,而负载均衡器只不过完成了一个类似路由器的转发动作。在某些负载和贺均衡策略中,为保证后端服务器返回的报文可以正确传递给负载均衡器,在转发报文的同时可能还会对报文原来的源地址进行修改。整个过程下图所示。

七层代理:

ISO参考模型中的最高层第七层应用层。七层负载均衡也称为七层交换机,此时负载均衡器支持多种应用协议,常见的有HTTP、FTP、SMTP等。七层负载均衡器可以根据报文内容,再配合负载均衡算法来选择后端服务器,因此也称为“内容交换器”。比如,对于Web服务器的负载均衡,七层负载均衡器不但可以根据“IP+端口”的方式进行负载分流,还可以根据网站的URL、访问域名、浏览器类别、语言等决定负载均衡的策略。例如,有两台Web服务器分别对应中英文两个网站,两个域名分别是A、B,要实现访问A域名时进入中文网站,访问B域名时进入英文网站,这在四层负载均衡器中几乎是无法实现的,而七层负载均衡可以根据客户端访问域名的不同选择对应的网页进行负载均衡处理。常见的七层负载均衡器有HAproxy、Nginx等。

这里仍以常见的TCP应用为例,由于负载均衡器要获取到报文的内容,因此只能先代替后端服务器和客户端建立连接,接着,才能收到客户端发送过运李来的报文内容,然后再根据该报文中特定字段加上负载均衡器中设置的负载均衡算法来决定最终选择的内部服务器。纵观整个过程,七层负载均衡器在这种情况下类似于一个代理服务器。整个过程如下图所示。

三、常见的代理了解

1、lvs和硬件F5,是基于IP的三层负载,硬件适配性能好,处理性能强。

2、haproxy,可以适配三层负载均衡,同样可以适配七层。对于页面明确有请求分离的时候,可以使用haproxy。

3、nginx,对于日PV小于500万,对于需要进行高并发的站点,可以使用nginx代理

四、haproxy配置文件讲解

五、案例:Haproxy+Nginx+Tomcat搭建高可用集群

实例步骤

1、配置tomcat服务器

2、安装haproxy

3、配置haproxy服务:

4、测试集群

5、配置haproxy的日志文件分离(查看haproxy日志)

6、配置haproxy服务器的日志管理web界面

测试

看到以上界面实验就做完了

END

架构说明

Kubernetes集群组件:

k8s集群高可用,一般是etcd,kube-apiserver,kube-controller-manager,kube-scheduler服务组件的高可用。

规划:

3个master节点,2个worker节点,使用keepalived+haproxy做高可用

一、前期环境准备

Kubernetes 1.8开始要求关闭系统的Swap,如果不关闭,默认配置下kubelet将无法启动。

方法一 通过kubelet的启动参数–fail-swap-on=false更改这个限制。

方法二 关闭系统的Swap, swapoff -a

修改/etc/fstab文件,注释掉SWAP的自动挂载,使用free -m确认swap已经关闭。

二、docker安装

安装则氏docker-ce,所有节点都要安装

yum-utils 提供yum-config-manager工具,devicemapper存储需要device-mapper-persistent-data和lvm2

添加yum源仓库

官方仓库

安装docker

配置docker中国镜像加速,修改cgroup driver为systemd,k8s建议使用systemd,配置后重启docker

三、安装haproxy,keepalived

安装haproxy和keepalived,实现kube-apiserver高可用

psmisc提供killall命令

配置haproxy

配置keepalived

注意:在另外两个节点,设置state为BACKUP,priority设扰盯败置为110,100

启动所有节点的haproxy和keepalived

查看VIP

注意,使用ifconfig命令是看不到的,必须使用ip addr命令

这时候vip在130.252.10.235上,我们关闭235上的haproxy,验证vip是否会漂移到其他节点

四、kubeadm/kubelet/kubectl安装

master节点安装:kubeadm、kubelet、kubectl

node节点安装:kubeadm、kubelet

安装

五、使用kubeadm初始化cluster

step1 准备初始化配置文件

根据自己的环境修改配置.

step2 处理kubernetes依赖的镜像

master需要的镜像为

node节点需要的镜像为

查看需要的镜像版本

拉取镜像

六、初始化第一个master节点

注意:如果你禁用了swap分区,则不需要加--ignore-preflight-errors=Swap

配置kubectl

启用kubectl的自动补全命令

七、安装Pod网络flannel

八、将其他master节点添加到cluster

将node1证书文件复制到其他master节点node2,node3

分别在master1和master2 执行下面的命令

九、将node节点添加到cluster

十、检查集群运行 健康

在master节点查看节点状态

所有的节点都是NotReady,这是因为每个节点都需要启动若干组件,这些组件都是在pod中运行,需要从Google下载镜像

查看pod的状态

查看集群信息

查看etcd集群

查看集群缓颤是否 健康

查看集群的leader

注意 :因为是3个节点的ETCD集群,所以只能有一个宕机,如果同时又2个节点宕机,则会出现问题Unable to connect to the server: EOF

etd集群需要大多数节点(仲裁)才能就集群状态的更新达成一致,所以ETCD集群节点一般是奇数个,而且只有存活节点个数大于下线节 点个数才能正常运行,5个节点的ETCD集群,允许同时2个节点故障。

一般建议5个节点,超过五个虽然容错性更高,但是集群写入性就会差。

检查IPVS


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/12392290.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-25
下一篇 2023-05-25

发表评论

登录后才能评论

评论列表(0条)

保存