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

本文涉及的产品
云服务器 ECS,每月免费额度200元 3个月
云服务器ECS,u1 2核4GB 1个月
简介: 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关闭后问题恢复

相关实践学习
容器服务Serverless版ACK Serverless 快速入门:在线魔方应用部署和监控
通过本实验,您将了解到容器服务Serverless版ACK Serverless 的基本产品能力,即可以实现快速部署一个在线魔方应用,并借助阿里云容器服务成熟的产品生态,实现在线应用的企业级监控,提升应用稳定性。
云原生实践公开课
课程大纲 开篇:如何学习并实践云原生技术 基础篇: 5 步上手 Kubernetes 进阶篇:生产环境下的 K8s 实践 相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
20天前
|
前端开发 编解码 数据格式
浅谈响应式编程在企业级前端应用 UI 开发中的实践
浅谈响应式编程在企业级前端应用 UI 开发中的实践
20 0
浅谈响应式编程在企业级前端应用 UI 开发中的实践
|
1月前
|
Prometheus Kubernetes 监控
容器服务ACK常见问题之pod设置securityContext调整参数失败如何解决
容器服务ACK(阿里云容器服务 Kubernetes 版)是阿里云提供的一种托管式Kubernetes服务,帮助用户轻松使用Kubernetes进行应用部署、管理和扩展。本汇总收集了容器服务ACK使用中的常见问题及答案,包括集群管理、应用部署、服务访问、网络配置、存储使用、安全保障等方面,旨在帮助用户快速解决使用过程中遇到的难题,提升容器管理和运维效率。
|
1月前
|
Prometheus 监控 Kubernetes
Kubernetes 集群监控与日志管理实践
【2月更文挑战第29天】 在微服务架构日益普及的当下,Kubernetes 已成为容器编排的事实标准。然而,随着集群规模的扩大和业务复杂度的提升,有效的监控和日志管理变得至关重要。本文将探讨构建高效 Kubernetes 集群监控系统的策略,以及实施日志聚合和分析的最佳实践。通过引入如 Prometheus 和 Fluentd 等开源工具,我们旨在为运维专家提供一套完整的解决方案,以保障系统的稳定性和可靠性。
|
20天前
|
数据库 存储 监控
什么是 SAP HANA 内存数据库 的 Delta Storage
什么是 SAP HANA 内存数据库 的 Delta Storage
16 0
什么是 SAP HANA 内存数据库 的 Delta Storage
|
2天前
|
存储 运维 Kubernetes
Kubernetes 集群的持续性能优化实践
【4月更文挑战第22天】在动态且复杂的微服务架构中,确保 Kubernetes 集群的高性能运行是至关重要的。本文将深入探讨针对 Kubernetes 集群性能优化的策略与实践,从节点资源配置、网络优化到应用部署模式等多个维度展开,旨在为运维工程师提供一套系统的性能调优方法论。通过实际案例分析与经验总结,读者可以掌握持续优化 Kubernetes 集群性能的有效手段,以适应不断变化的业务需求和技术挑战。
13 4
|
11天前
|
存储 Kubernetes 调度
Kubernetes Pod生命周期
Kubernetes Pod生命周期
16 0
Kubernetes Pod生命周期
|
11天前
|
存储 Kubernetes 应用服务中间件
Kubernetes Pod
Kubernetes Pod
40 0
Kubernetes Pod
|
9天前
|
Kubernetes 搜索推荐 Docker
使用 kubeadm 部署 Kubernetes 集群(二)k8s环境安装
使用 kubeadm 部署 Kubernetes 集群(二)k8s环境安装
48 17
|
22天前
|
消息中间件 Kubernetes Kafka
Terraform阿里云创建资源1分钟创建集群一键发布应用Terraform 创建 Kubernetes 集群
Terraform阿里云创建资源1分钟创建集群一键发布应用Terraform 创建 Kubernetes 集群
16 0
|
22天前
|
存储 Kubernetes 调度
K8s Pod亲和性、污点、容忍度、生命周期与健康探测详解(下)
本文全面探讨了Kubernetes集群中Pod的四种关键机制——Pod亲和性、污点(Taints)、容忍度(Tolerations)、生命周期以及健康探测,为读者提供了深入理解并有效应用这些特性的指南。