【K8S系列】K8S中Service 无法访问问题的深度分析

在这里插入图片描述

摘要 : 本文是关于 Kubernetes 中 Service 无法访问问题的深度分析,结合根本原因、诊断策略与解决方案的系统性指南:


Kubernetes Service 访问故障全景解析:从底层机制到实战修复

Service 作为 Kubernetes 集群内网络通信的核心抽象,其不可访问问题往往涉及多层级故障。本文将从配置层、网络层、控制平面层三个维度展开深度分析,并提供可落地的排查框架。


一、配置层:Service 与 Pod 的关联失效
1. 标签选择器(Selector)匹配失败
  • 现象:Service 的 Endpoints 列表为空(kubectl get endpoints <svc> 无输出)。
  • 根本原因
    • Pod 的标签(Labels)与 Service 的 selector 不一致;
    • 标签拼写错误或大小写敏感问题(如 app: myapp vs app: MyApp)。
  • 解决方案
    # 检查 Pod 标签  
    kubectl get pods --show-labels | grep <app-name>  
    # 修改 Service 的 selector 或修正 Pod 标签  
    kubectl edit svc <service-name>
    
2. 端口映射错误
  • 现象kubectl describe svc 显示端口配置,但 targetPort 与 Pod 监听端口不匹配。
  • 案例
    • Service 定义 targetPort: 8080,但 Pod 实际监听 80 端口。
  • 修复
    spec:ports:- port: 80        # Service 暴露端口targetPort: 80  # 必须与 Pod 容器端口一致
    
3. Service 类型误用
  • 常见错误
    • 需外部访问的服务误用 ClusterIP(仅限集群内访问);
    • NodePort 端口被节点防火墙阻断。
  • 纠正方案
    spec:type: LoadBalancer  # 外部访问推荐类型# 或 NodePort + 放行防火墙规则
    

二、网络层:流量拦截与路由失效
1. 网络策略(NetworkPolicy)阻断
  • 现象:同一命名空间内可访问 Service,跨命名空间失败。
  • 诊断
    kubectl get networkpolicy -A          # 检查策略是否存在
    kubectl describe networkpolicy <name> # 查看策略规则
    
  • 修复:调整策略允许跨命名空间访问:
    ingress:- from:- namespaceSelector: {}  # 允许所有命名空间
    
2. DNS 解析故障
  • 典型表现
    • 通过 Service IP 可访问,但域名解析失败;
    • nslookup my-svc 返回空或超时。
  • 排查步骤
    1. 检查 CoreDNS 状态:
      kubectl get pods -n kube-system -l k8s-app=kube-dns
      
    2. 在临时 Pod 中测试解析:
      kubectl run dns-test --image=busybox:1.28 -it --rm --restart=Never -- \nslookup my-svc.<namespace>.svc.cluster.local
      
    3. 验证 /etc/resolv.conf 配置:
      nameserver 10.96.0.10     # 必须指向集群 DNS IP
      search <ns>.svc.cluster.local  # 命名空间搜索域
      options ndots:5            # 至少为 5
      
3. kube-proxy 或 CNI 插件异常
  • 关键指标
    • NodePort 在节点本地无法访问(curl localhost:<NodePort> 失败);
    • iptables-save | grep KUBE-SVC 无对应规则。
  • 操作
    # 重启 kube-proxy  
    kubectl delete pod -n kube-system -l k8s-app=kube-proxy  
    # 检查 CNI 插件日志(如 Calico)  
    kubectl logs -n kube-system -l k8s-app=calico-node
    

三、控制平面层:Endpoint 与路由同步失败
1. EndpointSlice 未同步
  • 现象kubectl get endpointslices 显示 Service 无关联 Pod IP。
  • 根因
    • 控制管理器(Controller Manager)故障;
    • 节点失联导致状态未更新。
  • 强制刷新
    kubectl patch endpoints <svc-name> -p '{"subsets":[]}'  # 清空 Endpoints 触发重建
    
2. 节点路由异常(跨节点通信)
  • 诊断命令
    # 在目标节点追踪 Service IP 路径
    mtr -n -T -P <targetPort> <Service IP>
    
  • 常见问题
    • VxLAN 端口(如 8472)被防火墙阻断;
    • 节点间路由表错误。
  • 解决
    iptables -I INPUT -p udp --dport 8472 -j ACCEPT  # 放行 Flannel 流量
    sysctl -w net.ipv4.ip_forward=1                  # 启用 IP 转发
    

四、进阶故障场景与深度修复工具
1. 延迟类问题(访问慢但非完全不可用)
  • 排查工具
    # 测量各阶段耗时(DNS/连接/数据传输)
    curl -o /dev/null -s -w \"DNS: %{time_namelookup}s | Connect: %{time_connect}s | Transfer: %{time_total}s\n" \http://my-svc:80
    
  • 优化方向
    • DNS 解析 >100ms → 检查 CoreDNS 负载;
    • 连接建立 >1s → 排查节点间网络质量。
2. 分布式追踪工具集成
  • 方案:注入 Service Mesh 代理(如 Istio)捕获流量:
    sidecar.istio.io/inject: "true"  # 在 Pod 注解启用
    
  • 价值:可视化跨 Service 的请求链路,定位延迟或丢弃点。

终极排查框架:六步定位法
  1. 查状态kubectl get svc,endpoints,pods -l app=<label> [[1][8]];
  2. 验网络:从临时诊断 Pod 发起 curlnslookup(镜像:nicolaka/netshoot);
  3. 看策略kubectl get networkpolicy -Acalicoctl get networkpolicy
  4. 溯日志:采集 kube-proxy、CoreDNS、CNI 插件日志;
  5. 抓规则:节点执行 iptables-save | grep KUBE-SVC 验证 NAT 规则;
  6. 跨节点mtr 测试节点间路由,确认云厂商安全组放行。

典型故障案例复盘

  • 案例 1:Endpoints 残留旧 IP → kubectl patch endpoints 强制刷新;
  • 案例 2:NodePort 冲突 → ss -tuln | grep <port> 定位占用进程;
  • 案例 3ndots:5 配置缺失 → 修复 Pod 的 /etc/resolv.conf

总结:Service 访问故障防御矩阵

层级关键防御点工具/命令
配置层标签匹配、端口映射kubectl describe svc
网络层网络策略、DNS 解析、CNI 插件nslookup, kubectl debug
控制平面层EndpointSlice 同步、路由表kubectl get endpointslices
节点层防火墙、连接跟踪表(conntrack)iptables-save, conntrack -L

黄金守则:优先通过集群内临时 Pod 测试(排除外部干扰),再逐层向上/向下排查[[1][39]]。 保持对 kube-proxy 模式(iptables/IPVS)的认知,是解锁复杂网络问题的钥匙。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.pswp.cn/bicheng/84426.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Leetcode 3577. Count the Number of Computer Unlocking Permutations

Leetcode 3577. Count the Number of Computer Unlocking Permutations 1. 解题思路2. 代码实现 题目链接&#xff1a;3577. Count the Number of Computer Unlocking Permutations 1. 解题思路 这一题其实就是一个脑筋急转弯&#xff0c;要想要能够将所有的电脑解锁&#x…

进行性核上性麻痹护理指南:全维度守护健康

进行性核上性麻痹是一种罕见的神经系统退行性疾病&#xff0c;会导致患者出现运动障碍、吞咽困难、认知障碍等症状。科学的健康护理对延缓病情发展、提升患者生活质量至关重要。 饮食护理&#xff1a;由于患者常存在吞咽困难&#xff0c;食物应选择糊状、软烂的类型&#xff0c…

【浅析赛题,国赛一等奖水平:思路+模型:】2025 年第八届河北省研究生数学建模竞赛:A 题 基于图论的复杂网络分析与可视化建模

问题一&#xff1a;社交网络拓扑结构分析与影响力评估 基础模型 有向加权图构建&#xff1a;将用户设为节点&#xff0c;互动关系为有向边&#xff0c;以互动频率&#xff08;如一定时间内点赞、评论、转发次数&#xff09;或加权求和&#xff08;赋予不同互动类型不同权重&a…

web3-去中心化金融深度剖析:DEX、AMM及兑换交易传播如何改变世界

web3-去中心化金融深度剖析&#xff1a;DEX、AMM及兑换交易传播如何改变世界 金融问题 1.个人投资&#xff1a;在不同的时间和可能的情况&#xff08;状态&#xff09;下积累财富 2.商业投资&#xff1a;为企业家和企业提供投资生产性活动的资源 目标&#xff1a;跨越时间和…

【笔记】NVIDIA AI Workbench 安装记录

前言 NVIDIA AI Workbench 简介 NVIDIA AI Workbench 是一款由 NVIDIA 推出的集成化开发工具&#xff0c;旨在简化人工智能和机器学习的开发流程。它提供从数据准备到模型训练、优化及部署的全套工具链&#xff0c;支持跨平台协作&#xff0c;适合开发者、数据科学家和企业团队…

积累-Vue.js 开发实用指南:ElementUI 与核心技巧

一、ElementUI 组件高效使用 1. Table 组件展开行优化实现 场景需求&#xff1a;仅在展开行时动态加载数据&#xff0c;避免不必要的接口调用 实现方案&#xff1a; // expand行展开的时候调用expandOpen: async (row, expandedRows) > {// 实时更新展开列const index e…

【BUG】记STM32F030多通道ADC DMA读取乱序问题

STM32F0多通道ADC的校准顺序与DMA乱序问题的本质 声明&#xff1a;本段转载&#xff1a;https://www.cnblogs.com/chihirosan/p/5458673.html 问题描述 通过 uint16_t ConvData[8]保存DMA搬运的ADC转换数值&#xff0c;但是这个数组数值的顺序总是和ADC不是顺序对应的。比如用7…

Java - Mysql数据类型对应

Mysql数据类型java数据类型备注整型INT/INTEGERint / java.lang.Integer–BIGINTlong/java.lang.Long–––浮点型FLOATfloat/java.lang.FloatDOUBLEdouble/java.lang.Double–DECIMAL/NUMERICjava.math.BigDecimal字符串型CHARjava.lang.String固定长度字符串VARCHARjava.lang…

今天刷SQL

多说几句&#xff0c;JAVA真不行了&#xff1f; 刚刚看到那个tiobe最新的指数&#xff0c;JAVA只剩下8.84%&#xff1f;感觉上次看的时候还有百分之十呢。 185-department-top-three-salaries https://leetcode.com/problems/department-top-three-salaries/description/ 公…

【SQL学习笔记1】增删改查+多表连接全解析(内附SQL免费在线练习工具)

可以使用Sqliteviz这个网站免费编写sql语句&#xff0c;它能够让用户直接在浏览器内练习SQL的语法&#xff0c;不需要安装任何软件。 链接如下&#xff1a; sqliteviz 注意&#xff1a; 在转写SQL语法时&#xff0c;关键字之间有一个特定的顺序&#xff0c;这个顺序会影响到…

【计算机网络】SDN

SDN这种新型网络体系结构的核心思想&#xff1a;把网络的控制层面与数据层面分离&#xff0c;而让控制层面利用软件来控制数据层面中的许多设备。 OpenFlow协议可以被看成是SDN体系结构中控制层面与数据层面之间的通信接口。 在SDN中取代传统路由器中转发表的是“流表”&…

量化面试绿皮书:9. 通往Offer的门

文中内容仅限技术学习与代码实践参考&#xff0c;市场存在不确定性&#xff0c;技术分析需谨慎验证&#xff0c;不构成任何投资建议。 9. 通往Offer的门 你面对着两扇门。 一个通往你的工作机会&#xff0c;另一个是退出。 两扇门前都有一名警卫。一个守卫总是说谎&#xff0c…

【杂谈】-递归进化:人工智能的自我改进与监管挑战

递归进化&#xff1a;人工智能的自我改进与监管挑战 文章目录 递归进化&#xff1a;人工智能的自我改进与监管挑战1、自我改进型人工智能的崛起2、人工智能如何挑战人类监管&#xff1f;3、确保人工智能受控的策略4、人类在人工智能发展中的角色5、平衡自主性与控制力6、总结与…

Ascend NPU上适配Step1X-Edit模型

1 概述 1.1 简述 Step1X-Edit&#xff1a;一个在各种真实用户指令下表现出现的统一图像编辑模型。 Step1X-Edit&#xff0c;其性能可与 GPT-4o 和 Gemini2 Flash 等闭源模型相媲美。更具体地说&#xff0c;我们采用了多模态LLM 来处理参考图像和用户的编辑指令。我们提取了潜…

WEB3全栈开发——面试专业技能点P8DevOps / 区块链部署

一、Hardhat / Foundry 进行合约部署 概念介绍 Hardhat 和 Foundry 都是以太坊智能合约开发的工具套件&#xff0c;支持合约的编译、测试和部署。 它们允许开发者在本地或测试网络快速开发智能合约&#xff0c;并部署到链上&#xff08;测试网或主网&#xff09;。 部署过程…

【题解-洛谷】B4292 [蓝桥杯青少年组省赛 2022] 路线

题目&#xff1a;B4292 [蓝桥杯青少年组省赛 2022] 路线 题目描述 有一个旅游景区&#xff0c;景区中有 N N N 个景点&#xff0c;景点以数字 1 1 1 到 N N N 编号&#xff0c;其中编号为 N N N 的景点为游客服务中心所在地。景区中有 M M M 条连接路线&#xff0c;每条…

MySQL体系架构解析(四):MySQL数据存储的揭秘

MySQL中的数据目录 确定MySQL的数据目录 到底MySQL把数据都存到哪个路径下呢&#xff1f;其实数据木对应着一个系统变量datadir&#xff0c;我们在使用客户端与服务器建立连接之后查看这个系统变量的值就可以了。 -- 以下两种方式都可以 show variables like datadir; selec…

Solidity从入门到精通-Remix的基本使用和Solidity的基本数据类型

Solidity从入门到精通-Remix的基本使用和Solidity的基本数据类型 讲了那么多理论&#xff0c;相信大家对区块链/web3也有了一定认知&#xff1b;这时候可能就问有人会问了如何把理论变成实际的代码实现。 这就来了接下来会给大家分享Solidity入门教程 这时候就会有同学问了Sol…

ArcGIS Pro+ArcGIS给你的地图加上北回归线!

今天来看ArcGIS Pro和ArcGIS中如何给制作的中国地图或者其他大范围地图加上北回归线。 我们将在ArcGIS Pro和ArcGIS中一同介绍。 1 ArcGIS Pro中设置北回归线 1、在ArcGIS Pro中初步设置好经纬格网等&#xff0c;设置经线、纬线都以10间隔显示。 2、需要插入背会归线&#xf…

在.NET Core控制器中获取AJAX传递的Body参数

.Net Core是支持前后端不分离式的开发的&#xff0c;如果在原始系统中采用不分离式开发&#xff0c;后面需要在原系统中增加功能&#xff0c;并且新的服务采用其他语言开发&#xff0c;且系统原来功能保持原样&#xff0c;这样前端系统可以单独调用新开发的接口。 但是&#x…