当前位置: 首页 > news >正文

记一次k8s服务部署之后,访问返回503

前言

最近有个同事在开发联调环境部署一个python服务,python服务通过uvicorn构建web服务,通过k8s部署,部署完成之后通过ingress访问报错,报错信息如下

<html>
<head><title>503 Service Temporarily Unavailable</title></head>
<body>
<center><h1>503 Service Temporarily Unavailable</h1></center>
<hr><center>nginx</center>
</body>
</html>

检查下ingress配置

      - path: /PythonAssistServicepathType: Prefixbackend:service:name: python-assist-creation-serviceport:number: 80- path: /TestServicepathType: Prefixbackend:service:name: test-serviceport:number: 80

同样的配置TestService访问是正常的,但是访问PythonAssistService确报错,但是针对此问题,有一下排查思路

确认pod是否启动成功

先通过kubectl get pods命令查看pod的运行状态

[devinteg@node1-198 /]$ kubectl get pods python-assist-creation-service-65c77c966b-pfhq8 
NAME                                                   READY   STATUS    RESTARTS   AGE
python-assist-creation-service-65c77c966b-pfhq8   1/1     Running   0          37m

上面的结果表示Pod是运行正常的,接着再看下服务的启动日志

kubectl logs python-assist-creation-service-65c77c966b-pfhq8 --tail=1000

服务启动是成功的

INFO:     Started server process [1]
INFO:     Waiting for application startup.
2025-10-25 06:47:49.624 PythonAssistCreationService 1 [uvicorn-MainThread] INFO  [PythonAssistCreationService,f4bc91b806c54ecd,9f184bd6,true] main     50: Starting PythonAssistCreationService...
2025-10-25 06:47:49.624 PythonAssistCreationService 1 [uvicorn-MainThread] INFO  [PythonAssistCreationService,3bb72fcd4a224ae9,860c9894,true] core.storage    380: Initializing MongoDB storage
2025-10-25 06:47:50.092 PythonAssistCreationService 1 [uvicorn-MainThread] INFO  [PythonAssistCreationService,2e672e9727a14de8,5e525f0d,true] main     56: Using mongodb storage backend
INFO:     Application startup complete.
INFO:     Uvicorn running on http://0.0.0.0:8000 (Press CTRL+C to quit)

确认Service是否配置成功

可以通过以下命令确认service是否存在

[devinteg@node1-198 /]$ kubectl get service python-assist-creation-service
Error from server (NotFound): services "python-assist-creation-service" not found

看到这里显然大家都知道了,这个service不存在所以访问的时候报错返回503就可以解释了,让我们看看service是如何配置

apiVersion: v1
kind: Service
metadata:name: {{.SERVICE_NAME}}-servicelabels:app: {{.SERVICE_NAME}}annotations:version: v1.0releasedBy: test
spec:selector:app: {{.SERVICE_NAME}}type: ClusterIPports:- protocol: TCPport: 80targetPort: 8000

可以看到service的name配置  name: {{.SERVICE_NAME}}-service,这里的-service是不需要的,这里加了-service,就会导致service的name最终定义为python-assist-creation-service-service,但是service是用来做pod路由的抽象层,其name应该和pod的label保持一致,问题概况大致如下图

探寻问题的本质

完整的关系架构图如下

问题本质是ServiceName命令不正确,所以导致ingress路由到service找不到service,所以报错503了

所以正确的排查思路如下

Kubernetes相关概念总结

在 Kubernetes 中,Service 的实现原理涉及多个组件,包括 Deployment、Service、Pod 和 Container。下面详细介绍这些组件之间的关系和工作原理,并附上逻辑示意图。

组件关系和工作原理
  1. Deployment
    • 定义了应用程序的期望状态,如 Pod 的数量、镜像版本、更新策略等。
    • 管理 Pod 的创建、更新和删除,确保实际状态与期望状态一致。
  2. Service
    • 抽象了后台的一组 Pod,提供了一种稳定的网络访问方式。
    • 通过标签选择器选择与之关联的 Pod。
    • 提供负载均衡和服务发现功能。
  3. Pod
    • Kubernetes 中的最小可调度单元,包含一个或多个容器。
    • 每个 Pod 有一个唯一的 IP 地址,并共享网络和存储资源。
  4. Container
    • 运行在 Pod 内的实际应用实例。
    • 通过容器运行时(如 Docker)来管理其生命周期。
Service 的实现原理
  1. 定义和注册 Service
    • 用户创建一个 Service 对象,API 服务器接收该请求并存储在 etcd 中。
    • Service 对象包含服务名称、选择器、类型、端口等信息。
  2. Endpoints 对象
    • Kubernetes 自动创建并维护 Endpoints 对象,包含与 Service 关联的 Pod 的 IP 地址和端口。
    • 通过标签选择器选择符合条件的 Pod。
  3. kube-proxy 组件
    • 运行在每个节点上,负责实现 Service 的网络代理功能。
    • 通过 iptables、ipvs 或用户空间模式来处理流量并进行负载均衡。
  4. 负载均衡和服务发现
    • kube-proxy 根据 Endpoints 对象的 IP 地址和端口进行流量转发。
    • 内置 DNS 服务为每个 Service 创建 DNS 记录,应用程序通过 DNS 名称访问 Service。
http://www.dtcms.com/a/529133.html

相关文章:

  • 【Python】——注释
  • ASP.NET Core Blazor简介和快速入门三(布局和路由)
  • 基于微信小程序的博物馆文创系统
  • Claude Code更换供应商:Base URL和API Key的注意事项
  • 蛋白质组学技术揭秘帕金森病:LiP-MS、BAR、UltraID - LIPA 助力 α- 突触核蛋白研究
  • 网站基本模块管理系统网站模板下载
  • 网站错位免费秒玩小游戏
  • Windows编程+使用C++编写EXE加壳程序
  • 邢台做网站服务商网页平面设计要学什么
  • Vue3和Vue2的生命周期差异
  • 永不倒闭的10大央企seo网页优化平台
  • 做网站的技术支持蒙牛网站是谁做的
  • 河北手机网站制作价格电子商务网站建设 李洪心
  • 基于Double-LCC与NLC补偿网络的三发射-三接收非接触电能传输系统协同控制策略
  • 国外图床 wordpress海外seo网站建设
  • 企业如何利用AI CRM提升市场竞争力—以悟空AI CRM为例
  • Vue3 组件注册
  • 二手旧书网站开发设计报告开发公司以现金方式补贴给客户
  • AI 驱动的浏览器战争:OpenAI 的 Atlas 来了,安全漏洞却成隐患
  • 从零实现一个可加减的Matrix矩阵类:支持索引、相等判断与实际场景应用
  • CUDA-GDB(5)——内核聚焦
  • 51c大模型~合集29
  • 543刷题记录
  • 上海门户网站建设公司logo在线
  • 【FPGA】三八译码器——仿真验证
  • 哪些网站可以做设计方案网站建设 客户
  • h5游戏免费下载:堆雪人
  • UltraISO制作系统启动盘
  • 未来之窗昭和仙君(三十六)抽奖随机算法前端——东方仙盟筑基期
  • wordpress网站添加密码访问17网站一起做网店广