You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

EKS部署FastAPI通过AWS负载均衡对外暴露时实例OutOfService如何解决

FastAPI部署在EKS中CLB目标组OutOfService排查解决方案
  • 首先检查Uvicorn监听地址配置,这是FastAPI场景下最高发的问题:
    默认情况下直接执行uvicorn main:app会监听127.0.0.1:8000,仅支持Pod本地访问,集群内其他节点、CLB均无法访问。需修改启动命令,指定监听所有网卡:
uvicorn main:app --host 0.0.0.0 --port 8000

将该配置更新到Dockerfile的CMD字段,或者K8s Deployment的command/args字段即可。

  • 验证Service selector与Pod标签匹配:
    执行kubectl get pods --show-labels | grep bc-warrants-api,确认Pod的app标签值与Service配置中selector.app: bc-warrants-api完全一致,拼写、大小写无错误。
    匹配正确的前提下执行kubectl describe svc bc-warrants-api-svc,查看Endpoints字段是否显示对应的Pod IP,无IP则说明标签匹配失败,调整Deployment的labels配置即可。

  • 检查CLB健康检查配置:
    AWS经典负载均衡默认HTTP模式健康检查会请求根路径/,如果FastAPI未配置根路径的GET接口,会返回404导致健康检查失败,服务被标记为OutOfService。两种解决方法:

  1. 为FastAPI新增根路径健康检查接口:
@app.get("/")
async def health_check():
    return {"status": "healthy"}
  1. 在AWS控制台CLB配置页,将健康检查类型修改为TCP(直接验证8000端口连通性),或者将健康检查路径修改为你已实现的健康接口路径(如/health)。
  • 验证安全组与网络策略配置:
    确认EKS工作节点安全组的入站规则,开放8000端口的TCP访问,源地址为CLB的安全组ID。如果集群配置了Pod网络策略,也需要确认允许来自CLB网段的8000端口访问请求。

  • 排查FastAPI服务本身运行异常:
    执行kubectl exec -it <你的FastAPI Pod名称> -- curl 127.0.0.1:8000,验证Pod本地访问服务是否正常,如果本地访问失败,执行kubectl logs <你的FastAPI Pod名称>查看服务启动日志,排查代码错误、依赖缺失等问题。

同环境Django服务可以正常通过CLB暴露,说明集群、CLB层面的基础配置无异常,优先排查前两项即可覆盖90%以上的同类问题


内容的提问来源于stack exchange,提问作者cloudviz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 22:06:04