登录
/
注册
首页
论坛
其它
首页
科技
业界
安全
程序
广播
Follow
关于
签到
每天签到奖励2-10圆
导读
排行榜
TG频道
发帖说明
登录
/
注册
账号
自动登录
找回密码
密码
登录
立即注册
搜索
搜索
关闭
CSDN热搜
程序园
精品问答
技术交流
资源下载
本版
帖子
用户
软件
问答
教程
代码
写记录
VIP申请
VIP网盘
网盘
联系我们
发帖说明
每日签到
道具
勋章
任务
淘帖
动态
分享
留言板
导读
设置
我的收藏
退出
腾讯QQ
微信登录
返回列表
首页
›
业界区
›
业界
›
k8s中nginx和headless服务搭配使用引发的小问题 ...
k8s中nginx和headless服务搭配使用引发的小问题
[ 复制链接 ]
俏挺喳
昨天 11:35
某天收到一个奇怪的问题,这个故障感觉还挺好玩,所以分享出来。
背景
某个生产业务部署在k8s中,业务的nginx和服务a(2个副本 下面称为pod-a-1,pod-a-2 ),全部运行在同一个ns下面,同时为pod-a创建一个headless服务,以下称为svc-headless-a。
nginx关键配置如下:
原始配置
upstream testapp {
server svc-headless-a:8080;
ip_hash;
}
server {
listen 30001;
location / {
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://testapp;
}
}
复制代码
故障现象
业务突然反馈,服务时通时不通。经过几天后,两个服务都不通了。因为没有排查到具体问题,所以业务侧只能临时将upstream 直接指向后端pod-a-1和pod-a-2的ip,业务恢复。
排查过程
进入nginx pod内,
(1)使用curl 命令,访问pod-a-1和pod-a-2确认2副本,可以正常访问,服务正常
(2)使用curl 命令,svc-headless-a服务,域名解析正常,可以正常访问,服务正常
(3)nginx报错后端server不存在(排查时没有日志,根据业务侧反馈是有类似的报错日志)
那么到这一步就可以确认 service到pod这一个链路是没有问题的,问题就出在nginx上面。
(4)当我看到svc-headless-a时,发现这是一个无头服务。这时候我就有点疑问了,会不会和无头服务有关?但是经过第3步的验证,确认无头服务没有问题,那么问题可能就出现在nginx和healess服务之间。
所以经过各种查找,最后确认问题的原因:
原因分析
基础知识
(1)Nginx 在启动时或重载配置(reload)时,会对 proxy_pass 或 upstream 块中定义的域名进行一次 DNS 解析,并将解析到的 IP 地址缓存下来。之后的所有请求,Nginx 都会直接使用这个缓存的 IP 地址。
(2) k8s headless服务,因为它是无头服务,所有没有clusterip,无头服务的域名解析为后端podip
(3) k8s pod重启后podip会变化
(4) ip_hash 根据源地址将请求路由到同一个后端,即一个用户请求由同一个pod处理
分析
(1)当后端pod由于某种原因重启后,podip会变化,例如,svc-headless-a域名解析ip为A和B,pod重启后,svc-headless-a域名解析为B和C,而nginx缓存的地址池仍为A和B,导致了业务同事反馈的时通时不通的现象。
(2)如果后端pod都重启过,svc-headless-a域名解析为C和D,而nginx缓存的地址池仍为A和B,这样会导致svc-headless-a域名解析后的ip和nginx缓存的地址池完全不一致,nginx内部会出现连通性报错。
(3)而我们进入到nginx pod内部测试域名解析没有问题,是因为每次测试时,都会由k8s的dns进行解析,所以连通性测试没有问题。
排查结果
因此定位问题的根因和nginx缓存机制与headless服务特性导致。
解决方案
(1)使用headless服务,ng增加动态解析配置,周期性刷新缓存池
(2)将服务类型改为clusterip,建议这种方式
最后的最后,有描述不对的地方还请大家指正,但是我不改!!!
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
k8s
nginx
headless
服务
搭配
相关帖子
编译安装nginx
多智能体微服务实战(1/4):康威定律在 AI 时代的应用
Sql Server安装报错“服务没有及时响应启动或控制请求”
Nginx的ngx_thread_pool模块解析:提升性能与可伸缩性
nginx证书缓存功能
Nginx 缓存的工作原理
数字商品服务助力开发者降本增效,加速数字商品商业变现
Failed to start nginx.service: Unit nginx.service not found.
.NET微服务之环境准备
k8s集群部署(1)(centos7)
vip免费申请,1年只需15美金$
回复
使用道具
举报
提升卡
置顶卡
沉默卡
喧嚣卡
变色卡
千斤顶
照妖镜
相关推荐
安全
编译安装nginx
0
415
坠矜
2025-10-13
业界
多智能体微服务实战(1/4):康威定律在 AI 时代的应用
0
17
数察啜
2025-10-14
业界
Sql Server安装报错“服务没有及时响应启动或控制请求”
0
850
赙浦
2025-10-14
安全
Nginx的ngx_thread_pool模块解析:提升性能与可伸缩性
2
280
云卦逾
2025-10-16
业界
nginx证书缓存功能
0
401
梁丘艷蕙
2025-10-17
安全
Nginx 缓存的工作原理
0
721
雨角
2025-10-17
业界
数字商品服务助力开发者降本增效,加速数字商品商业变现
0
621
方方仪
2025-10-22
业界
Failed to start nginx.service: Unit nginx.service not found.
0
145
崔和美
2025-10-23
安全
.NET微服务之环境准备
0
158
翱龟墓
2025-10-23
业界
k8s集群部署(1)(centos7)
0
371
骆贵
2025-10-25
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
|
立即注册
回复
本版积分规则
回帖并转播
回帖后跳转到最后一页
浏览过的版块
安全
签约作者
程序园优秀签约作者
发帖
俏挺喳
昨天 11:35
关注
0
粉丝关注
24
主题发布
板块介绍填写区域,请于后台编辑
财富榜{圆}
anyue1937
9994893
dage888
999994
3934307807
992122
4
刎唇
9993
5
富账慕
9968
6
邹语彤
9973
7
丧血槌
9977
8
二艰糖
9988
9
匝抽
9986
10
孙淼淼
9977
查看更多