使用 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】:

从截图来看,我假设您的 Uvicornlisteningdefault hostport 绑定到 @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 资源不会创建负载均衡器

Kubernetes AWS EKS 负载均衡器未配置

负载均衡器的 AWS EKS 服务 EXTERNAL-IP 处于待处理状态

AWS eks绑定alb 使用aws-load-balancer-controller(Ingress Controller)提供服务

AWS eks绑定alb 使用aws-load-balancer-controller(Ingress Controller)提供服务

在 AWS 中,如何将 Web 服务器安全组配置为仅接受来自 AWS 中的负载均衡器的流量?