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 里面,否则不会生效。

参考

Web负载均衡学习笔记之K8S内Ngnix微服务服务超时问题的更多相关文章

  1. Web负载均衡学习笔记之实现负载均衡的几种实现方式

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

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

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

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

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

  4. centos之Haproxy 负载均衡学习笔记

    HAProxy的特点是:1.支持两种代理模式:TCP(四层)和HTTP(七层),支持虚拟主机:2.能够补充Nginx的一些缺点比如Session的保持,Cookie的引导等工作3.支持url检测后端的 ...

  5. nginx官方文档 之 http负载均衡 学习笔记

    一.负载均衡 算法 大致可以分两类: (1)不能保证用户的每一次请求都通过负载均衡到达同一服务器. (2)可保证用户的每一次请求都通过负载均衡到达同一服务器. 第二类的应用场景: 1.如果服务器有缓存 ...

  6. 【官方文档】Nginx负载均衡学习笔记(三) TCP和UDP负载平衡官方参考文档

    本章介绍如何使用NGINX Plus和NGINX开放源代理和负载平衡TCP和UDP流量. 目录 介绍 先决条件 配置反向代理 配置TCP或UDP负载平衡被动健康监控 选择负载平衡方法 配置会话持久性 ...

  7. 【精选】Nginx负载均衡学习笔记(一)实现HTTP负载均衡和TCP负载均衡(官方和OpenResty两种负载配置)

    说明:很简单一个在HTTP模块中,而另外一个和HTTP 是并列的Stream模块(Nginx 1.9.0 支持) 一.两个模块的最简单配置如下 1.HTTP负载均衡: http { include m ...

  8. Kafka学习笔记之K8S内filebeat传输到kafka报错带解决方案

    0x00 概述 filebeat非常轻量级,正常情况下占用的资源几乎都能忽略不计,但是部署后发现资源占用很大,所以怀疑是filebeat本身出了问题. 第一时间查看filebeat日志(默认路径/va ...

  9. Dubbo入门到精通学习笔记(十六):Keepalived+Nginx实现高可用Web负载均衡

    文章目录 Keepalived+Nginx实现高可用Web负载均衡 Keepalived+Nginx实现高可用Web负载均衡 高可用架构篇 Keepalived + Nginx 实现高可用 Web 负 ...

随机推荐

  1. k8s集群搭建(一)

    k8s简介 kubernetes,简称K8s,是用8代替8个字符“ubernete”而成的缩写.是一个开源的,用于管理云平台中多个主机上的容器化的应用,Kubernetes的目标是让部署容器化的应用简 ...

  2. eclipse 将原工作空间配置导入新建工作空间

    相信各位小伙伴使用eclipse开发的时候经常会遇到新建工作空间的时候, 但是每次新建工作空间之后都要重新配置空间.安装插件等等 笔者曾经对此问题很是绝望. . . 后发现新建的工作空间可以导入其他工 ...

  3. linux 利器

    ncat nc strace dmesg    很重要,好多错误从程序的角度无法得到答案

  4. 关于METRIC SPACE中的一些概念对比(sequence and net)

    由于LaTeX 和其他的编辑软件都不太好用,所以采用手写笔记的方式. ——一个想学代几的大二小萌新

  5. img border

  6. Margin和padding失效

    太久不写原生果然不行,Margin和padding对div有效,对span失效,原因就不解释了(元素性质,块状之类的)

  7. 【pytorch】持续踩坑 & 错误解决经历

    报错 1.[invalid argument 0: Sizes of tensors must match except in dimension 0.] {出现在 torch.utils.data. ...

  8. django命名url与url反向解析

    1.在urls.py路由中指定别名 2.在views.py视图文件中导入from django.shortcuts import render, redirect, reverse 3.也可从这里导入 ...

  9. 洛谷 P3374 【模板】树状数组 1 题解

    P3374 [模板]树状数组 1 题目描述 如题,已知一个数列,你需要进行下面两种操作: 1.将某一个数加上x 2.求出某区间每一个数的和 输入格式 第一行包含两个整数N.M,分别表示该数列数字的个数 ...

  10. 【字符串】KMP

    Algorithm Task 给定一个文本串 \(S\) 和一个模式串 \(T\),求 \(T\) 在 \(S\) 中出现的所有位置. Limitations 要求时空复杂度均为线性. Solutio ...