使用 AWS 负载均衡器将来自 EKS 的 FastAPI 公开给外部世界
Posted
技术标签:
【中文标题】使用 AWS 负载均衡器将来自 EKS 的 FastAPI 公开给外部世界【英文标题】:Expose FastAPI from EKS to external world with AWS Load Balancer 【发布时间】:2021-11-11 08:11:22 【问题描述】:我在 EKS 中部署了一个 FastAPI 应用程序。它目前正在侦听端口 8000。它正在使用 uvicorn 运行。
我正在尝试通过在 EKS 中创建服务来从 AWS 创建经典负载均衡器,从而将其对外公开。
apiVersion: v1
kind: Service
metadata:
name: bc-warrants-api-svc
spec:
type: LoadBalancer
selector:
app: bc-warrants-api
ports:
- protocol: TCP
port: 8000
targetPort: 8000
当我检查负载均衡器时,它说目标实例是 OutOfService。
我有一个运行良好的 Django 应用程序(通过经典负载平衡器对外公开)。
有人知道我在使用 FastAPI 时做错了什么吗?
【问题讨论】:
我现在开始工作了。我将应用程序的端口更改为端口 80,并从容器中公开端口 80。将 LoadBalancer、port 和 targetPort 类型的 Service 更新为 80。 【参考方案1】:检查 CLB 的健康检查。罪魁祸首通常会在那里。您可以看到您的 CLB 正在哪个端口和端点上执行健康检查。在适当的端点上配置健康检查,该实例应再次标记为健康。
【讨论】:
【参考方案2】:从截图来看,我假设您的 Uvicorn 是 listening 到 default host
和 port
绑定到 @987654324 @ 和端口8000
。
要让您的应用程序暴露在互联网上,您需要将 default listen
address 更改为 0.0.0.0
$ uvicorn main:app --host 0.0.0.0 --reload
您可以在此处获取更多详细信息:https://www.uvicorn.org/settings/
【讨论】:
以上是关于使用 AWS 负载均衡器将来自 EKS 的 FastAPI 公开给外部世界的主要内容,如果未能解决你的问题,请参考以下文章
带有 ALB 入口控制器的 Terraform AWS Kubernetes EKS 资源不会创建负载均衡器
负载均衡器的 AWS EKS 服务 EXTERNAL-IP 处于待处理状态
AWS eks绑定alb 使用aws-load-balancer-controller(Ingress Controller)提供服务
AWS eks绑定alb 使用aws-load-balancer-controller(Ingress Controller)提供服务