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关闭后问题恢复

相关实践学习
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。     相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
10月前
|
Kubernetes 安全 应用服务中间件
IngressNightmare:Ingress Nginx 再曝5个安全漏洞,可接管你的 K8s 集群
是否还记得 2022 年 K8s Ingress Nginx 披露了的 3 个高危安全漏洞(CVE-2021-25745, CVE-2021-25746, CVE-2021-25748),并在那一年宣布停止接收新功能 PR,专注修复并提升稳定性。
|
Java 应用服务中间件 Shell
Nginx+Keepalived+Tomcat 实现Web高可用集群
Nginx+Keepalived+Tomcat 实现Web高可用集群
428 0
|
Kubernetes 应用服务中间件 nginx
k8s学习--YAML资源清单文件托管服务nginx
k8s学习--YAML资源清单文件托管服务nginx
337 2
k8s学习--YAML资源清单文件托管服务nginx
|
Kubernetes 监控 测试技术
k8s学习--基于Ingress-nginx实现灰度发布系统
k8s学习--基于Ingress-nginx实现灰度发布系统
682 2
k8s学习--基于Ingress-nginx实现灰度发布系统
|
Kubernetes 负载均衡 应用服务中间件
k8s学习--ingress详细解释与应用(nginx ingress controller))
k8s学习--ingress详细解释与应用(nginx ingress controller))
2626 0
|
Kubernetes 应用服务中间件 nginx
k8s基础使用--使用k8s部署nginx服务
本文介绍了Kubernetes中核心概念Deployment、Pod与Service的基本原理及应用。Pod作为最小调度单元,用于管理容器及其共享资源;Deployment则负责控制Pod副本数量,确保其符合预期状态;Service通过标签选择器实现Pod服务的负载均衡与暴露。此外,还提供了具体操作步骤,如通过`kubectl`命令创建Deployment和Service,以及如何验证其功能。实验环境包括一台master节点和两台worker节点,均已部署k8s-1.27。
1279 1
|
负载均衡 前端开发 应用服务中间件
FastDFS+Nginx+fastdfs-nginx-module集群搭建
FastDFS+Nginx+fastdfs-nginx-module集群搭建
|
应用服务中间件 Nacos 数据库
Nacos 1.2.1 集群搭建(三) Nginx 配置 集群
Nacos 1.2.1 集群搭建(三) Nginx 配置 集群
198 1
|
5月前
|
编解码 应用服务中间件 Linux
centos配置nginx-rtmp实现ffmpeg转码rtsp为rtmp视频流
centos配置nginx-rtmp实现ffmpeg转码rtsp为rtmp视频流
520 1
|
9月前
|
应用服务中间件 Linux 网络安全
Centos 8.0中Nginx配置文件和https正书添加配置
这是一份Nginx配置文件,包含HTTP与HTTPS服务设置。主要功能如下:1) 将HTTP(80端口)请求重定向至HTTPS(443端口),增强安全性;2) 配置SSL证书,支持TLSv1.1至TLSv1.3协议;3) 使用uWSGI与后端应用通信(如Django);4) 静态文件托管路径设为`/root/code/static/`;5) 定制错误页面(404、50x)。适用于Web应用部署场景。
883 87