0x00 概述

本文是从K8S内微服务的角度讨论Nginx超时的问题

0x01 问题

在K8S内部署微服务后,发现部分微服务链接超时,Connection Time Out。

最近碰到了一个 Nginx 做为反向代理设置上的坑。起因是将 Nginx 做为反向代理服务器,来统一处理内网服务的转发。使用了类似如下的配置:

server {listen 80;server_name xxx.xxx.net;location / {proxy_pass http://xxxxx;}
}

刚开始的时候, proxy_pass 里使用的 ip 地址,Nginx 工作正常。近期由于内网服务升级,每个内网服务前面,都新增了一个 AWS internal load balancer,用来作为负载。而 AWS 的 lb 提供的访问方式,是一个内网 DNS 地址,而不直接提供 ip 地址。于是最初我便把 nginx 的 proxy_pass 里的 ip 地址改为了 AWS 提供的负载均衡的内网域名,测试后没有问题。但是在第二天一早到公司后,发现昨天配置的内网服务无法连通了。尝试执行命令 nginx -s reload 后,服务又恢复正常后,便没有过多追究,去忙别的事情了。但是一直感觉到这里的问题应该不简单,在详细查看 log 与文档后,发现了 Nginx 一个设置上的细节。

0x02 解决

在这个文档 Nginx 文档 Using DNS for Service Discovery with NGINX and NGINX Plus 中,解释了发生这个问题的原因。如果在 Nginx 的设置 proxy_pass 里使用域名而不是 IP 地址,Nginx 只会在每次启动和重载设置时,使用 DNS 将域名解析为 IP 地址缓存下来,并在之后一直使用这个 IP,并不会按照 DNS 的 TTL 刷新 IP 地址。如果在这个解析过程中发生错误,则会导致 Nginx 启动失败。由于在 AWS 中负载均衡的内网域名对应的 IP 并不是一直不变的,这才导致了上面的问题。文档中同样指出,使用 Nginx 的 upstream 配置也会有这个问题。

既然知道了问题的原因所在,那么针对这个问题,根据上面文档中给出了一个解决方法,将配置文件修改为如下的形式:

server {listen 80;server_name xxx.xxx.net;resolver 172.31.0.2 valid=30s;set $service_lb xxxxxx;location / {proxy_pass http://$service_lb;}
}

在这个配置中,resolver 是 DNS 服务器地址, valid 设定 DNS 刷新频率。需要特别注意的一点是 set 语句不能写到 location 里面,否则不会生效。

参考

转载于:https://www.cnblogs.com/JetpropelledSnake/p/11104035.html

Web负载均衡学习笔记之K8S内Ngnix微服务服务超时问题相关推荐

  1. Web负载均衡学习笔记之四层和七层负载均衡的区别

    0x00 简介 简单理解四层和七层负载均衡: ① 所谓四层就是基于IP+端口的负载均衡:七层就是基于URL等应用层信息的负载均衡:同理,还有基于MAC地址的二层负载均衡和基于IP地址的三层负载均衡. ...

  2. web服务器和应用服务器的区别以及负载均衡---学习笔记

    一.区别: web服务器可以解析(handles)http协议.当web服务器接收到一个http请求(request),会返回一个http响应 (response),例如送回一个html页面.为了处理 ...

  3. 【官方文档】Nginx负载均衡学习笔记(二)负载均衡基本概念介绍

    简介 负载均衡(Server Load Balancer)是将访问流量根据转发策略分发到后端多台 ECS 的流量分发控制服务.负载均衡可以通过流量分发扩展应用系统对外的服务能力,通过消除单点故障提升应 ...

  4. 在Linux下用LVS和Ipvsadm做Web负载均衡

    在Linux下用LVS和Ipvsadm做Web负载均衡,如果想对负载均衡有一个全面.宏观上的理解,可以看:服务器负载均衡技术的原理及应用. 一.简介及环境配置 在Linux下用 LVS和Ipvsadm ...

  5. Python学习笔记:常用内建模块6 (urllib)

    前言 最近在学习深度学习,已经跑出了几个模型,但Pyhton的基础不够扎实,因此,开始补习Python了,大家都推荐廖雪峰的课程,因此,开始了学习,但光学有没有用,还要和大家讨论一下,因此,写下这些帖 ...

  6. IIS Web负载均衡的几种方式

    Web负载均衡的几种实现方式 摘要: 负载均衡(Load Balance)是集群技术(Cluster)的一种应用.负载均衡可以将工作任务分摊到多个处理单元,从而提高并发处理能力.目前最常见的负载均衡应 ...

  7. Web负载均衡的几种实现方式

    摘要: 负载均衡(Load Balance)是集群技术(Cluster)的一种应用.负载均衡可以将工作任务分摊到多个处理单元,从而提高并发处理能力.目前最常见的负载均衡应用是Web负载均衡.根据实现的 ...

  8. 高并发系统搭建:web负载均衡

    高并发系统搭建:web负载均衡 所谓的负载均衡就是让多个请求尽量均衡的分配到不同的机器上面去 1. HTTP负载均衡 当用户的请求发来之后,web服务器通过修改HTTP响应报头中的Location标记 ...

  9. 基于redhat linux虚拟服务器的web负载均衡集群(piranha+LVS)

    基于redhat linux虚拟服务器的web负载均衡集群 硬件环境 分发机 LB1:192.168.0.129 LB2:192.168.0.130 真实节点主机 NODE1:192.168.0.13 ...

最新文章

  1. java1.8新增超实用Map方法——Map.getOrDefault()和Map.value()方法详解
  2. CI框架验证码CAPTCHA 辅助函数的使用
  3. 电商直播平台如何借助容器与中间件实现研发效率提升100%?
  4. Laravel 5.2--如何让表单提交错误,不清空?
  5. Windows 脚本系列之四—映射网络盘脚本
  6. css实现快速抖动效果_web前端入门到实战:CSS实现照片堆叠效果
  7. 额外篇| Python制作词云
  8. Docker 方式安装部署 rocketMQ 、部署 图形化界面控制台、rocketMQ 控制台
  9. efi引导文件_你们心心念念的oc通用EFI来了!
  10. 如何在Javascript中创建范围
  11. 飞凌课堂丨揭开影响RS485通讯因素的面纱
  12. 首都师范 博弈论 3 4 2反复剔除严格劣策略
  13. Oracle项目管理系统之合同控制概述
  14. 火狐浏览器怎么样 火狐浏览器都有哪些优缺点
  15. Gitee创建仓库拉人
  16. ubuntu安装synopsys dc报错
  17. [GAMES101]现代计算机图形学课程总结3:Shading
  18. 一个线上运营着3000+人的游戏,因为我不小心一个DROP DATABASE,全没了。 怎么办??跟我HOLD住!!!...
  19. 纳米材料与技术类毕业论文文献有哪些?
  20. c++ sleep函数 linux,sleep()函数 | C/C++程序员之家

热门文章

  1. MySQL中INSERT IGNORE INTO和REPLACE INTO的使用
  2. ASP.NET MVC 3 RTM
  3. Python 每次处理一个字符
  4. 教你打造 Android 中的 IOC 框架
  5. gin将请求体绑定到不同的结构体中
  6. FD_WRITE触发条件
  7. Linux各版本完整发展图
  8. mybaits十:关联查询
  9. 使用LINQ解除SQL注入安全问题
  10. 对操作系统的五点感受--接口/进程/内存/磁盘管理/系统架构