Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >负载均衡策略导致后端程序访问异常

负载均衡策略导致后端程序访问异常

作者头像
charlieroro
发布于 2020-03-24 07:05:48
发布于 2020-03-24 07:05:48
1.1K0
举报
文章被收录于专栏:charlierorocharlieroro

起因:

  最近新部署了openshift集群,由于使用了自签证书,浏览器访问集群的https服务会报告警(如下图),在使用浏览器(特别是IE)访问openshift master暴露的服务时,选择继续访问时,出现了尝试很多次才能登陆成功的情况。

问题排查:

  访问流程如下,client(浏览器)会直接访问到openstack的elb,elb使用FullNat模式,将流量导入到openshift集群的route节点(为便于问题定位,route减少为1个)的HaProxy上,再由其按照规则将流量导到3个master中的某一个。注:openshift部署在华为openstack之上。

  在client抓包发现client在访问https服务之前会进行证书交互,但在client发出client hello报文,且server回了server hello,certificate,server key exchange,hello done报文之后,client就没有再回tls报文给server端。查看tcp报文,发现client端主动发起fin断链。随后的报文也一直在重复上述交互过程。

  从上述所看就是证书交互没有正常完成出了问题,将openshift集群的ca证书手动加载到client端浏览器的可信任证书后,该现象消失,浏览器可以正常访问。起初以为是证书生成有问题,因为server端已经正常回复了tls报文(经排查,交互的tcp报文以及dns解析都正常),而client端在接收到server的报文之后并没有进行回复,而是选择断开链接,该操作是由浏览器产生的,不明白为什么浏览器一直会发出tcp fin报文。

  为方便定位,简化模型如下,去掉了openstack的elb,发现此时浏览器可以正常访问,此时基本确认是elb的问题。

  经过沟通和尝试,发现该elb后端部署了多个ip(为了支持更多服务的NAT需求),一开始该elb的负载均衡策略为轮询,而openshfit的haproxy的负载均衡策略为ip hash,因此相同client的不同tcp链接可能经过不同的虚拟IP nat到openshift集群。

  这样问题就比较清楚了:当浏览器访问后端服务时,首先经过elb,由elb的某个IP传输到openshift的haproxy,再由haproxy hash到某个master节点。在单条tcp条件下是没有问题的,这也是为什么浏览器添加ca到信任证书列表之后可以正常访问了,因为此时ssl协商不会被浏览器中断;而在ca未添加到浏览器信任证书列表时,当client访问后端服务时,浏览器会弹出“站点不安全“告警,此时浏览器会发出tcp fin断链报文,当选择继续访问时,此时client会允许使用该证书进行访问,但此时会重新进行tcp建链,由于elb使用了轮询模式,该tcp可能会选择跟前面不一样的ip出去,而openshift haproxy使用的又是ip hash模式,当源ip不一致时会选择不一样的master。这样原证书会和新节点不匹配,就出现了前面浏览器尝试多次无法链接的情况,特殊情况下二者正好匹配到,此时浏览器可以正常访问。

证书不匹配时,客户端(浏览器)会发出Fatal级别的alert

rfc52467.2.2. Error Alerts 章节中有如下表述,即当接收到fatal级别的消息时,server和client会断开并清空与该链接相关的信息(如证书),因此后续浏览器会重新初始化链接,导致无法使用允许的自签证书通信

Upon transmission or receipt of a fatal alert message, both parties immediately close the connection. Servers and clients MUST forget any session-identifiers, keys, and secrets associated with a failed connection. Thus, any connection terminated with a fatalalert MUST NOT be resumed.

解决方法

  1. 将CA证书拷贝到浏览器信任证书列表,或使用非自签证书
  2. openstack的elb使用ip hash模式,这样相同client的tcp不会nat到elb的多个虚拟ip

注:

由于使用2个lb其实有点多余,后期进行了优化,删除了openshift的haproxy

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019-04-09 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
负载均衡LVS原理及其应用
一、LB常用解决方案 1、硬件负载均衡解决方案: F5公司: BIG-IP Citrix公司: Netscaler A10公司: A10 Array Redware 2、 Linux: LVS 1. 完成Linux Virtual Server作者 (章文嵩,花名段正明) 2. ipvs工作于netfilter框架上 3. ipvs: 框架,工作在内核中,工作在inpu
小小科
2018/05/03
1.3K0
负载均衡LVS原理及其应用
转 LVS 负载均衡
负载均衡集群是 Load Balance 集群。是一种将网络上的访问流量分布于各个节点,以降低服务器压力,更好的向客户端提供服务的一种方式。常用 的负载均衡。 开源软件有Nginx、LVS、Haproxy      (ngnix和haproxy是七层负载均衡,LVS是四层负载均衡) 商业的硬件负载均衡设备F5、Netscale。 简单的理解一下软件负载均衡。①.所谓分层的负载均衡,都是以网络的模型来说的。四层就是基于IP和端口的负载均衡,七层就是基于URL等应用  信息的负载均衡。所以简单的说四层负载
用户1220053
2018/06/06
9790
LVS负载均衡高可用解决方案
问:什么是LVS? 答:Linux 虚拟服务器(Linux Virtual Server)其实它是一种集群(Cluster)技术,采用IP负载均衡技术和基于内容请求分发技术可以将其看做是一个调度器;
全栈工程师修炼指南
2020/10/26
5890
LVS负载均衡高可用解决方案
Load balancer 负载均衡
负载均衡器将传入的请求分发到应用服务器和数据库等计算资源。无论哪种情况,负载均衡器将从计算资源来的响应返回给恰当的客户端。负载均衡器的效用在于:
一个会写诗的程序员
2020/05/27
1.4K0
Load balancer 负载均衡
企业实战(13)LVS负载均衡NAT(网络地址转换)模式实战详解(一)
 DNS 实现负载均衡是最基础简单的方式。一个域名通过 DNS 解析到多个 IP,每个 IP 对应不同的服务器实例,这样就完成了流量的调度,虽然没有使用常规的负载均衡器,但也的确完成了简单负载均衡的功能。
非著名运维
2022/06/22
1K0
企业实战(13)LVS负载均衡NAT(网络地址转换)模式实战详解(一)
OKHttp源码解析(二):"前戏"——HTTP的那些事
本篇文章为OkHttp的"前戏"篇,主要讲解关于http协议的一些基础知识。主要内容如下:
隔壁老李头
2018/08/30
1.6K0
OKHttp源码解析(二):"前戏"——HTTP的那些事
HTTPS工作原理和TCP握手机制
HTTPS在传输数据之前需要客户端(浏览器)与服务端(网站)之间进行一次握手,在握手过程中将确立双方加密传输数据的密码信息。TLS/SSL协议不仅仅是一套加密传输的协议,更是一件经过艺术家精心设计的艺术品,TLS/SSL中使用了非对称加密,对称加密以及HASH算法。握手过程的具体描述如下:
业余草
2019/08/14
1.6K0
计算机网络经典20问!
计算机网络体系大致分为三种,OSI七层模型、TCP/IP四层模型和五层模型。一般面试的时候考察比较多的是五层模型。
程序员大彬
2021/10/04
3400
计算机网络经典20问!
亿级PV请求的三种负载均衡技术
在互联网+不断渗透到生活中的今天,各种各样的网络服务存在在我们身边,他们的访问流量也是大得惊人。一个大型网站(百万PV以上)想要正常访问,单单靠一台服务器是不可能提供稳定服务的。这时候就需要用负载均衡
陈树义
2018/04/13
1.4K0
亿级PV请求的三种负载均衡技术
负载均衡原理与技术实现
负载均衡(Load Balance,简称LB)是一种服务器或网络设备的集群技术。负载均衡将特定的业务(网络服务、网络流量等)分担给多个服务器或网络设备,从而提高了业务处理能力,保证了业务的高可用性。负载均衡基本概念有:实服务、实服务组、虚服务、调度算法、持续性等,其常用应用场景主要是服务器负载均衡,链路负载均衡。
菲宇
2019/06/12
3.1K0
负载均衡原理与技术实现
集群、分布式、负载均衡区别
  计算机集群通过一组松散集成的计算机软件和/或硬件连接起来高度紧密地协作完成计算工作。在某种意义上,他们可以被看作是一台计算机。集群系统中的单个计算机通常称为节点,通常通过局域网连接,但也有其它的可能连接方式。集群计算机通常用来改进单个计算机的计算速度和/或可靠性。一般情况下集群计算机比单个计算机,比如工作站或超级计算机性能价格比要高得多。   比如单个重负载的运算分担到多台节点设备上做并行处理,每个节点设备处理结束后,将结果汇总,返回给用户,系统处理能力得到大幅度提高。一般分为几种:
BUG弄潮儿
2020/06/15
1.7K0
集群、分布式、负载均衡区别
搞定计算机网络,这些问题还没有我答不出来的!
通信协议(communications protocol)是指双方实体完成通信或服务所必须遵循的规则和约定。通过通信信道和设备互连起来的多个不同地理位置的数据通信系统,要使其能协同工作实现信息交换和资源共享,它们之间必须具有共同的语言。交流什么、怎样交流及何时交流,都必须遵循某种互相都能接受的规则。这个规则就是通信协议。
cxuan
2020/11/23
7660
搞定计算机网络,这些问题还没有我答不出来的!
如何做负载均衡的并发测试?
负载均衡的并发测试,主要目标是测试负载均衡系统支持的最大并发连接数量。本文将介绍测试中应用的部署,测试的工具以及测试的过程。
路痴赵大宝
2021/02/03
3.9K0
如何做负载均衡的并发测试?
HTTP和HTTPS协议,看一篇就够了
先来观察这两张图,第一张访问域名http://www.12306.cn,谷歌浏览器提示不安全链接,第二张是https://kyfw.12306.cn/otn/regist/init,浏览器显示安全,为什么会这样子呢?2017年1月发布的Chrome 56浏览器开始把收集密码或信用卡数据的HTTP页面标记为“不安全”,若用户使用2017年10月推出的Chrome 62,带有输入数据的HTTP页面和所有以无痕模式浏览的HTTP页面都会被标记为“不安全”,此外,苹果公司强制所有iOS App在2017年1月1日前使用HTTPS加密。
全栈程序员站长
2022/08/12
3850
HTTP和HTTPS协议,看一篇就够了
负载均衡详解
面对大量用户访问、高并发请求,海量数据,可以使用高性能的服务器、大型数据库,存储设备,高性能Web服务器,采用高效率的编程语言比如(Go,Scala)等,当单机容量达到极限时,我们需要考虑业务拆分和分布式部署,来解决大型网站访问量大,并发量高,海量数据的问题。 从单机网站到分布式网站,很重要的区别是业务拆分和分布式部署,将应用拆分后,部署到不同的机器上,实现大规模分布式系统。分布式和业务拆分解决了,从集中到分布的问题,但是每个部署的独立业务还存在单点的问题和访问统一入口问题,为解决单点故障,我们可以采取冗余
用户1263954
2018/01/30
3.3K0
负载均衡详解
理解OpenShift(1):网络之 Router 和 Route
顾名思义,Router 是路由器,Route 是路由器中配置的路由。OpenShift 中的这两个概念是为了解决从集群外部(就是从除了集群节点以外的其它地方)访问服务的需求。不晓得为什么OpenShift 要将Kubernetes 中的 Ingress 改为 Router,我倒是觉得 Ingress 名字更贴切。
SammyLiu
2019/06/28
2.4K0
理解OpenShift(1):网络之 Router 和 Route
Java面经——计算机网络
经过两个月的面试,还是积累了比较多的面试经验,面试的时候会问很多基础的东西,然而这些往往是平时容易忽略的知识。现在我将这两个月准备的内容以及面试中常问的知识点都整理一下写成博客,方便大家也方便自己以后复习巩固,有的回答不一定标准,如果发现问题欢迎联系我进行修正。今天的内容是计算机网络部分。
beifengtz
2019/06/03
9320
Java面经——计算机网络
HTTP和HTTPS协议,看这一篇就够了
先来观察这两张图,第一张访问域名http://www.12306.cn,谷歌浏览器提示不安全链接
网络安全自修室
2021/11/25
2.9K0
HTTP和HTTPS协议,看这一篇就够了
浏览器页面呈现过程
首先浏览器将输入的链接进行DNS解析,也就是将域名转换为IP地址的过程,得到了服务器具体的IP地址,才可以进行TCP链接以及数据的传输。 具体DNS解析的过程,浏览器首先检查自身的DNS缓存是否对于此域名有IP地址,chrome对于域名解析的缓存时间为60s,可以通过地址栏输入chrome://net-internals/#dns清除DNS缓存。若浏览器解析缓存未命中,则到操作系统中hosts文件检查域名与IP对应关系。若hosts文件未命中,则向本地域名服务器请求解析,本地域名服务器一般是运营商ISP提供的,一般是通过53端口发送UDP报文请求服务器解析DNS。若本地服务器解析未命中则会有两种解析方案:迭代解析与递归解析,一般来说,主机向本地域名服务器的查询一般都是采用递归查询,本地域名服务器向根域名服务器的查询通常是采用迭代查询,依次向根域名服务器、顶级域名服务器、主域名服务器等一级一级查询查询直到查询到IP地址。
WindRunnerMax
2020/08/27
6790
腾讯云公网负载均衡技术实现详解
朱彬峰
2017/04/23
23.3K4
腾讯云公网负载均衡技术实现详解
相关推荐
负载均衡LVS原理及其应用
更多 >
领券
💥开发者 MCP广场重磅上线!
精选全网热门MCP server,让你的AI更好用 🚀
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档