ACK集群pod请求同vpc下自建nginx偶发不通

简介: ACK集群pod请求同vpc下自建nginx偶发不通

背景

用户是ACK+flannel的网络插件,里面有套业务的逻辑回去请求同vpc下ECS自建的nginx应用,发现目前会有大概率请求失败的情况出现

问题排查

1 处理这类问题首先我们要知道整套业务链路的网络走向,会经过哪些网口以及规则等,由于用户是pod主动访问集群外部的资源,那么简单来看整个网络链路就是:pod(客户端)---->node(pod所在的节点)---->自建nginx(目标ecs)



2 整个链路捋清楚以后就开始复现排查了,首先拿到用户集群的kubeconfig以后,进入用户指定的业务pod里面模拟测试了下,结果如图所示,果然会请求失败。


3 模拟到现象后,我们就开始做进一步分析,把pod所在节点的ECS授权以及对端ECS登录信息拿到,因为pod请求外部资源,到cb0网卡以后,会根据规则+路由通过节点的eth0 IP和对端ECS通信,所以这里我们需要拿到节点登录信息抓包看下流量是否出去了,通过抓包分析看,流量已经到节点并且送出去了,是对端ECS收到报文后没响应



4 从抓包看到现象后,其实问题范围就大概定位了,出现在目标ECS上,目标ECS不响应syn报文,一般不响应syn报文就几种情况

(1)服务器里面有安全软件,然后安全机制丢弃了这些报文(但是通过排查里面并未发现安全软件,基本可以排除)

(2)系统防火墙做了拦截,但是通过ps以及systemctl 看iptables 以及firewalld服务并未开启

(3)内核参数设置不当引发问题,我们执行netstat -s 命令查看到passive connections rejected because of time stamp统计数值非常大,并且接近于SYNs to LISTEN sockets dropped的数量,而且一直在增加


5 通过上面的抓包分析后,问题大致定位了, 我们怀疑和时间戳参数相关,因为当SYN报文的TimeStamp值小于前面成功响应的SYN报文的TimeStamp值,系统默认就会不响应该SYN请求,进一步查看用户参数配置,发现开启了tcp_tw_recycle,当tcp_tw_recycle/tcp_timestamps都开启的条件下,同一源ip主机的socket connect请求中的timestamp必须是递增的,如果不递增就会导致被丢弃,这里在nat环境下就会有不递增的坑,因为用户pod主动访问集群外部资源,网络确确实实会通过ipvs+iptables nat一次,所以符合问题现象

解决方案

服务器端不要将tcp_tw_recycle字段和tcp_timestamps字段同时设为1 ,在自建nginx的ECS侧把tcp_tw_recycle关闭后问题恢复

相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
4月前
|
负载均衡 算法 应用服务中间件
Nginx入门 -- 理解 Nginx 的请求处理流程
Nginx入门 -- 理解 Nginx 的请求处理流程
355 1
|
4月前
|
JSON 网络协议 应用服务中间件
Nginx入门 -- 理解Nginx基础概念:请求处理(Request)
Nginx入门 -- 理解Nginx基础概念:请求处理(Request)
89 0
|
6月前
|
负载均衡 安全 网络虚拟化
CCE集群VPC网络模式下几种访问场景
【8月更文挑战第13天】在CCE(Cloud Container Engine)集群的VPC网络模式下,支持多样化的访问场景:容器应用可直接利用VPC访问外部资源;通过ELB负载均衡或VPN/专线配置,实现外部网络对容器应用的安全访问;容器间通过内部IP或服务发现机制相互通信;跨VPC访问则可通过VPC对等连接或云连接服务实现。这些方案确保了应用内外部通信的安全与高效。
228 3
|
6月前
|
NoSQL Java 应用服务中间件
使用Redis和Nginx分别实现限制接口请求频率
这篇文章介绍了如何使用Redis和Nginx分别实现限制接口请求频率的方法,包括具体的命令使用、代码实现和配置步骤。
107 0
|
7月前
|
应用服务中间件 nginx
如何通过Nginx配置将请求转发到conf.d目录下的各个配置文件
如何通过Nginx配置将请求转发到conf.d目录下的各个配置文件
756 2
|
8月前
|
负载均衡 应用服务中间件 nginx
经验大分享:nginx实现请求转发
经验大分享:nginx实现请求转发
404 1
|
8月前
|
应用服务中间件 nginx Windows
nginx实现网站url带参跳转 POST请求GET请求跳转
nginx实现网站url带参跳转 POST请求GET请求跳转
373 1
|
7月前
|
Kubernetes Java 应用服务中间件
Kubernetes 上搭建一个 Nginx 的 Pod,并确保传入的 API 请求被均匀地分发到两个 Java 业务 Pod 上
Kubernetes 上搭建一个 Nginx 的 Pod,并确保传入的 API 请求被均匀地分发到两个 Java 业务 Pod 上
122 0
|
9月前
|
弹性计算 应用服务中间件 文件存储
容器服务ACK+容器网络文件系统CNFS快速搭建NGINX网站
本文介绍如何在半小时内,通过阿里云容器ACK服务和CNFS容器网络文件系统服务搭建一个简单的弹性、高可用NGINX网站。在完成本文的所有操作后,您将获得一个单网页的网站,用户的请求将会被打散到多个容器节点上,并且根据业务负载自动扩缩容,即使某个容器节点宕机也不会影响用户访问。另外您还可以将本地编辑的网页快速更新到网站上。
249 0
容器服务ACK+容器网络文件系统CNFS快速搭建NGINX网站
|
1月前
|
缓存 容灾 网络协议
ACK One多集群网关:实现高效容灾方案
ACK One多集群网关可以帮助您快速构建同城跨AZ多活容灾系统、混合云同城跨AZ多活容灾系统,以及异地容灾系统。

热门文章

最新文章