【K8S系列】Kubernetes 中 Service 更改未生效的故障排查与解决方案【已解决】

在这里插入图片描述

在 Kubernetes 中,Service 是实现 Pod 之间通信的核心组件。当您对 Service
进行更改(如修改端口或选择器)时,有时可能会发现这些更改未能生效,导致服务无法正常工作。本文将详细描述这一问题,并提供故障排查步骤、常见原因及解决方案。

一、 问题描述

在 Kubernetes 集群中,Service 用于将流量路由到特定的 Pod。当您修改 Service 的配置(如端口或选择器)时,可能会遇到以下问题:

  • Service 仍然路由到旧的 Pod。
  • 新配置的端口无法访问。
  • 其他服务无法发现目标 Pod。

这些问题可能导致服务不可用,从而影响用户体验和业务正常运行。

二、故障排查步骤

步骤 1: 检查 Service 状态

  • 命令:

    kubectl get service <service-name> -o yaml
    
  • 示例输出:

    apiVersion: v1
    kind: Service
    metadata:name: my-servicenamespace: default
    spec:selector:app: my-appports:- port: 80targetPort: 8080type: ClusterIP
    
  • 结果分析:

    • 确认 selector 字段中的 app: my-app 是否与目标 Pod 的标签匹配。如果不匹配,Service 无法发现相应的 Pod。
    • 检查 ports 字段,确保 porttargetPort 配置正确。

步骤 2: 核对 Pod 标签

  • 命令:

    kubectl get pods --show-labels
    
  • 示例输出:

    NAME           READY   STATUS    RESTARTS   AGE   LABELS
    my-app-1      1/1     Running   0          5m    app=my-app
    my-app-2      1/1     Running   0          5m    app=my-app
    my-app-3      1/1     Running   0          5m    app=old-app
    
  • 结果分析:

    • 检查 Pod 列表中是否有与 Service 选择器匹配的 Pod。在此示例中,my-app-1my-app-2 将收到流量,而 my-app-3 因标签不匹配(app=old-app)而无法被 Service 发现。
    • 如果标签不匹配,需要更新 Pod 的标签或 Service 的选择器。

步骤 3: 检查 DNS 状态

  • 命令:

    kubectl get pods -n kube-system
    
  • 示例输出:

    NAME                                   READY   STATUS    RESTARTS   AGE
    coredns-66bff44f8b-4ptk8               1/1     Running   0          10m
    coredns-66bff44f8b-8h5xg               1/1     Running   0          10m
    kube-proxy-abc123                     1/1     Running   0          10m
    
  • 结果分析:

    • 确保 DNS Pod(如 coredns)正在运行且状态为 Running。如果 DNS Pod 不正常,Pod 将无法解析 Service 名称,导致服务发现失败。
    • 如果 DNS 组件未正常运行,检查其日志以获取更多信息。

步骤 4: 查看 Pod 日志

  • 命令:

    kubectl logs <pod-name>
    
  • 示例输出:

    2023-11-06 12:00:00.123 INFO  [main] com.example.App - Application started on port 8080
    
  • 结果分析:

    • 检查 Pod 日志是否有错误信息。如果 Pod 正常启动,您将看到应用程序日志。
    • 如果 Pod 启动失败,日志中通常会提供错误信息,帮助识别问题。

步骤 5: 验证 NetworkPolicy

  • 命令:

    kubectl get networkpolicy
    
  • 示例输出:

    NAME               PODS       SELECTOR         POLICY TYPE
    allow-my-app      my-app     app=my-app      Ingress
    deny-all          all        app=old-app     Ingress
    
  • 结果分析:

    • 检查是否有 NetworkPolicy 限制了 Pod 之间的流量。在此示例中,allow-my-app NetworkPolicy 允许 my-app 的 Pod 接收流量,而 deny-all 则拒绝 old-app 的流量。
    • 如果 NetworkPolicy 限制了流量,需要修改策略以允许相关流量。

步骤 6: 确认 Service 的访问方式

  • 命令:

    kubectl describe service <service-name>
    
  • 示例输出:

    Name:              my-service
    Namespace:         default
    Labels:            <none>
    Annotations:       <none>
    Selector:          app=my-app
    Type:              ClusterIP
    IP:                10.96.0.1
    Port:              <unset>  80/TCP
    TargetPort:        8080/TCP
    Endpoints:         10.244.1.2:8080,10.244.1.3:8080
    Session Affinity:  None
    Events:            <none>
    
  • 结果分析:

    • 确认 Service 类型(如 ClusterIP)是否适合访问需求。确保 Endpoints 列中列出的 IP 地址是期望中的 Pod。
    • 如果 Endpoints 列为空或不包含预期的 Pod IP,表明 Service 无法正确发现目标 Pod,需要检查选择器和标签。

三、常见原因及解决方案

原因 1: 选择器不匹配

解决方案:

  • 确保 Service 的选择器与 Pod 的标签相匹配。可以通过以下命令更新选择器:

    kubectl patch service <service-name> -p '{"spec":{"selector":{"app":"new-label"}}}'
    

结果分析:

  • 更新成功后,Service 将能够路由流量到正确的 Pod,恢复正常连接和服务可用性。

原因 2: DNS 缓存问题

解决方案:

  • 等待 DNS 刷新,或在 Pod 中手动清除 DNS 缓存。确保 Pod 正在使用最新的服务名。

结果分析:

  • 一旦 DNS 更新,Pod 将能够获取到最新的 Service 配置信息,确保能够正确连接到目标 Service。

原因 3: 更新未应用

解决方案:

  • 确保在更改 Service 后使用 kubectl apply 命令应用更改,例如:

    kubectl apply -f <service-definition>.yaml
    

结果分析:

  • 确保更改成功应用后,Service 将能够反映新的配置,避免因未应用更改而导致的服务不可用问题。

原因 4: Pod 的 readiness probe 配置不当

解决方案:

  • 配置正确的 readiness probe,以确保 Pod 准备好接受流量。
readinessProbe:httpGet:path: /healthport: 8080initialDelaySeconds: 5periodSeconds: 10

结果分析:

  • 通过正确配置 readiness probe,Kubernetes 将只向已准备就绪的 Pod 路由流量,从而提高服务的可用性。

原因 5: NetworkPolicy 限制

解决方案:

  • 审查和更新 NetworkPolicy,确保允许相应流量。

结果分析:

  • 通过审查和调整 NetworkPolicy,可以确保新流量能够顺利到达目标 Pod,保证服务的稳定性和可用性。

原因 6: Kubernetes 版本问题

解决方案:

  • 检查 Kubernetes 版本,确保使用的版本没有已知的 bug。

结果分析:

  • 确保使用无 bug 的版本,有助于避免因版本问题导致的 Service 更改未生效的情况,提升集群的稳定性。

四、总结

在 Kubernetes 中,Service 的更改未能生效可能由多种原因造成,包括选择器不匹配、DNS 缓存问题、更新未应用、Pod 的 readiness probe 配置不当、NetworkPolicy 限制以及 Kubernetes 版本问题。通过系统的故障排查步骤,可以快速定位问题并采取相应的解决方案,从而确保服务的正常运行和高效的服务发现机制。通过实践和不断优化,团队能够在 Kubernetes 环境中实现更好的微服务架构和服务治理。

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

【C++】AVL树

&#x1f525;个人主页&#x1f525;&#xff1a;孤寂大仙V &#x1f308;收录专栏&#x1f308;&#xff1a;C从小白到高手 &#x1f339;往期回顾&#x1f339;&#xff1a;【C】STL----map和set &#x1f516; 流水不争&#xff0c;争的是滔滔不息 AVL树通过维护树的平衡来确…

用Puppeteer点击与数据爬取:实现动态网页交互

用Puppeteer与代理IP抓取51job招聘信息&#xff1a;动态网页交互与数据分析 引言 在数据采集领域&#xff0c;传统的静态网页爬虫方式难以应对动态加载的网页内容。动态网页通常依赖JavaScript加载数据&#xff0c;用户需要与页面交互才能触发内容显示。因此&#xff0c;我们…

砥砺十年风雨路,向新而行创新程丨怿星科技十周年庆典回顾

10月24日&#xff0c;是一年中的第256天&#xff0c;也是程序员节&#xff0c;同时也是怿星的生日。2014年到2024年&#xff0c;年华似水匆匆一瞥&#xff0c;多少岁月轻描淡写&#xff0c;怿星人欢聚一堂&#xff0c;共同为怿星科技的十周年庆生&#xff01; 01.回忆往昔&…

【vue-pdf】简单封装pdf预览组件

【vue-pdf】简单封装pdf预览组件 在Vue中使用vue-pdf来展示PDF文件&#xff0c;首先需要安装vue-pdf&#xff1a; npm i vue-pdf或者 yarn add vue-pdf然后在Vue组件中引入并使用vue-pdf&#xff1a; /** * 描述: pdf预览组件 * 作者: xingyue * 创建时间: 2024-11-05 14:27…

HTML 标签属性——id、class、style 等全局属性详解

文章目录 1. id属性2. class属性3. style属性4. title属性5. lang属性6. dir属性7. accesskey属性8. tabindex属性小结HTML全局属性是一组可以应用于几乎所有HTML元素的特殊属性。这些属性提供了额外的功能和信息,使得网页开发者能够更好地控制元素的行为、样式和可访问性。 …

Dubbo详解及其应用

Dubbo Dubbo是一个阿里巴巴开源的高性能Java RPC框架&#xff0c;专为解决大规模微服务架构中的服务治理、服务发现、负载均衡和远程通信等问题而设计。它允许服务提供者将业务功能封装成服务&#xff0c;而服务消费者则可以像调用本地方法一样调用这些远程服务&#xff0c;从而…

python爬取旅游攻略(1)

参考网址&#xff1a; https://blog.csdn.net/m0_61981943/article/details/131262987 导入相关库&#xff0c;用get请求方式请求网页方式&#xff1a; import requests import parsel import csv import time import random url fhttps://travel.qunar.com/travelbook/list.…

推荐一款便捷的图像处理工具:Photo Collage Maker

Photo Collage Maker是一款便捷的图像处理工具&#xff0c;能够对图像进行拼接和剪辑&#xff0c;帮助用户轻松实现各类图像效果的添加。该软件支持图片框的添加以及图片分享功能&#xff0c;适合用于制作照片拼贴、个性化相册、美丽的剪贴簿等创意项目。 软件特点 简单易用 …

yolo v5 开源项目

项目地址&#xff1a;https://gitcode.net/EricLee/yolo_v5

《化纤与纺织技术》是什么级别的期刊?是正规期刊吗?能评职称吗?

问题解答 问&#xff1a;《化纤与纺织技术》是不是核心期刊&#xff1f; 答&#xff1a;不是&#xff0c;是知网收录的第一批认定学术期刊。 问&#xff1a;《化纤与纺织技术》级别&#xff1f; 答&#xff1a;省级。主管单位&#xff1a;广东粤能&#xff08;集团&#xf…

Python 爬取大量数据如何并发抓取与性能优化

Python 并发抓取与性能优化 在进行网络爬虫开发时&#xff0c;爬取大量数据可能非常耗时。尤其是在处理许多网页或 API 请求时&#xff0c;逐个请求速度会非常慢。为了解决这个问题&#xff0c;我们可以通过并发抓取提高爬取效率。同时&#xff0c;通过性能优化来进一步减少耗…

Centos开机自启动脚本示例

本文建议创建一个sh文件管理自启动的各项内容&#xff0c;再将sh文件设置开机启动 在/root/autoshell下创建一个autostart.sh&#xff0c;内容如下 #!/bin/bash # description:开机自启脚本# 启动mongodb sh /root/software/mongodb-linux-x86_64-rhel70-4.0.6/bin/mongod --c…

猫头虎分享: AI设计利器 Recraft详解与基础使用教程

&#x1f981;猫头虎分享&#xff1a;AI设计利器 Recraft——全面解析与教程 大家好&#xff0c;我是猫头虎&#xff01;今天为大家带来一款非常炙手可热的 AI 设计工具 —— Recraft 的深度介绍与详细教程。这款工具自推出以来&#xff0c;就迅速获得了全球设计师的青睐。那么…

Spring AI : 让ChatGPT成为你构建应用的核心亮点

本文是一篇介绍spring ai的文章&#xff0c;主要介绍了生成文本内容&#xff0c;以及读取图片中内容两个能力。 之所以介绍这两个能力&#xff0c;是因为 大模型目前最适合做的事情有两个&#xff1a; 1&#xff09; 非结构化数据的结构化&#xff08;图片转文字&#xff0c;…

Qt(openCV的应用)

1. OpenCV简介 OpenCV&#xff08;Open Source Computer Vision Library&#xff09;是一个开源的计算机视觉库&#xff0c;它提供了丰富的图像处理和计算机视觉功能。该库由英特尔公司发起&#xff0c;并在 BSD 许可证下发布&#xff0c;因此它是免费的&#xff0c;且开放源代…

Excel快速转换文档word工具

【注意事项&#xff1a;】 1、目前支持Win10/11 x64操作系统&#xff0c;已亲测可正常运行。 2、工具解压后在 \excel_docx\excel\目录中提供了转换前的标准模板“testcase.xlsx”&#xff0c;测试童鞋在使用Zentao、JIRA等测试工具导出excel&#xff08;.xlsx后缀&#xff0…

uniapp 集成 uview

注意&#xff1a;HBuildX新建项目时必须选择vue2版本&#xff0c;vue3会不支持uview 下载安装方式&#xff1a; uview安装网站&#xff1a;uView2.0重磅发布&#xff0c;利剑出鞘&#xff0c;一统江湖 - DCloud 插件市场 配置&#xff1a; 1.安装sass插件 // 安装sass npm i …

想要搭建陪玩系统小程序,这几点不容忽视,陪玩系统源码框架

随着互联网经济的持续稳定发展&#xff0c;游戏市场的“封印”逐渐被打开&#xff0c;搭建陪玩平台成为一个新的热点。提起陪玩系统相信大家也不陌生&#xff0c;漫漫单排路如果有一个大神能带自己躺赢那是再好不过了&#xff0c;于是陪玩系统运营而生。想要搭建陪玩平台&#…

【论文笔记】Dense Connector for MLLMs

&#x1f34e;个人主页&#xff1a;小嗷犬的个人主页 &#x1f34a;个人网站&#xff1a;小嗷犬的技术小站 &#x1f96d;个人信条&#xff1a;为天地立心&#xff0c;为生民立命&#xff0c;为往圣继绝学&#xff0c;为万世开太平。 基本信息 标题: Dense Connector for MLLM…

[论文阅读]A Survey of Embodied Learning for Object-Centric Robotic Manipulation

Abstract --以对象为中心的机器人操纵的Embodied learning是体现人工智能中一个快速发展且具有挑战性的领域。它对于推进下一代智能机器人至关重要&#xff0c;最近引起了人们的极大兴趣。与数据驱动的机器学习方法不同&#xff0c;具身学习侧重于通过与环境的物理交互和感知反…